From cc7e79b168a552152299bd8a8254dc099aacc993 Mon Sep 17 00:00:00 2001 From: Wendy Cheng Date: Fri, 5 Oct 2007 00:27:58 -0400 Subject: [GFS2] Handle multiple glock demote requests Fix a race condition where multiple glock demote requests are sent to a node back-to-back. This patch does a check inside handle_callback() to see whether a demote request is in progress. If true, it sets a flag to make sure run_queue() will loop again to handle the new request, instead of erronously setting gl_demote_state to a different state. Signed-off-by: S. Wendy Cheng Signed-off-by: Steven Whitehouse --- fs/gfs2/incore.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'fs/gfs2/incore.h') diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h index eaddfb5a8e6..662182bfbff 100644 --- a/fs/gfs2/incore.h +++ b/fs/gfs2/incore.h @@ -171,6 +171,7 @@ enum { GLF_DEMOTE = 3, GLF_PENDING_DEMOTE = 4, GLF_DIRTY = 5, + GLF_DEMOTE_IN_PROGRESS = 6, }; struct gfs2_glock { @@ -190,6 +191,7 @@ struct gfs2_glock { struct list_head gl_holders; struct list_head gl_waiters1; /* HIF_MUTEX */ struct list_head gl_waiters3; /* HIF_PROMOTE */ + int gl_waiters2; /* GIF_DEMOTE */ const struct gfs2_glock_operations *gl_ops; -- cgit v1.2.2