@@ -759,9 +759,10 @@ static int gfs2_freeze_super(struct super_block *sb, enum freeze_holder who)
759759
760760 if (!mutex_trylock (& sdp -> sd_freeze_mutex ))
761761 return - EBUSY ;
762- error = - EBUSY ;
763- if (test_bit (SDF_FROZEN , & sdp -> sd_flags ))
764- goto out ;
762+ if (test_bit (SDF_FROZEN , & sdp -> sd_flags )) {
763+ mutex_unlock (& sdp -> sd_freeze_mutex );
764+ return - EBUSY ;
765+ }
765766
766767 for (;;) {
767768 error = gfs2_freeze_locally (sdp );
@@ -772,8 +773,11 @@ static int gfs2_freeze_super(struct super_block *sb, enum freeze_holder who)
772773 }
773774
774775 error = gfs2_lock_fs_check_clean (sdp );
775- if (!error )
776- break ; /* success */
776+ if (!error ) {
777+ set_bit (SDF_FREEZE_INITIATOR , & sdp -> sd_flags );
778+ set_bit (SDF_FROZEN , & sdp -> sd_flags );
779+ break ;
780+ }
777781
778782 error = gfs2_do_thaw (sdp );
779783 if (error )
@@ -793,10 +797,6 @@ static int gfs2_freeze_super(struct super_block *sb, enum freeze_holder who)
793797 }
794798
795799out :
796- if (!error ) {
797- set_bit (SDF_FREEZE_INITIATOR , & sdp -> sd_flags );
798- set_bit (SDF_FROZEN , & sdp -> sd_flags );
799- }
800800 mutex_unlock (& sdp -> sd_freeze_mutex );
801801 return error ;
802802}
@@ -814,9 +814,10 @@ static int gfs2_thaw_super(struct super_block *sb, enum freeze_holder who)
814814
815815 if (!mutex_trylock (& sdp -> sd_freeze_mutex ))
816816 return - EBUSY ;
817- error = - EINVAL ;
818- if (!test_bit (SDF_FREEZE_INITIATOR , & sdp -> sd_flags ))
819- goto out ;
817+ if (!test_bit (SDF_FREEZE_INITIATOR , & sdp -> sd_flags )) {
818+ mutex_unlock (& sdp -> sd_freeze_mutex );
819+ return - EINVAL ;
820+ }
820821
821822 gfs2_freeze_unlock (& sdp -> sd_freeze_gh );
822823
@@ -826,7 +827,6 @@ static int gfs2_thaw_super(struct super_block *sb, enum freeze_holder who)
826827 clear_bit (SDF_FREEZE_INITIATOR , & sdp -> sd_flags );
827828 clear_bit (SDF_FROZEN , & sdp -> sd_flags );
828829 }
829- out :
830830 mutex_unlock (& sdp -> sd_freeze_mutex );
831831 return error ;
832832}
0 commit comments