diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index 81b0681..6a1b42c 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -16,6 +16,7 @@
 #include <linux/sort.h>
 #include <linux/jhash.h>
 #include <linux/kref.h>
+#include <linux/kallsyms.h>
 #include <linux/gfs2_ondisk.h>
 #include <asm/semaphore.h>
 #include <asm/uaccess.h>
@@ -357,6 +358,7 @@
 {
 	INIT_LIST_HEAD(&gh->gh_list);
 	gh->gh_gl = gl;
+	gh->gh_ip = (unsigned long)__builtin_return_address(0);
 	gh->gh_owner = (flags & GL_NEVER_RECURSE) ? NULL : current;
 	gh->gh_state = state;
 	gh->gh_flags = flags;
@@ -388,6 +390,7 @@
 		gh->gh_flags |= GL_LOCAL_EXCL;
 
 	gh->gh_iflags &= 1 << HIF_ALLOCED;
+	gh->gh_ip = (unsigned long)__builtin_return_address(0);
 }
 
 /**
@@ -400,6 +403,7 @@
 {
 	gfs2_glock_put(gh->gh_gl);
 	gh->gh_gl = NULL;
+	gh->gh_ip = 0;
 }
 
 /**
@@ -427,7 +431,7 @@
 
 	gfs2_holder_init(gl, state, flags, gh);
 	set_bit(HIF_ALLOCED, &gh->gh_iflags);
-
+	gh->gh_ip = (unsigned long)__builtin_return_address(0);
 	return gh;
 }
 
@@ -1238,6 +1242,9 @@
 	return 0;
 
  fail:
+	print_symbol(KERN_WARNING "GFS2: Existing holder from %s\n",
+		     existing->gh_ip);
+	print_symbol(KERN_WARNING "GFS2: New holder from %s\n", new->gh_ip);
 	set_bit(HIF_ABORTED, &new->gh_iflags);
 	return -EINVAL;
 }
@@ -1544,30 +1551,6 @@
 }
 
 /**
- * gfs2_glock_nq_init - intialize a holder and enqueue it on a glock
- * @gl: the glock
- * @state: the state we're requesting
- * @flags: the modifier flags
- * @gh: the holder structure
- *
- * Returns: 0, GLR_*, or errno
- */
-
-int gfs2_glock_nq_init(struct gfs2_glock *gl, unsigned int state, int flags,
-		       struct gfs2_holder *gh)
-{
-	int error;
-
-	gfs2_holder_init(gl, state, flags, gh);
-
-	error = gfs2_glock_nq(gh);
-	if (error)
-		gfs2_holder_uninit(gh);
-
-	return error;
-}
-
-/**
  * gfs2_glock_dq_uninit - dequeue a holder from a glock and initialize it
  * @gh: the holder structure
  *
@@ -2334,6 +2317,7 @@
 		if (test_bit(x, &gh->gh_iflags))
 			printk(" %u", x);
 	printk(" \n");
+	print_symbol(KERN_INFO "    initialized at: %s\n", gh->gh_ip);
 
 	error = 0;
 
diff --git a/fs/gfs2/glock.h b/fs/gfs2/glock.h
index 06847eb..560029d 100644
--- a/fs/gfs2/glock.h
+++ b/fs/gfs2/glock.h
@@ -106,8 +106,6 @@
 
 int gfs2_glock_be_greedy(struct gfs2_glock *gl, unsigned int time);
 
-int gfs2_glock_nq_init(struct gfs2_glock *gl, unsigned int state, int flags,
-		       struct gfs2_holder *gh);
 void gfs2_glock_dq_uninit(struct gfs2_holder *gh);
 int gfs2_glock_nq_num(struct gfs2_sbd *sdp,
 		      uint64_t number, struct gfs2_glock_operations *glops,
@@ -121,6 +119,31 @@
 			     struct gfs2_glock_operations *glops,
 			     unsigned int state, int flags);
 
+/**
+ * gfs2_glock_nq_init - intialize a holder and enqueue it on a glock
+ * @gl: the glock
+ * @state: the state we're requesting
+ * @flags: the modifier flags
+ * @gh: the holder structure
+ *
+ * Returns: 0, GLR_*, or errno
+ */
+
+static inline int gfs2_glock_nq_init(struct gfs2_glock *gl,
+				     unsigned int state, int flags,
+				     struct gfs2_holder *gh)
+{
+	int error;
+
+	gfs2_holder_init(gl, state, flags, gh);
+
+	error = gfs2_glock_nq(gh);
+	if (error)
+		gfs2_holder_uninit(gh);
+
+	return error;
+}
+
 /*  Lock Value Block functions  */
 
 int gfs2_lvb_hold(struct gfs2_glock *gl);
diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h
index 35163b5..b5a994d 100644
--- a/fs/gfs2/incore.h
+++ b/fs/gfs2/incore.h
@@ -161,6 +161,7 @@
 	int gh_error;
 	unsigned long gh_iflags;
 	struct completion gh_wait;
+	unsigned long gh_ip;
 };
 
 enum {
@@ -353,8 +354,7 @@
 };
 
 struct gfs2_trans {
-	char *tr_file;
-	unsigned int tr_line;
+	unsigned long tr_ip;
 
 	unsigned int tr_blocks;
 	unsigned int tr_revokes;
diff --git a/fs/gfs2/trans.c b/fs/gfs2/trans.c
index aa1a619..3fae3d4 100644
--- a/fs/gfs2/trans.c
+++ b/fs/gfs2/trans.c
@@ -13,6 +13,7 @@
 #include <linux/completion.h>
 #include <linux/buffer_head.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/kallsyms.h>
 #include <asm/semaphore.h>
 
 #include "gfs2.h"
@@ -25,24 +26,20 @@
 #include "trans.h"
 #include "util.h"
 
-int gfs2_trans_begin_i(struct gfs2_sbd *sdp, unsigned int blocks,
-		       unsigned int revokes, char *file, unsigned int line)
+int gfs2_trans_begin(struct gfs2_sbd *sdp, unsigned int blocks,
+		     unsigned int revokes)
 {
 	struct gfs2_trans *tr;
 	int error;
 
-	if (gfs2_assert_warn(sdp, !current->journal_info) ||
-	    gfs2_assert_warn(sdp, blocks || revokes)) {
-		fs_warn(sdp, "(%s, %u)\n", file, line);
-		return -EINVAL;
-	}
+	BUG_ON(current->journal_info);
+	BUG_ON(blocks == 0 && revokes == 0);
 
 	tr = kzalloc(sizeof(struct gfs2_trans), GFP_NOFS);
 	if (!tr)
 		return -ENOMEM;
 
-	tr->tr_file = file;
-	tr->tr_line = line;
+	tr->tr_ip = (unsigned long)__builtin_return_address(0);
 	tr->tr_blocks = blocks;
 	tr->tr_revokes = revokes;
 	tr->tr_reserved = 1;
@@ -104,16 +101,15 @@
 		return;
 	}
 
-	if (gfs2_assert_withdraw(sdp, tr->tr_num_buf <= tr->tr_blocks))
-		fs_err(sdp, "tr_num_buf = %u, tr_blocks = %u "
-		       "tr_file = %s, tr_line = %u\n",
-		       tr->tr_num_buf, tr->tr_blocks,
-		       tr->tr_file, tr->tr_line);
+	if (gfs2_assert_withdraw(sdp, tr->tr_num_buf <= tr->tr_blocks)) {
+		fs_err(sdp, "tr_num_buf = %u, tr_blocks = %u ",
+		       tr->tr_num_buf, tr->tr_blocks);
+		print_symbol(KERN_WARNING "GFS2: Transaction created at: %s\n", tr->tr_ip);
+	}
 	if (gfs2_assert_withdraw(sdp, tr->tr_num_revoke <= tr->tr_revokes))
-		fs_err(sdp, "tr_num_revoke = %u, tr_revokes = %u "
-		       "tr_file = %s, tr_line = %u\n",
-		       tr->tr_num_revoke, tr->tr_revokes,
-		       tr->tr_file, tr->tr_line);
+		fs_err(sdp, "tr_num_revoke = %u, tr_revokes = %u ",
+		       tr->tr_num_revoke, tr->tr_revokes);
+		print_symbol(KERN_WARNING "GFS2: Transaction created at: %s\n", tr->tr_ip);
 
 	gfs2_log_commit(sdp, tr);
 
diff --git a/fs/gfs2/trans.h b/fs/gfs2/trans.h
index f7f3e2a..6b5e9e8 100644
--- a/fs/gfs2/trans.h
+++ b/fs/gfs2/trans.h
@@ -21,12 +21,8 @@
 #define RES_STATFS	1
 #define RES_QUOTA	2
 
-#define gfs2_trans_begin(sdp, blocks, revokes) \
-gfs2_trans_begin_i((sdp), (blocks), (revokes), __FILE__, __LINE__)
-
-int gfs2_trans_begin_i(struct gfs2_sbd *sdp,
-		      unsigned int blocks, unsigned int revokes,
-		      char *file, unsigned int line);
+int gfs2_trans_begin(struct gfs2_sbd *sdp,
+		      unsigned int blocks, unsigned int revokes);
 
 void gfs2_trans_end(struct gfs2_sbd *sdp);
 
