Before this patch, the freeze glock was the only glock to use the go_xmote_bh glock op (glop). The go_xmote_bh glop is done when a glock is locked. But so is go_lock. This patch eliminates the glop altogether in favor of just using go_lock for the freeze glock. This is for better consistency, readability, etc. Using go_lock was previously not possible because of the bug fixed by the previous patch.
I also fixed a misleading comment in do_promote. Signed-off-by: Bob Peterson <rpete...@redhat.com> --- fs/gfs2/glock.c | 12 +----------- fs/gfs2/glops.c | 6 +++--- fs/gfs2/incore.h | 1 - 3 files changed, 4 insertions(+), 15 deletions(-) diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index d43eed1696ab..1d421998535e 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c @@ -384,7 +384,7 @@ static void do_error(struct gfs2_glock *gl, const int ret) * do_promote - promote as many requests as possible on the current queue * @gl: The glock * - * Returns: 1 if there is a blocked holder at the head of the list, or 2 + * Returns: 1 if there is a blocked waiter at the head of the list, or 2 * if a type specific operation is underway. */ @@ -504,7 +504,6 @@ static void gfs2_demote_wake(struct gfs2_glock *gl) static void finish_xmote(struct gfs2_glock *gl, unsigned int ret) { - const struct gfs2_glock_operations *glops = gl->gl_ops; struct gfs2_holder *gh; unsigned state = ret & LM_OUT_ST_MASK; int rv; @@ -562,15 +561,6 @@ static void finish_xmote(struct gfs2_glock *gl, unsigned int ret) if (test_and_clear_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags)) gfs2_demote_wake(gl); if (state != LM_ST_UNLOCKED) { - if (gh && glops->go_xmote_bh) { - spin_unlock(&gl->gl_lockref.lock); - rv = glops->go_xmote_bh(gh); - spin_lock(&gl->gl_lockref.lock); - if (rv) { - do_error(gl, rv); - goto out; - } - } rv = do_promote(gl); if (rv == 2) goto out_locked; diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c index 8ae2f33e014e..5067e89c32e6 100644 --- a/fs/gfs2/glops.c +++ b/fs/gfs2/glops.c @@ -597,10 +597,10 @@ static int freeze_go_sync(struct gfs2_glock *gl) } /** - * freeze_go_xmote_bh - After promoting/demoting the freeze glock + * freeze_go_lock - After promoting/demoting the freeze glock * @gh: the holder of the glock */ -static int freeze_go_xmote_bh(struct gfs2_holder *gh) +static int freeze_go_lock(struct gfs2_holder *gh) { struct gfs2_glock *gl = gh->gh_gl; struct gfs2_sbd *sdp = gl->gl_name.ln_sbd; @@ -768,7 +768,7 @@ const struct gfs2_glock_operations gfs2_rgrp_glops = { const struct gfs2_glock_operations gfs2_freeze_glops = { .go_sync = freeze_go_sync, - .go_xmote_bh = freeze_go_xmote_bh, + .go_lock = freeze_go_lock, .go_demote_ok = freeze_go_demote_ok, .go_type = LM_TYPE_NONDISK, .go_flags = GLOF_NONDISK, diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h index 354d6230d0f7..04ac1537fee7 100644 --- a/fs/gfs2/incore.h +++ b/fs/gfs2/incore.h @@ -217,7 +217,6 @@ struct lm_lockname { struct gfs2_glock_operations { int (*go_sync) (struct gfs2_glock *gl); - int (*go_xmote_bh)(struct gfs2_holder *gh); void (*go_inval) (struct gfs2_glock *gl, int flags); int (*go_demote_ok) (const struct gfs2_glock *gl); int (*go_lock) (struct gfs2_holder *gh); -- 2.31.1