diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2006-08-04 15:41:22 -0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2006-08-04 15:41:22 -0400 |
commit | 59a1cc6bdabf5ed148b48808ad1a418d87f5e6bf (patch) | |
tree | 6463071a09201040267702e895d63359e62c393d /fs/gfs2/log.c | |
parent | 899bb264507cfed83922bf14cd66a073494601ba (diff) |
[GFS2] Fix lock ordering bug in page fault path
Mmapped files were able to trigger a lock ordering bug. Private
maps do not need to take the glock so early on. Shared maps do
unfortunately, however we can get around that by adding a flag
into the flags for the struct gfs2_file. This only works because
we are taking an exclusive lock at this point, so we know that
nobody else can be racing with us.
Fixes Red Hat bugzilla: #201196
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/log.c')
-rw-r--r-- | fs/gfs2/log.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c index 60fdc94ccc8a..a591fb8fae20 100644 --- a/fs/gfs2/log.c +++ b/fs/gfs2/log.c | |||
@@ -256,8 +256,8 @@ static unsigned int current_tail(struct gfs2_sbd *sdp) | |||
256 | if (list_empty(&sdp->sd_ail1_list)) | 256 | if (list_empty(&sdp->sd_ail1_list)) |
257 | tail = sdp->sd_log_head; | 257 | tail = sdp->sd_log_head; |
258 | else { | 258 | else { |
259 | ai = list_entry(sdp->sd_ail1_list.prev, | 259 | ai = list_entry(sdp->sd_ail1_list.prev, struct gfs2_ail, |
260 | struct gfs2_ail, ai_list); | 260 | ai_list); |
261 | tail = ai->ai_first; | 261 | tail = ai->ai_first; |
262 | } | 262 | } |
263 | 263 | ||