diff --git a/fs/gfs2/acl.c b/fs/gfs2/acl.c
index 33c465a..9482a67 100644
--- a/fs/gfs2/acl.c
+++ b/fs/gfs2/acl.c
@@ -202,7 +202,7 @@
 		gfs2_assert_withdraw(sdp,
 				(ip->i_di.di_mode & S_IFMT) == (mode & S_IFMT));
 		ip->i_di.di_mode = mode;
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 		gfs2_dinode_out(&ip->i_di, dibh->b_data);
 		brelse(dibh);
 	}
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index bece362..967cbc6 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -124,7 +124,7 @@
 
 	/*  Set up the pointer to the new block  */
 
-	gfs2_trans_add_bh(ip->i_gl, dibh);
+	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 
 	gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode));
 
@@ -223,7 +223,7 @@
 			block = gfs2_alloc_meta(ip);
 
 			bh = gfs2_meta_new(ip->i_gl, block);
-			gfs2_trans_add_bh(ip->i_gl, bh);
+			gfs2_trans_add_bh(ip->i_gl, bh, 1);
 			gfs2_metatype_set(bh,
 					  GFS2_METATYPE_IN,
 					  GFS2_FORMAT_IN);
@@ -236,7 +236,7 @@
 
 		/*  Set up the new direct pointer and write it out to disk  */
 
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 
 		gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode));
 
@@ -382,7 +382,7 @@
 	else
 		*block = gfs2_alloc_meta(ip);
 
-	gfs2_trans_add_bh(ip->i_gl, bh);
+	gfs2_trans_add_bh(ip->i_gl, bh, 1);
 
 	*ptr = cpu_to_be64(*block);
 	ip->i_di.di_blocks++;
@@ -490,7 +490,7 @@
 	if (*new) {
 		error = gfs2_meta_inode_buffer(ip, &bh);
 		if (!error) {
-			gfs2_trans_add_bh(ip->i_gl, bh);
+			gfs2_trans_add_bh(ip->i_gl, bh, 1);
 			gfs2_dinode_out(&ip->i_di, bh->b_data);
 			brelse(bh);
 		}
@@ -672,8 +672,8 @@
 
 	down_write(&ip->i_rw_mutex);
 
-	gfs2_trans_add_bh(ip->i_gl, dibh);
-	gfs2_trans_add_bh(ip->i_gl, bh);
+	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
+	gfs2_trans_add_bh(ip->i_gl, bh, 1);
 
 	bstart = 0;
 	blen = 0;
@@ -795,7 +795,7 @@
 	if (error)
 		goto out_end_trans;
 
-	gfs2_trans_add_bh(ip->i_gl, dibh);
+	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 	gfs2_dinode_out(&ip->i_di, dibh->b_data);
 	brelse(dibh);
 
@@ -833,7 +833,7 @@
 	if (error)
 		return error;
 
-	gfs2_trans_add_bh(ip->i_gl, bh);
+	gfs2_trans_add_bh(ip->i_gl, bh, 1);
 	gfs2_buffer_clear_tail(bh, sizeof(struct gfs2_meta_header) + off);
 
 	brelse(bh);
@@ -861,7 +861,7 @@
 	if (gfs2_is_stuffed(ip)) {
 		ip->i_di.di_size = size;
 		ip->i_di.di_mtime = ip->i_di.di_ctime = get_seconds();
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 		gfs2_dinode_out(&ip->i_di, dibh->b_data);
 		gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode) + size);
 		error = 1;
@@ -879,7 +879,7 @@
 			ip->i_di.di_size = size;
 			ip->i_di.di_mtime = ip->i_di.di_ctime = get_seconds();
 			ip->i_di.di_flags |= GFS2_DIF_TRUNC_IN_PROG;
-			gfs2_trans_add_bh(ip->i_gl, dibh);
+			gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 			gfs2_dinode_out(&ip->i_di, dibh->b_data);
 		}
 	}
@@ -957,7 +957,7 @@
 	ip->i_di.di_mtime = ip->i_di.di_ctime = get_seconds();
 	ip->i_di.di_flags &= ~GFS2_DIF_TRUNC_IN_PROG;
 
-	gfs2_trans_add_bh(ip->i_gl, dibh);
+	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 	gfs2_dinode_out(&ip->i_di, dibh->b_data);
 	brelse(dibh);
 
diff --git a/fs/gfs2/dir.c b/fs/gfs2/dir.c
index f6304e5..93d3704 100644
--- a/fs/gfs2/dir.c
+++ b/fs/gfs2/dir.c
@@ -201,7 +201,7 @@
 		return;
 	}
 
-	gfs2_trans_add_bh(dip->i_gl, bh);
+	gfs2_trans_add_bh(dip->i_gl, bh, 1);
 
 	/* If there is no prev entry, this is the first entry in the block.
 	   The de_rec_len is already as big as it needs to be.  Just zero
@@ -264,7 +264,7 @@
 			return -EIO;
 		}
 
-		gfs2_trans_add_bh(dip->i_gl, bh);
+		gfs2_trans_add_bh(dip->i_gl, bh, 1);
 
 		dent->de_rec_len = bh->b_size - offset;
 		dent->de_rec_len = cpu_to_be32(dent->de_rec_len);
@@ -282,7 +282,7 @@
 
 		if ((!dent->de_inum.no_addr && cur_rec_len >= rec_len) ||
 		    (cur_rec_len >= GFS2_DIRENT_SIZE(cur_name_len) + rec_len)) {
-			gfs2_trans_add_bh(dip->i_gl, bh);
+			gfs2_trans_add_bh(dip->i_gl, bh, 1);
 
 			if (dent->de_inum.no_addr) {
 				new = (struct gfs2_dirent *)((char *)dent +
@@ -552,7 +552,7 @@
 	/*  Turn over a new leaf  */
 
 	bh = gfs2_meta_new(dip->i_gl, bn);
-	gfs2_trans_add_bh(dip->i_gl, bh);
+	gfs2_trans_add_bh(dip->i_gl, bh, 1);
 	gfs2_metatype_set(bh, GFS2_METATYPE_LF, GFS2_FORMAT_LF);
 	gfs2_buffer_clear_tail(bh, sizeof(struct gfs2_meta_header));
 
@@ -596,7 +596,7 @@
 	/*  We're done with the new leaf block, now setup the new
 	    hash table.  */
 
-	gfs2_trans_add_bh(dip->i_gl, dibh);
+	gfs2_trans_add_bh(dip->i_gl, dibh, 1);
 	gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode));
 
 	lp = (uint64_t *)(dibh->b_data + sizeof(struct gfs2_dinode));
@@ -647,7 +647,7 @@
 	/*  Get the new leaf block  */
 
 	nbh = gfs2_meta_new(dip->i_gl, bn);
-	gfs2_trans_add_bh(dip->i_gl, nbh);
+	gfs2_trans_add_bh(dip->i_gl, nbh, 1);
 	gfs2_metatype_set(nbh, GFS2_METATYPE_LF, GFS2_FORMAT_LF);
 	gfs2_buffer_clear_tail(nbh, sizeof(struct gfs2_meta_header));
 
@@ -661,7 +661,7 @@
 	if (error)
 		goto fail;
 
-	gfs2_trans_add_bh(dip->i_gl, obh);
+	gfs2_trans_add_bh(dip->i_gl, obh, 1);
 
 	oleaf = (struct gfs2_leaf *)obh->b_data;
 
@@ -1285,14 +1285,14 @@
 				bn = gfs2_alloc_meta(dip);
 
 				nbh = gfs2_meta_new(dip->i_gl, bn);
-				gfs2_trans_add_bh(dip->i_gl, nbh);
+				gfs2_trans_add_bh(dip->i_gl, nbh, 1);
 				gfs2_metatype_set(nbh,
 						 GFS2_METATYPE_LF,
 						 GFS2_FORMAT_LF);
 				gfs2_buffer_clear_tail(nbh,
 					sizeof(struct gfs2_meta_header));
 
-				gfs2_trans_add_bh(dip->i_gl, bh);
+				gfs2_trans_add_bh(dip->i_gl, bh, 1);
 				leaf->lf_next = cpu_to_be64(bn);
 
 				nleaf = (struct gfs2_leaf *)nbh->b_data;
@@ -1330,7 +1330,7 @@
 		dip->i_di.di_entries++;
 		dip->i_di.di_mtime = dip->i_di.di_ctime = get_seconds();
 
-		gfs2_trans_add_bh(dip->i_gl, dibh);
+		gfs2_trans_add_bh(dip->i_gl, dibh, 1);
 		gfs2_dinode_out(&dip->i_di, dibh->b_data);
 		brelse(dibh);
 
@@ -1376,7 +1376,7 @@
 	dip->i_di.di_entries--;
 	dip->i_di.di_mtime = dip->i_di.di_ctime = get_seconds();
 
-	gfs2_trans_add_bh(dip->i_gl, dibh);
+	gfs2_trans_add_bh(dip->i_gl, dibh, 1);
 	gfs2_dinode_out(&dip->i_di, dibh->b_data);
 	brelse(dibh);
 
@@ -1481,7 +1481,7 @@
 	if (error)
 		return error;
 
-	gfs2_trans_add_bh(dip->i_gl, bh);
+	gfs2_trans_add_bh(dip->i_gl, bh, 1);
 
 	gfs2_inum_out(inum, (char *)&dent->de_inum);
 	dent->de_type = new_type;
@@ -1494,7 +1494,7 @@
 
 	dip->i_di.di_mtime = dip->i_di.di_ctime = get_seconds();
 
-	gfs2_trans_add_bh(dip->i_gl, dibh);
+	gfs2_trans_add_bh(dip->i_gl, dibh, 1);
 	gfs2_dinode_out(&dip->i_di, dibh->b_data);
 	brelse(dibh);
 
@@ -1681,7 +1681,7 @@
 	if (error)
 		goto out;
 
-	gfs2_trans_add_bh(dip->i_gl, dibh);
+	gfs2_trans_add_bh(dip->i_gl, dibh, 1);
 
 	gfs2_inum_out(inum, (char *)&dent->de_inum);
 	dent->de_type = new_type;
@@ -1976,7 +1976,7 @@
 	if (error)
 		goto out_end_trans;
 
-	gfs2_trans_add_bh(dip->i_gl, dibh);
+	gfs2_trans_add_bh(dip->i_gl, dibh, 1);
 	gfs2_dinode_out(&dip->i_di, dibh->b_data);
 	brelse(dibh);
 
@@ -2030,7 +2030,7 @@
 
 	error = gfs2_meta_inode_buffer(dip, &bh);
 	if (!error) {
-		gfs2_trans_add_bh(dip->i_gl, bh);
+		gfs2_trans_add_bh(dip->i_gl, bh, 1);
 		((struct gfs2_dinode *)bh->b_data)->di_mode = cpu_to_be32(S_IFREG);
 		brelse(bh);
 	}
diff --git a/fs/gfs2/eattr.c b/fs/gfs2/eattr.c
index dec55dc..02e45c4 100644
--- a/fs/gfs2/eattr.c
+++ b/fs/gfs2/eattr.c
@@ -268,7 +268,7 @@
 	if (error)
 		goto out_gunlock;
 
-	gfs2_trans_add_bh(ip->i_gl, bh);
+	gfs2_trans_add_bh(ip->i_gl, bh, 1);
 
 	dataptrs = GFS2_EA2DATAPTRS(ea);
 	for (x = 0; x < ea->ea_num_ptrs; x++, dataptrs++) {
@@ -309,7 +309,7 @@
 	error = gfs2_meta_inode_buffer(ip, &dibh);
 	if (!error) {
 		ip->i_di.di_ctime = get_seconds();
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 		gfs2_dinode_out(&ip->i_di, dibh->b_data);
 		brelse(dibh);
 	}
@@ -628,7 +628,7 @@
 	block = gfs2_alloc_meta(ip);
 
 	*bhp = gfs2_meta_new(ip->i_gl, block);
-	gfs2_trans_add_bh(ip->i_gl, *bhp);
+	gfs2_trans_add_bh(ip->i_gl, *bhp, 1);
 	gfs2_metatype_set(*bhp, GFS2_METATYPE_EA, GFS2_FORMAT_EA);
 	gfs2_buffer_clear_tail(*bhp, sizeof(struct gfs2_meta_header));
 
@@ -686,7 +686,7 @@
 			block = gfs2_alloc_meta(ip);
 
 			bh = gfs2_meta_new(ip->i_gl, block);
-			gfs2_trans_add_bh(ip->i_gl, bh);
+			gfs2_trans_add_bh(ip->i_gl, bh, 1);
 			gfs2_metatype_set(bh, GFS2_METATYPE_ED, GFS2_FORMAT_ED);
 
 			ip->i_di.di_blocks++;
@@ -759,7 +759,7 @@
 			ip->i_di.di_mode = er->er_mode;
 		}
 		ip->i_di.di_ctime = get_seconds();
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 		gfs2_dinode_out(&ip->i_di, dibh->b_data);
 		brelse(dibh);
 	}
@@ -839,7 +839,7 @@
 	struct gfs2_ea_header *prev = el->el_prev;
 	uint32_t len;
 
-	gfs2_trans_add_bh(ip->i_gl, el->el_bh);
+	gfs2_trans_add_bh(ip->i_gl, el->el_bh, 1);
 
 	if (!prev || !GFS2_EA_IS_STUFFED(ea)) {
 		ea->ea_type = GFS2_EATYPE_UNUSED;
@@ -877,7 +877,7 @@
 	if (error)
 		return error;
 
-	gfs2_trans_add_bh(ip->i_gl, bh);
+	gfs2_trans_add_bh(ip->i_gl, bh, 1);
 
 	if (es->ea_split)
 		ea = ea_split_ea(ea);
@@ -897,7 +897,7 @@
 		ip->i_di.di_mode = er->er_mode;
 	}
 	ip->i_di.di_ctime = get_seconds();
-	gfs2_trans_add_bh(ip->i_gl, dibh);
+	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 	gfs2_dinode_out(&ip->i_di, dibh->b_data);
 	brelse(dibh);
  out:
@@ -913,7 +913,7 @@
 	struct gfs2_ea_header *ea = es->es_ea;
 	int error;
 
-	gfs2_trans_add_bh(ip->i_gl, es->es_bh);
+	gfs2_trans_add_bh(ip->i_gl, es->es_bh, 1);
 
 	if (es->ea_split)
 		ea = ea_split_ea(ea);
@@ -1007,14 +1007,14 @@
 			goto out;
 		}
 
-		gfs2_trans_add_bh(ip->i_gl, indbh);
+		gfs2_trans_add_bh(ip->i_gl, indbh, 1);
 	} else {
 		uint64_t blk;
 
 		blk = gfs2_alloc_meta(ip);
 
 		indbh = gfs2_meta_new(ip->i_gl, blk);
-		gfs2_trans_add_bh(ip->i_gl, indbh);
+		gfs2_trans_add_bh(ip->i_gl, indbh, 1);
 		gfs2_metatype_set(indbh, GFS2_METATYPE_IN, GFS2_FORMAT_IN);
 		gfs2_buffer_clear_tail(indbh, mh_size);
 
@@ -1163,7 +1163,7 @@
 	if (error)
 		return error;
 
-	gfs2_trans_add_bh(ip->i_gl, el->el_bh);
+	gfs2_trans_add_bh(ip->i_gl, el->el_bh, 1);
 
 	if (prev) {
 		uint32_t len;
@@ -1179,7 +1179,7 @@
 	error = gfs2_meta_inode_buffer(ip, &dibh);
 	if (!error) {
 		ip->i_di.di_ctime = get_seconds();
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 		gfs2_dinode_out(&ip->i_di, dibh->b_data);
 		brelse(dibh);
 	}	
@@ -1288,7 +1288,7 @@
 			goto fail;
 		}
 
-		gfs2_trans_add_bh(ip->i_gl, bh[x]);
+		gfs2_trans_add_bh(ip->i_gl, bh[x], 1);
 
 		memcpy(bh[x]->b_data + sizeof(struct gfs2_meta_header),
 		       data,
@@ -1323,7 +1323,7 @@
 		if (error)
 			return error;
 
-		gfs2_trans_add_bh(ip->i_gl, el->el_bh);
+		gfs2_trans_add_bh(ip->i_gl, el->el_bh, 1);
 		memcpy(GFS2_EA2DATA(el->el_ea),
 		       data,
 		       GFS2_EA_DATA_LEN(el->el_ea));
@@ -1338,7 +1338,7 @@
 		error = inode_setattr(ip->i_vnode, attr);
 		gfs2_assert_warn(ip->i_sbd, !error);
 		gfs2_inode_attr_out(ip);
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 		gfs2_dinode_out(&ip->i_di, dibh->b_data);
 		brelse(dibh);
 	}
@@ -1416,7 +1416,7 @@
 	if (error)
 		goto out_gunlock;
 
-	gfs2_trans_add_bh(ip->i_gl, indbh);
+	gfs2_trans_add_bh(ip->i_gl, indbh, 1);
 
 	eablk = (uint64_t *)(indbh->b_data + sizeof(struct gfs2_meta_header));
 	bstart = 0;
@@ -1450,7 +1450,7 @@
 
 	error = gfs2_meta_inode_buffer(ip, &dibh);
 	if (!error) {
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 		gfs2_dinode_out(&ip->i_di, dibh->b_data);
 		brelse(dibh);
 	}
@@ -1502,7 +1502,7 @@
 
 	error = gfs2_meta_inode_buffer(ip, &dibh);
 	if (!error) {
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 		gfs2_dinode_out(&ip->i_di, dibh->b_data);
 		brelse(dibh);
 	}
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c
index aa5311e..9ed7c05 100644
--- a/fs/gfs2/inode.c
+++ b/fs/gfs2/inode.c
@@ -691,7 +691,7 @@
 	ip->i_di.di_nlink = nlink;
 	ip->i_di.di_ctime = get_seconds();
 
-	gfs2_trans_add_bh(ip->i_gl, dibh);
+	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 	gfs2_dinode_out(&ip->i_di, dibh->b_data);
 	brelse(dibh);
 
@@ -786,7 +786,7 @@
 	if (ir.ir_length) {
 		*formal_ino = ir.ir_start++;
 		ir.ir_length--;
-		gfs2_trans_add_bh(ip->i_gl, bh);
+		gfs2_trans_add_bh(ip->i_gl, bh, 1);
 		gfs2_inum_range_out(&ir,
 				    bh->b_data + sizeof(struct gfs2_dinode));
 		brelse(bh);
@@ -843,7 +843,7 @@
 		if (x < y)
 			gfs2_consist_inode(m_ip);
 		x = cpu_to_be64(x);
-		gfs2_trans_add_bh(m_ip->i_gl, m_bh);
+		gfs2_trans_add_bh(m_ip->i_gl, m_bh, 1);
 		*(uint64_t *)(m_bh->b_data + sizeof(struct gfs2_dinode)) = x;
 
 		brelse(m_bh);
@@ -852,7 +852,7 @@
 	*formal_ino = ir.ir_start++;
 	ir.ir_length--;
 
-	gfs2_trans_add_bh(ip->i_gl, bh);
+	gfs2_trans_add_bh(ip->i_gl, bh, 1);
 	gfs2_inum_range_out(&ir, bh->b_data + sizeof(struct gfs2_dinode));
 
  out_brelse:
@@ -997,7 +997,7 @@
 	struct buffer_head *dibh;
 
 	dibh = gfs2_meta_new(gl, inum->no_addr);
-	gfs2_trans_add_bh(gl, dibh);
+	gfs2_trans_add_bh(gl, dibh, 1);
 	gfs2_metatype_set(dibh, GFS2_METATYPE_DI, GFS2_FORMAT_DI);
 	gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode));
 	di = (struct gfs2_dinode *)dibh->b_data;
@@ -1135,7 +1135,7 @@
 	if (error)
 		goto fail_end_trans;
 	ip->i_di.di_nlink = 1;
-	gfs2_trans_add_bh(ip->i_gl, dibh);
+	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 	gfs2_dinode_out(&ip->i_di, dibh->b_data);
 	brelse(dibh);
 
@@ -1601,7 +1601,7 @@
 
 			ip->i_di.di_atime = curtime;
 
-			gfs2_trans_add_bh(ip->i_gl, dibh);
+			gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 			gfs2_dinode_out(&ip->i_di, dibh->b_data);
 			brelse(dibh);
 
@@ -1776,7 +1776,7 @@
 		gfs2_assert_warn(ip->i_sbd, !error);
 		gfs2_inode_attr_out(ip);
 
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 		gfs2_dinode_out(&ip->i_di, dibh->b_data);
 		brelse(dibh);
 	}
diff --git a/fs/gfs2/jdata.c b/fs/gfs2/jdata.c
index d4adbf1..6caa93e 100644
--- a/fs/gfs2/jdata.c
+++ b/fs/gfs2/jdata.c
@@ -30,7 +30,7 @@
 
 	if (new) {
 		bh = gfs2_meta_new(ip->i_gl, block);
-		gfs2_trans_add_bh(ip->i_gl, bh);
+		gfs2_trans_add_bh(ip->i_gl, bh, 1);
 		gfs2_metatype_set(bh, GFS2_METATYPE_JD, GFS2_FORMAT_JD);
 		gfs2_buffer_clear_tail(bh, sizeof(struct gfs2_meta_header));
 	} else {
@@ -220,7 +220,7 @@
 int gfs2_copy_from_mem(struct gfs2_inode *ip, struct buffer_head *bh,
 		       const char **buf, unsigned int offset, unsigned int size)
 {
-	gfs2_trans_add_bh(ip->i_gl, bh);
+	gfs2_trans_add_bh(ip->i_gl, bh, 1);
 	memcpy(bh->b_data + offset, *buf, size);
 
 	*buf += size;
@@ -243,7 +243,7 @@
 {
 	int error = 0;
 
-	gfs2_trans_add_bh(ip->i_gl, bh);
+	gfs2_trans_add_bh(ip->i_gl, bh, 1);
 	if (copy_from_user(bh->b_data + offset, *buf, size))
 		error = -EFAULT;
 	else
@@ -368,7 +368,7 @@
 		ip->i_di.di_size = offset + copied;
 	ip->i_di.di_mtime = ip->i_di.di_ctime = get_seconds();
 
-	gfs2_trans_add_bh(ip->i_gl, dibh);
+	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 	gfs2_dinode_out(&ip->i_di, dibh->b_data);
 	brelse(dibh);
 
diff --git a/fs/gfs2/meta_io.c b/fs/gfs2/meta_io.c
index 177b024..8bbe118 100644
--- a/fs/gfs2/meta_io.c
+++ b/fs/gfs2/meta_io.c
@@ -786,7 +786,7 @@
 			brelse(bh);
 			return -EIO;
 		}
-		gfs2_trans_add_bh(ip->i_gl, bh);
+		gfs2_trans_add_bh(ip->i_gl, bh, 1);
 		gfs2_metatype_set(bh, GFS2_METATYPE_IN, GFS2_FORMAT_IN);
 		gfs2_buffer_clear_tail(bh, sizeof(struct gfs2_meta_header));
 
diff --git a/fs/gfs2/ops_address.c b/fs/gfs2/ops_address.c
index 0aa5f14..d352b35 100644
--- a/fs/gfs2/ops_address.c
+++ b/fs/gfs2/ops_address.c
@@ -368,7 +368,7 @@
 		if (error)
 			goto fail;
 
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 
 		kaddr = kmap(page);
 		memcpy(dibh->b_data + sizeof(struct gfs2_dinode) + from,
diff --git a/fs/gfs2/ops_file.c b/fs/gfs2/ops_file.c
index 563c19d..0f356fc 100644
--- a/fs/gfs2/ops_file.c
+++ b/fs/gfs2/ops_file.c
@@ -456,7 +456,7 @@
 		ip->i_di.di_mode &= (ip->i_di.di_mode & S_IXGRP) ?
 			(~(S_ISUID | S_ISGID)) : (~S_ISUID);
 
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 		gfs2_dinode_out(&ip->i_di, dibh->b_data);
 		brelse(dibh);
 	}
@@ -481,7 +481,7 @@
 		ip->i_di.di_size = inode->i_size;
 	ip->i_di.di_mtime = ip->i_di.di_ctime = get_seconds();
 
-	gfs2_trans_add_bh(ip->i_gl, dibh);
+	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 	gfs2_dinode_out(&ip->i_di, dibh->b_data);
 	brelse(dibh);
 
@@ -721,7 +721,7 @@
 		ip->i_di.di_mode &= (ip->i_di.di_mode & S_IXGRP) ?
 					  (~(S_ISUID | S_ISGID)) : (~S_ISUID);
 
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 		gfs2_dinode_out(&ip->i_di, dibh->b_data);
 		brelse(dibh);
 	}
@@ -752,7 +752,7 @@
 			ip->i_di.di_size = inode->i_size;
 		ip->i_di.di_mtime = ip->i_di.di_ctime = get_seconds();
 
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 		gfs2_dinode_out(&ip->i_di, dibh->b_data);
 		brelse(dibh);
 	}
@@ -1177,7 +1177,7 @@
 
 		ip->i_di.di_flags = flags;
 
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
         	gfs2_dinode_out(&ip->i_di, dibh->b_data);
 
         	brelse(dibh);
diff --git a/fs/gfs2/ops_inode.c b/fs/gfs2/ops_inode.c
index d0f90b88..89417a6 100644
--- a/fs/gfs2/ops_inode.c
+++ b/fs/gfs2/ops_inode.c
@@ -839,7 +839,7 @@
 		if (error)
 			goto out_end_trans;
 		ip->i_di.di_ctime = get_seconds();
-		gfs2_trans_add_bh(ip->i_gl, dibh);
+		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 		gfs2_dinode_out(&ip->i_di, dibh->b_data);
 		brelse(dibh);
 	}
@@ -1043,7 +1043,7 @@
 	gfs2_assert_warn(sdp, !error);
 	gfs2_inode_attr_out(ip);
 
-	gfs2_trans_add_bh(ip->i_gl, dibh);
+	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 	gfs2_dinode_out(&ip->i_di, dibh->b_data);
 	brelse(dibh);
 
diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c
index a0320f2..5fb5a53 100644
--- a/fs/gfs2/quota.c
+++ b/fs/gfs2/quota.c
@@ -527,7 +527,7 @@
 	int64_t x;
 
 	down(&sdp->sd_quota_mutex);
-	gfs2_trans_add_bh(ip->i_gl, qd->qd_bh);
+	gfs2_trans_add_bh(ip->i_gl, qd->qd_bh, 1);
 
 	if (!test_bit(QDF_CHANGE, &qd->qd_flags)) {
 		qc->qc_change = 0;
diff --git a/fs/gfs2/resize.c b/fs/gfs2/resize.c
index 67d26b9..a530966 100644
--- a/fs/gfs2/resize.c
+++ b/fs/gfs2/resize.c
@@ -255,7 +255,7 @@
 	if (error)
 		goto out_trans;
 	ip->i_di.di_flags |= GFS2_DIF_SYSTEM;
-	gfs2_trans_add_bh(ip->i_gl, dibh);
+	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 	gfs2_dinode_out(&ip->i_di, dibh->b_data);
 	brelse(dibh);
 
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
index 8df6fba..87c80bb 100644
--- a/fs/gfs2/rgrp.c
+++ b/fs/gfs2/rgrp.c
@@ -967,7 +967,7 @@
 	if (gfs2_assert_withdraw(rgd->rd_sbd, x <= length))
 		blk = 0;
 
-	gfs2_trans_add_bh(rgd->rd_gl, bi->bi_bh);
+	gfs2_trans_add_bh(rgd->rd_gl, bi->bi_bh, 1);
 	gfs2_setbit(rgd,
 		    bi->bi_bh->b_data + bi->bi_offset,
 		    bi->bi_len, blk, new_state);
@@ -1027,7 +1027,7 @@
 			       bi->bi_bh->b_data + bi->bi_offset,
 			       bi->bi_len);
 		}
-		gfs2_trans_add_bh(rgd->rd_gl, bi->bi_bh);
+		gfs2_trans_add_bh(rgd->rd_gl, bi->bi_bh, 1);
 		gfs2_setbit(rgd,
 			    bi->bi_bh->b_data + bi->bi_offset,
 			    bi->bi_len, buf_blk, new_state);
@@ -1066,7 +1066,7 @@
 	gfs2_assert_withdraw(sdp, rgd->rd_rg.rg_free);
 	rgd->rd_rg.rg_free--;
 
-	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh);
+	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
 	gfs2_rgrp_out(&rgd->rd_rg, rgd->rd_bits[0].bi_bh->b_data);
 
 	al->al_alloced++;
@@ -1111,7 +1111,7 @@
 	gfs2_assert_withdraw(sdp, rgd->rd_rg.rg_free);
 	rgd->rd_rg.rg_free--;
 
-	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh);
+	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
 	gfs2_rgrp_out(&rgd->rd_rg, rgd->rd_bits[0].bi_bh->b_data);
 
 	al->al_alloced++;
@@ -1153,7 +1153,7 @@
 	rgd->rd_rg.rg_free--;
 	rgd->rd_rg.rg_dinodes++;
 
-	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh);
+	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
 	gfs2_rgrp_out(&rgd->rd_rg, rgd->rd_bits[0].bi_bh->b_data);
 
 	al->al_alloced++;
@@ -1187,7 +1187,7 @@
 
 	rgd->rd_rg.rg_free += blen;
 
-	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh);
+	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
 	gfs2_rgrp_out(&rgd->rd_rg, rgd->rd_bits[0].bi_bh->b_data);
 
 	gfs2_trans_add_rg(rgd);
@@ -1216,7 +1216,7 @@
 
 	rgd->rd_rg.rg_free += blen;
 
-	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh);
+	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
 	gfs2_rgrp_out(&rgd->rd_rg, rgd->rd_bits[0].bi_bh->b_data);
 
 	gfs2_trans_add_rg(rgd);
@@ -1242,7 +1242,7 @@
 	rgd->rd_rg.rg_dinodes--;
 	rgd->rd_rg.rg_free++;
 
-	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh);
+	gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
 	gfs2_rgrp_out(&rgd->rd_rg, rgd->rd_bits[0].bi_bh->b_data);
 
 	gfs2_statfs_change(sdp, 0, +1, -1);
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
index d37f203..cab7ab5 100644
--- a/fs/gfs2/super.c
+++ b/fs/gfs2/super.c
@@ -608,7 +608,7 @@
 		return;
 
 	down(&sdp->sd_statfs_mutex);
-	gfs2_trans_add_bh(l_ip->i_gl, l_bh);
+	gfs2_trans_add_bh(l_ip->i_gl, l_bh, 1);
 	up(&sdp->sd_statfs_mutex);
 
 	spin_lock(&sdp->sd_statfs_spin);
@@ -659,7 +659,7 @@
 		goto out_bh2;
 
 	down(&sdp->sd_statfs_mutex);
-	gfs2_trans_add_bh(l_ip->i_gl, l_bh);
+	gfs2_trans_add_bh(l_ip->i_gl, l_bh, 1);
 	up(&sdp->sd_statfs_mutex);
 
 	spin_lock(&sdp->sd_statfs_spin);
@@ -671,7 +671,7 @@
 	       0, sizeof(struct gfs2_statfs_change));
 	spin_unlock(&sdp->sd_statfs_spin);
 
-	gfs2_trans_add_bh(m_ip->i_gl, m_bh);
+	gfs2_trans_add_bh(m_ip->i_gl, m_bh, 1);
 	gfs2_statfs_change_out(m_sc, m_bh->b_data + sizeof(struct gfs2_dinode));
 
 	gfs2_trans_end(sdp);
diff --git a/fs/gfs2/trans.c b/fs/gfs2/trans.c
index afa5408..82952fb 100644
--- a/fs/gfs2/trans.c
+++ b/fs/gfs2/trans.c
@@ -138,10 +138,11 @@
  * gfs2_trans_add_bh - Add a to-be-modified buffer to the current transaction
  * @gl: the glock the buffer belongs to
  * @bh: The buffer to add
+ * @meta: True in the case of adding metadata
  *
  */
 
-void gfs2_trans_add_bh(struct gfs2_glock *gl, struct buffer_head *bh)
+void gfs2_trans_add_bh(struct gfs2_glock *gl, struct buffer_head *bh, int meta)
 {
 	struct gfs2_sbd *sdp = gl->gl_sbd;
 	struct gfs2_bufdata *bd;
diff --git a/fs/gfs2/trans.h b/fs/gfs2/trans.h
index ac615e9..5a7da1e 100644
--- a/fs/gfs2/trans.h
+++ b/fs/gfs2/trans.h
@@ -31,7 +31,7 @@
 void gfs2_trans_end(struct gfs2_sbd *sdp);
 
 void gfs2_trans_add_gl(struct gfs2_glock *gl);
-void gfs2_trans_add_bh(struct gfs2_glock *gl, struct buffer_head *bh);
+void gfs2_trans_add_bh(struct gfs2_glock *gl, struct buffer_head *bh, int meta);
 void gfs2_trans_add_revoke(struct gfs2_sbd *sdp, uint64_t blkno);
 void gfs2_trans_add_unrevoke(struct gfs2_sbd *sdp, uint64_t blkno);
 void gfs2_trans_add_rg(struct gfs2_rgrpd *rgd);
diff --git a/fs/gfs2/unlinked.c b/fs/gfs2/unlinked.c
index 4a993af..b8d836e 100644
--- a/fs/gfs2/unlinked.c
+++ b/fs/gfs2/unlinked.c
@@ -47,7 +47,7 @@
 	}
 
 	down(&sdp->sd_unlinked_mutex);
-	gfs2_trans_add_bh(ip->i_gl, bh);
+	gfs2_trans_add_bh(ip->i_gl, bh, 1);
 	gfs2_unlinked_tag_out(ut, bh->b_data +
 				  sizeof(struct gfs2_meta_header) +
 				  offset * sizeof(struct gfs2_unlinked_tag));
