Currently, filesystem freeze is implemented inside freeze_go_sync(), a glock state transition callback. It turns out that in some scenarios, freezing the filesystem in such a callback can deadlock. To prevent that from happening, rework the freeze / thaw logic and move it out of the glock state engine.
Andreas Gruenbacher (8): gfs2: Rename remaining "transaction" glock references gfs2: Rename the {freeze,thaw}_super callbacks gfs2: Rename gfs2_freeze_lock{ => _shared } gfs2: Reconfiguring frozen filesystem already rejected gfs2: Rename SDF_{FS_FROZEN => FREEZE_INITIATOR} gfs2: Rework freeze / thaw logic gfs2: Replace sd_freeze_state with SDF_FROZEN flag gfs2: gfs2_freeze_lock_shared cleanup fs/gfs2/glock.c | 4 +- fs/gfs2/glops.c | 52 +++++------- fs/gfs2/incore.h | 10 +-- fs/gfs2/log.c | 11 +-- fs/gfs2/ops_fstype.c | 15 +--- fs/gfs2/recovery.c | 28 +++---- fs/gfs2/super.c | 186 +++++++++++++++++++++++++++++++++---------- fs/gfs2/super.h | 1 + fs/gfs2/sys.c | 4 +- fs/gfs2/trans.c | 3 +- fs/gfs2/util.c | 45 ++++------- fs/gfs2/util.h | 3 +- 12 files changed, 206 insertions(+), 156 deletions(-) -- 2.40.0