summaryrefslogtreecommitdiff
path: root/fs/gfs2/log.c
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2007-09-26 09:39:31 +0100
committerSteven Whitehouse <swhiteho@redhat.com>2007-10-10 08:56:34 +0100
commit5a60c532c9224babc172fafccc9e2fec6937af6f (patch)
tree1acf07fea71d33fbce3ae0404b05a94087406984 /fs/gfs2/log.c
parent891ba6d4a5f9e6302bb6542592d73feb4d0d3687 (diff)
downloadlwn-5a60c532c9224babc172fafccc9e2fec6937af6f.tar.gz
lwn-5a60c532c9224babc172fafccc9e2fec6937af6f.zip
[GFS2] Get superblock a different way
The mapping may be NULL by the time the I/O has completed, so we now get the superblock by a different route (via the bd and glock) to avoid this problem. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com> Cc: Wendy Cheng <wcheng@redhat.com>
Diffstat (limited to 'fs/gfs2/log.c')
-rw-r--r--fs/gfs2/log.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
index ee704676b2f1..7df702473252 100644
--- a/fs/gfs2/log.c
+++ b/fs/gfs2/log.c
@@ -513,7 +513,8 @@ struct buffer_head *gfs2_log_get_buf(struct gfs2_sbd *sdp)
static void gfs2_fake_write_endio(struct buffer_head *bh, int uptodate)
{
struct buffer_head *real_bh = bh->b_private;
- struct gfs2_sbd *sdp = GFS2_SB(real_bh->b_page->mapping->host);
+ struct gfs2_bufdata *bd = real_bh->b_private;
+ struct gfs2_sbd *sdp = bd->bd_gl->gl_sbd;
end_buffer_write_sync(bh, uptodate);
free_buffer_head(bh);