[GFS2] Fix leak of gfs2_bufdata

This fixes a memory leak of struct gfs2_bufdata and also some
problems in the ordered write handling code. It needs a bit
more testing, but I believe that the reference counting of
ordered write buffers should now be correct.

This is aimed at fixing Red Hat bugzilla: #201028 and #201082

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
diff --git a/fs/gfs2/ops_address.c b/fs/gfs2/ops_address.c
index 45afd05..4c59cb1 100644
--- a/fs/gfs2/ops_address.c
+++ b/fs/gfs2/ops_address.c
@@ -581,10 +581,8 @@
 	if (bd) {
 		bd->bd_bh = NULL;
 		bh->b_private = NULL;
-		gfs2_log_unlock(sdp);
-		brelse(bh);
-	} else
-		gfs2_log_unlock(sdp);
+	}
+	gfs2_log_unlock(sdp);
 
 	lock_buffer(bh);
 	clear_buffer_dirty(bh);
@@ -598,7 +596,7 @@
 
 static void gfs2_invalidatepage(struct page *page, unsigned long offset)
 {
-	struct gfs2_sbd *sdp = page->mapping->host->i_sb->s_fs_info;
+	struct gfs2_sbd *sdp = GFS2_SB(page->mapping->host);
 	struct buffer_head *head, *bh, *next;
 	unsigned int curr_off = 0;