aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/glock.c
diff options
context:
space:
mode:
authorWendy Cheng <wcheng@redhat.com>2007-09-13 17:52:42 -0400
committerSteven Whitehouse <swhiteho@redhat.com>2007-10-10 03:56:17 -0400
commit49e61f2ef6f7d1d0296e3e30d366b28e0ca595c2 (patch)
tree7f2efb6c0dce87f3f16809e8cd1072137b12271c /fs/gfs2/glock.c
parentb4c20166dcfca106f0f416bfce200099ed76ab18 (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/gfs2/glock.c')
-rw-r--r--fs/gfs2/glock.c6
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 &&