From: Josef Bacik <jo...@toxicpanda.com>

commit 9f246926b4d5db4c5e8c78e4897757de26c95be6 upstream

We have the space_info, we can just check its flags to see if it's the
system chunk space info.

Reviewed-by: Nikolay Borisov <nbori...@suse.com>
Reviewed-by: Qu Wenruo <w...@suse.com>
Reviewed-by: Johannes Thumshirn <jthumsh...@suse.de>
Signed-off-by: Josef Bacik <jo...@toxicpanda.com>
Reviewed-by: David Sterba <dste...@suse.com>
Signed-off-by: David Sterba <dste...@suse.com>
Signed-off-by: Anand Jain <anand.j...@oracle.com>
---
 fs/btrfs/space-info.c | 42 +++++++++++++++---------------------------
 1 file changed, 15 insertions(+), 27 deletions(-)

diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c
index 6f484f0d347e..e19e538d05f9 100644
--- a/fs/btrfs/space-info.c
+++ b/fs/btrfs/space-info.c
@@ -162,8 +162,7 @@ static inline u64 calc_global_rsv_need_space(struct 
btrfs_block_rsv *global)
 
 static int can_overcommit(struct btrfs_fs_info *fs_info,
                          struct btrfs_space_info *space_info, u64 bytes,
-                         enum btrfs_reserve_flush_enum flush,
-                         bool system_chunk)
+                         enum btrfs_reserve_flush_enum flush)
 {
        u64 profile;
        u64 avail;
@@ -174,7 +173,7 @@ static int can_overcommit(struct btrfs_fs_info *fs_info,
        if (space_info->flags & BTRFS_BLOCK_GROUP_DATA)
                return 0;
 
-       if (system_chunk)
+       if (space_info->flags & BTRFS_BLOCK_GROUP_SYSTEM)
                profile = btrfs_system_alloc_profile(fs_info);
        else
                profile = btrfs_metadata_alloc_profile(fs_info);
@@ -228,8 +227,7 @@ void btrfs_try_granting_tickets(struct btrfs_fs_info 
*fs_info,
 
                /* Check and see if our ticket can be satisified now. */
                if ((used + ticket->bytes <= space_info->total_bytes) ||
-                   can_overcommit(fs_info, space_info, ticket->bytes, flush,
-                                  false)) {
+                   can_overcommit(fs_info, space_info, ticket->bytes, flush)) {
                        btrfs_space_info_update_bytes_may_use(fs_info,
                                                              space_info,
                                                              ticket->bytes);
@@ -634,8 +632,7 @@ static void flush_space(struct btrfs_fs_info *fs_info,
 
 static inline u64
 btrfs_calc_reclaim_metadata_size(struct btrfs_fs_info *fs_info,
-                                struct btrfs_space_info *space_info,
-                                bool system_chunk)
+                                struct btrfs_space_info *space_info)
 {
        struct reserve_ticket *ticket;
        u64 used;
@@ -651,13 +648,12 @@ btrfs_calc_reclaim_metadata_size(struct btrfs_fs_info 
*fs_info,
 
        to_reclaim = min_t(u64, num_online_cpus() * SZ_1M, SZ_16M);
        if (can_overcommit(fs_info, space_info, to_reclaim,
-                          BTRFS_RESERVE_FLUSH_ALL, system_chunk))
+                          BTRFS_RESERVE_FLUSH_ALL))
                return 0;
 
        used = btrfs_space_info_used(space_info, true);
 
-       if (can_overcommit(fs_info, space_info, SZ_1M,
-                          BTRFS_RESERVE_FLUSH_ALL, system_chunk))
+       if (can_overcommit(fs_info, space_info, SZ_1M, BTRFS_RESERVE_FLUSH_ALL))
                expected = div_factor_fine(space_info->total_bytes, 95);
        else
                expected = div_factor_fine(space_info->total_bytes, 90);
@@ -673,7 +669,7 @@ btrfs_calc_reclaim_metadata_size(struct btrfs_fs_info 
*fs_info,
 
 static inline int need_do_async_reclaim(struct btrfs_fs_info *fs_info,
                                        struct btrfs_space_info *space_info,
-                                       u64 used, bool system_chunk)
+                                       u64 used)
 {
        u64 thresh = div_factor_fine(space_info->total_bytes, 98);
 
@@ -681,8 +677,7 @@ static inline int need_do_async_reclaim(struct 
btrfs_fs_info *fs_info,
        if ((space_info->bytes_used + space_info->bytes_reserved) >= thresh)
                return 0;
 
-       if (!btrfs_calc_reclaim_metadata_size(fs_info, space_info,
-                                             system_chunk))
+       if (!btrfs_calc_reclaim_metadata_size(fs_info, space_info))
                return 0;
 
        return (used >= thresh && !btrfs_fs_closing(fs_info) &&
@@ -805,8 +800,7 @@ static void btrfs_async_reclaim_metadata_space(struct 
work_struct *work)
        space_info = btrfs_find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);
 
        spin_lock(&space_info->lock);
-       to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info, space_info,
-                                                     false);
+       to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info, space_info);
        if (!to_reclaim) {
                space_info->flush = 0;
                spin_unlock(&space_info->lock);
@@ -825,8 +819,7 @@ static void btrfs_async_reclaim_metadata_space(struct 
work_struct *work)
                        return;
                }
                to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info,
-                                                             space_info,
-                                                             false);
+                                                             space_info);
                if (last_tickets_id == space_info->tickets_id) {
                        flush_state++;
                } else {
@@ -898,8 +891,7 @@ static void priority_reclaim_metadata_space(struct 
btrfs_fs_info *fs_info,
        int flush_state;
 
        spin_lock(&space_info->lock);
-       to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info, space_info,
-                                                     false);
+       to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info, space_info);
        if (!to_reclaim) {
                spin_unlock(&space_info->lock);
                return;
@@ -1031,8 +1023,7 @@ static int handle_reserve_ticket(struct btrfs_fs_info 
*fs_info,
 static int __reserve_metadata_bytes(struct btrfs_fs_info *fs_info,
                                    struct btrfs_space_info *space_info,
                                    u64 orig_bytes,
-                                   enum btrfs_reserve_flush_enum flush,
-                                   bool system_chunk)
+                                   enum btrfs_reserve_flush_enum flush)
 {
        struct reserve_ticket ticket;
        u64 used;
@@ -1054,8 +1045,7 @@ static int __reserve_metadata_bytes(struct btrfs_fs_info 
*fs_info,
         */
        if (!pending_tickets &&
            ((used + orig_bytes <= space_info->total_bytes) ||
-            can_overcommit(fs_info, space_info, orig_bytes, flush,
-                          system_chunk))) {
+            can_overcommit(fs_info, space_info, orig_bytes, flush))) {
                btrfs_space_info_update_bytes_may_use(fs_info, space_info,
                                                      orig_bytes);
                ret = 0;
@@ -1097,8 +1087,7 @@ static int __reserve_metadata_bytes(struct btrfs_fs_info 
*fs_info,
                 * the async reclaim as we will panic.
                 */
                if (!test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags) &&
-                   need_do_async_reclaim(fs_info, space_info,
-                                         used, system_chunk) &&
+                   need_do_async_reclaim(fs_info, space_info, used) &&
                    !work_busy(&fs_info->async_reclaim_work)) {
                        trace_btrfs_trigger_flush(fs_info, space_info->flags,
                                                  orig_bytes, flush, "preempt");
@@ -1135,10 +1124,9 @@ int btrfs_reserve_metadata_bytes(struct btrfs_root *root,
        struct btrfs_fs_info *fs_info = root->fs_info;
        struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv;
        int ret;
-       bool system_chunk = (root == fs_info->chunk_root);
 
        ret = __reserve_metadata_bytes(fs_info, block_rsv->space_info,
-                                      orig_bytes, flush, system_chunk);
+                                      orig_bytes, flush);
        if (ret == -ENOSPC &&
            unlikely(root->orphan_cleanup_state == ORPHAN_CLEANUP_STARTED)) {
                if (block_rsv != global_rsv &&
-- 
2.18.4

Reply via email to