gfs2: Fix freeze consistency check in gfs2_trans_add_meta
authorAndreas Gruenbacher <agruenba@redhat.com>
Fri, 4 Aug 2023 20:17:32 +0000 (22:17 +0200)
committerAndreas Gruenbacher <agruenba@redhat.com>
Mon, 7 Aug 2023 16:40:51 +0000 (18:40 +0200)
commit2cbd80642b76480c9b0697297af917d9388a0b46
tree1737fab26eb424f3c6fbecd5a10548dca5dd9c17
parent94c76955e86a5a4f16a1d690b66dcc268c156e6a
gfs2: Fix freeze consistency check in gfs2_trans_add_meta

Function gfs2_trans_add_meta() checks for the SDF_FROZEN flag to make
sure that no buffers are added to a transaction while the filesystem is
frozen.  With the recent freeze/thaw rework, the SDF_FROZEN flag is
cleared after thaw_super() is called, which is sufficient for
serializing freeze/thaw.

However, other filesystem operations started after thaw_super() may now
be calling gfs2_trans_add_meta() before the SDF_FROZEN flag is cleared,
which will trigger the SDF_FROZEN check in gfs2_trans_add_meta().  Fix
that by checking the s_writers.frozen state instead.

In addition, make sure not to call gfs2_assert_withdraw() with the
sd_log_lock spin lock held.  Check for a withdrawn filesystem before
checking for a frozen filesystem, and don't pin/add buffers to the
current transaction in case of a failure in either case.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
fs/gfs2/trans.c