This function checks if a glock holder's locking state is compatible with another locking state.
Signed-off-by: Andreas Gruenbacher <agrue...@redhat.com> --- fs/gfs2/glock.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/fs/gfs2/glock.h b/fs/gfs2/glock.h index 31a8f2f649b5..f0ef6fd24ba4 100644 --- a/fs/gfs2/glock.h +++ b/fs/gfs2/glock.h @@ -49,6 +49,20 @@ enum { #define LM_ST_DEFERRED 2 #define LM_ST_SHARED 3 +static inline bool gfs2_holder_is_compatible(struct gfs2_holder *gh, int state) { + BUG_ON(state == LM_ST_UNLOCKED); + switch(gh->gh_state) { + case LM_ST_EXCLUSIVE: + return state != LM_ST_DEFERRED; + case LM_ST_DEFERRED: + return state == LM_ST_DEFERRED; + case LM_ST_SHARED: + return state == LM_ST_SHARED; + default: + return false; + } +} + /* * lm_lock() flags * -- 2.26.3