diff options
author | Wendy Cheng <wcheng@redhat.com> | 2007-09-13 17:52:42 -0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2007-10-10 03:56:17 -0400 |
commit | 49e61f2ef6f7d1d0296e3e30d366b28e0ca595c2 (patch) | |
tree | 7f2efb6c0dce87f3f16809e8cd1072137b12271c /fs | |
parent | b4c20166dcfca106f0f416bfce200099ed76ab18 (diff) |
[GFS2] Move inode deletion out of blocking_cb
Move inode deletion code out of blocking_cb handle_callback route to
avoid racy conditions that end up blocking lock_dlm1 thread. Fix
bugzilla 286821.
Signed-off-by: Wendy Cheng <wcheng@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/gfs2/glock.c | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index d631cad0aeee..a37efe4aae6f 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c | |||
@@ -716,12 +716,8 @@ static void handle_callback(struct gfs2_glock *gl, unsigned int state, | |||
716 | gl->gl_demote_time = jiffies; | 716 | gl->gl_demote_time = jiffies; |
717 | if (remote && gl->gl_ops->go_type == LM_TYPE_IOPEN && | 717 | if (remote && gl->gl_ops->go_type == LM_TYPE_IOPEN && |
718 | gl->gl_object) { | 718 | gl->gl_object) { |
719 | struct inode *inode = igrab(gl->gl_object); | 719 | gfs2_glock_schedule_for_reclaim(gl); |
720 | spin_unlock(&gl->gl_spin); | 720 | spin_unlock(&gl->gl_spin); |
721 | if (inode) { | ||
722 | d_prune_aliases(inode); | ||
723 | iput(inode); | ||
724 | } | ||
725 | return; | 721 | return; |
726 | } | 722 | } |
727 | } else if (gl->gl_demote_state != LM_ST_UNLOCKED && | 723 | } else if (gl->gl_demote_state != LM_ST_UNLOCKED && |