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.
-- Wendy
Move inode deletion code out of blocking_cb handle_callback route to
avoid racy conditions that ends up blocking lock_dlm1 thread.
glock.c | 6 +-----
1 files changed, 1 insertion(+), 5 deletions(-)
--- linux-e45/fs/gfs2/glock.c 2007-09-08 22:05:58.000000000 -0400
+++ a007/fs/gfs2/glock.c 2007-09-12 08:58:16.000000000 -0400
@@ -715,12 +715,8 @@ static void handle_callback(struct gfs2_
gl->gl_demote_time = jiffies;
if (remote && gl->gl_ops->go_type == LM_TYPE_IOPEN &&
gl->gl_object) {
- struct inode *inode = igrab(gl->gl_object);
+ gfs2_glock_schedule_for_reclaim(gl);
spin_unlock(&gl->gl_spin);
- if (inode) {
- d_prune_aliases(inode);
- iput(inode);
- }
return;
}
} else if (gl->gl_demote_state != LM_ST_UNLOCKED &&