]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
gfs2: Minor gfs2_{freeze,thaw}_super cleanup
authorAndreas Gruenbacher <agruenba@redhat.com>
Mon, 25 Dec 2023 19:00:20 +0000 (20:00 +0100)
committerAndreas Gruenbacher <agruenba@redhat.com>
Wed, 27 Dec 2023 12:16:30 +0000 (13:16 +0100)
This minor cleanup to gfs2_freeze_super() and gfs2_thaw_super() prepares
for the following refcounting fix.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/super.c

index cf3431486fd4867ef4345a0f1920624de3a1ff6b..6b45b7866212482e4a5b7a5798215d2f3ab0c7a2 100644 (file)
@@ -759,9 +759,10 @@ static int gfs2_freeze_super(struct super_block *sb, enum freeze_holder who)
 
        if (!mutex_trylock(&sdp->sd_freeze_mutex))
                return -EBUSY;
-       error = -EBUSY;
-       if (test_bit(SDF_FROZEN, &sdp->sd_flags))
-               goto out;
+       if (test_bit(SDF_FROZEN, &sdp->sd_flags)) {
+               mutex_unlock(&sdp->sd_freeze_mutex);
+               return -EBUSY;
+       }
 
        for (;;) {
                error = gfs2_freeze_locally(sdp);
@@ -772,8 +773,11 @@ static int gfs2_freeze_super(struct super_block *sb, enum freeze_holder who)
                }
 
                error = gfs2_lock_fs_check_clean(sdp);
-               if (!error)
-                       break;  /* success */
+               if (!error) {
+                       set_bit(SDF_FREEZE_INITIATOR, &sdp->sd_flags);
+                       set_bit(SDF_FROZEN, &sdp->sd_flags);
+                       break;
+               }
 
                error = gfs2_do_thaw(sdp);
                if (error)
@@ -793,10 +797,6 @@ static int gfs2_freeze_super(struct super_block *sb, enum freeze_holder who)
        }
 
 out:
-       if (!error) {
-               set_bit(SDF_FREEZE_INITIATOR, &sdp->sd_flags);
-               set_bit(SDF_FROZEN, &sdp->sd_flags);
-       }
        mutex_unlock(&sdp->sd_freeze_mutex);
        return error;
 }
@@ -814,9 +814,10 @@ static int gfs2_thaw_super(struct super_block *sb, enum freeze_holder who)
 
        if (!mutex_trylock(&sdp->sd_freeze_mutex))
                return -EBUSY;
-       error = -EINVAL;
-       if (!test_bit(SDF_FREEZE_INITIATOR, &sdp->sd_flags))
-               goto out;
+       if (!test_bit(SDF_FREEZE_INITIATOR, &sdp->sd_flags)) {
+               mutex_unlock(&sdp->sd_freeze_mutex);
+               return -EINVAL;
+       }
 
        gfs2_freeze_unlock(&sdp->sd_freeze_gh);
 
@@ -826,7 +827,6 @@ static int gfs2_thaw_super(struct super_block *sb, enum freeze_holder who)
                clear_bit(SDF_FREEZE_INITIATOR, &sdp->sd_flags);
                clear_bit(SDF_FROZEN, &sdp->sd_flags);
        }
-out:
        mutex_unlock(&sdp->sd_freeze_mutex);
        return error;
 }