btrfs: move fs_info::fs_frozen to the flags
authorDavid Sterba <dsterba@suse.com>
Thu, 15 Jun 2017 17:10:03 +0000 (19:10 +0200)
committerDavid Sterba <dsterba@suse.com>
Tue, 20 Jun 2017 12:22:42 +0000 (14:22 +0200)
We can keep the state among the other fs_info flags, there's no reason
why fs_frozen would need to be separate.

Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ctree.h
fs/btrfs/disk-io.c
fs/btrfs/super.c
fs/btrfs/transaction.c

index f0f5f28784b664d0eda75c68140105a5a4a1d76f..6375e57a5a69214541fda6a3b8056b95db31a10b 100644 (file)
@@ -716,6 +716,8 @@ struct btrfs_delayed_root;
 #define BTRFS_FS_LOG1_ERR                      12
 #define BTRFS_FS_LOG2_ERR                      13
 #define BTRFS_FS_QUOTA_OVERRIDE                        14
+/* Used to record internally whether fs has been frozen */
+#define BTRFS_FS_FROZEN                                15
 
 /*
  * Indicate that a whole-filesystem exclusive operation is running
@@ -1107,9 +1109,6 @@ struct btrfs_fs_info {
         */
        struct list_head pinned_chunks;
 
-       /* Used to record internally whether fs has been frozen */
-       int fs_frozen;
-
        /* Cached block sizes */
        u32 nodesize;
        u32 sectorsize;
index 2b00ebff13f83670138a833b2f9485a4f8b5a786..2ac0a35f44501f3cee32c70463716a6abb4cdd6f 100644 (file)
@@ -2661,7 +2661,6 @@ int open_ctree(struct super_block *sb,
        atomic_set(&fs_info->qgroup_op_seq, 0);
        atomic_set(&fs_info->reada_works_cnt, 0);
        atomic64_set(&fs_info->tree_mod_seq, 0);
-       fs_info->fs_frozen = 0;
        fs_info->sb = sb;
        fs_info->max_inline = BTRFS_DEFAULT_MAX_INLINE;
        fs_info->metadata_ratio = 0;
index 53d43cd3cace4d781e5a7763e77d39d31cac97ef..2100be6ae68ea95b64af3c2f9404b3f34464547a 100644 (file)
@@ -2242,7 +2242,7 @@ static int btrfs_freeze(struct super_block *sb)
        struct btrfs_fs_info *fs_info = btrfs_sb(sb);
        struct btrfs_root *root = fs_info->tree_root;
 
-       fs_info->fs_frozen = 1;
+       set_bit(BTRFS_FS_FROZEN, &fs_info->flags);
        /*
         * We don't need a barrier here, we'll wait for any transaction that
         * could be in progress on other threads (and do delayed iputs that
@@ -2261,7 +2261,9 @@ static int btrfs_freeze(struct super_block *sb)
 
 static int btrfs_unfreeze(struct super_block *sb)
 {
-       btrfs_sb(sb)->fs_frozen = 0;
+       struct btrfs_fs_info *fs_info = btrfs_sb(sb);
+
+       clear_bit(BTRFS_FS_FROZEN, &fs_info->flags);
        return 0;
 }
 
index ab030fb225304f12ea010b078365758a1e105c0b..97e33513b19586a2c332b9d13eaa6e13150c736c 100644 (file)
@@ -2314,7 +2314,8 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans)
         * it'll result in deadlock about SB_FREEZE_FS.
         */
        if (current != fs_info->transaction_kthread &&
-           current != fs_info->cleaner_kthread && !fs_info->fs_frozen)
+           current != fs_info->cleaner_kthread &&
+           !test_bit(BTRFS_FS_FROZEN, &fs_info->flags))
                btrfs_run_delayed_iputs(fs_info);
 
        return ret;