gfs2: do_xmote fixes
authorAndreas Gruenbacher <agruenba@redhat.com>
Mon, 15 Apr 2024 09:23:04 +0000 (11:23 +0200)
committerAndreas Gruenbacher <agruenba@redhat.com>
Wed, 24 Apr 2024 17:48:20 +0000 (19:48 +0200)
commit9947a06d29c0a30da88cdc6376ca5fd87083e130
tree687ac555f1706ab8e7968f93f2eb246db3c74e02
parent1cd28e15864054f3c48baee9eecda1c0441c48ac
gfs2: do_xmote fixes

Function do_xmote() is called with the glock spinlock held.  Commit
86934198eefa added a 'goto skip_inval' statement at the beginning of the
function to further below where the glock spinlock is expected not to be
held anymore.  Then it added code there that requires the glock spinlock
to be held.  This doesn't make sense; fix this up by dropping and
retaking the spinlock where needed.

In addition, when ->lm_lock() returned an error, do_xmote() didn't fail
the locking operation, and simply left the glock hanging; fix that as
well.  (This is a much older error.)

Fixes: 86934198eefa ("gfs2: Clear flags when withdraw prevents xmote")
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/glock.c