OSDN Git Service

btrfs: move btrfs_space_info_add_*_bytes to space-info.c
authorJosef Bacik <josef@toxicpanda.com>
Tue, 18 Jun 2019 20:09:22 +0000 (16:09 -0400)
committerDavid Sterba <dsterba@suse.com>
Tue, 2 Jul 2019 10:30:52 +0000 (12:30 +0200)
Now that we've moved all the pre-requisite stuff, move these two
functions.

Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent-tree.c
fs/btrfs/space-info.c
fs/btrfs/space-info.h

index c55d1bc..7b4a287 100644 (file)
@@ -4485,14 +4485,6 @@ skip_async:
        }
 }
 
-struct reserve_ticket {
-       u64 orig_bytes;
-       u64 bytes;
-       int error;
-       struct list_head list;
-       wait_queue_head_t wait;
-};
-
 /**
  * maybe_commit_transaction - possibly commit the transaction if its ok to
  * @root - the root we're allocating for
@@ -5211,109 +5203,6 @@ int btrfs_delayed_refs_rsv_refill(struct btrfs_fs_info *fs_info,
        return 0;
 }
 
-/*
- * This is for space we already have accounted in space_info->bytes_may_use, so
- * basically when we're returning space from block_rsv's.
- */
-void btrfs_space_info_add_old_bytes(struct btrfs_fs_info *fs_info,
-                                   struct btrfs_space_info *space_info,
-                                   u64 num_bytes)
-{
-       struct reserve_ticket *ticket;
-       struct list_head *head;
-       u64 used;
-       enum btrfs_reserve_flush_enum flush = BTRFS_RESERVE_NO_FLUSH;
-       bool check_overcommit = false;
-
-       spin_lock(&space_info->lock);
-       head = &space_info->priority_tickets;
-
-       /*
-        * If we are over our limit then we need to check and see if we can
-        * overcommit, and if we can't then we just need to free up our space
-        * and not satisfy any requests.
-        */
-       used = btrfs_space_info_used(space_info, true);
-       if (used - num_bytes >= space_info->total_bytes)
-               check_overcommit = true;
-again:
-       while (!list_empty(head) && num_bytes) {
-               ticket = list_first_entry(head, struct reserve_ticket,
-                                         list);
-               /*
-                * We use 0 bytes because this space is already reserved, so
-                * adding the ticket space would be a double count.
-                */
-               if (check_overcommit &&
-                   !btrfs_can_overcommit(fs_info, space_info, 0, flush, false))
-                       break;
-               if (num_bytes >= ticket->bytes) {
-                       list_del_init(&ticket->list);
-                       num_bytes -= ticket->bytes;
-                       ticket->bytes = 0;
-                       space_info->tickets_id++;
-                       wake_up(&ticket->wait);
-               } else {
-                       ticket->bytes -= num_bytes;
-                       num_bytes = 0;
-               }
-       }
-
-       if (num_bytes && head == &space_info->priority_tickets) {
-               head = &space_info->tickets;
-               flush = BTRFS_RESERVE_FLUSH_ALL;
-               goto again;
-       }
-       btrfs_space_info_update_bytes_may_use(fs_info, space_info, -num_bytes);
-       trace_btrfs_space_reservation(fs_info, "space_info",
-                                     space_info->flags, num_bytes, 0);
-       spin_unlock(&space_info->lock);
-}
-
-/*
- * This is for newly allocated space that isn't accounted in
- * space_info->bytes_may_use yet.  So if we allocate a chunk or unpin an extent
- * we use this helper.
- */
-void btrfs_space_info_add_new_bytes(struct btrfs_fs_info *fs_info,
-                                   struct btrfs_space_info *space_info,
-                                   u64 num_bytes)
-{
-       struct reserve_ticket *ticket;
-       struct list_head *head = &space_info->priority_tickets;
-
-again:
-       while (!list_empty(head) && num_bytes) {
-               ticket = list_first_entry(head, struct reserve_ticket,
-                                         list);
-               if (num_bytes >= ticket->bytes) {
-                       trace_btrfs_space_reservation(fs_info, "space_info",
-                                                     space_info->flags,
-                                                     ticket->bytes, 1);
-                       list_del_init(&ticket->list);
-                       num_bytes -= ticket->bytes;
-                       btrfs_space_info_update_bytes_may_use(fs_info,
-                                       space_info, ticket->bytes);
-                       ticket->bytes = 0;
-                       space_info->tickets_id++;
-                       wake_up(&ticket->wait);
-               } else {
-                       trace_btrfs_space_reservation(fs_info, "space_info",
-                                                     space_info->flags,
-                                                     num_bytes, 1);
-                       btrfs_space_info_update_bytes_may_use(fs_info,
-                                       space_info, num_bytes);
-                       ticket->bytes -= num_bytes;
-                       num_bytes = 0;
-               }
-       }
-
-       if (num_bytes && head == &space_info->priority_tickets) {
-               head = &space_info->tickets;
-               goto again;
-       }
-}
-
 static u64 block_rsv_release_bytes(struct btrfs_fs_info *fs_info,
                                    struct btrfs_block_rsv *block_rsv,
                                    struct btrfs_block_rsv *dest, u64 num_bytes,
index 9dc3008..50046e8 100644 (file)
@@ -240,3 +240,109 @@ int btrfs_can_overcommit(struct btrfs_fs_info *fs_info,
                return 1;
        return 0;
 }
+
+/*
+ * This is for space we already have accounted in space_info->bytes_may_use, so
+ * basically when we're returning space from block_rsv's.
+ */
+void btrfs_space_info_add_old_bytes(struct btrfs_fs_info *fs_info,
+                                   struct btrfs_space_info *space_info,
+                                   u64 num_bytes)
+{
+       struct reserve_ticket *ticket;
+       struct list_head *head;
+       u64 used;
+       enum btrfs_reserve_flush_enum flush = BTRFS_RESERVE_NO_FLUSH;
+       bool check_overcommit = false;
+
+       spin_lock(&space_info->lock);
+       head = &space_info->priority_tickets;
+
+       /*
+        * If we are over our limit then we need to check and see if we can
+        * overcommit, and if we can't then we just need to free up our space
+        * and not satisfy any requests.
+        */
+       used = btrfs_space_info_used(space_info, true);
+       if (used - num_bytes >= space_info->total_bytes)
+               check_overcommit = true;
+again:
+       while (!list_empty(head) && num_bytes) {
+               ticket = list_first_entry(head, struct reserve_ticket,
+                                         list);
+               /*
+                * We use 0 bytes because this space is already reserved, so
+                * adding the ticket space would be a double count.
+                */
+               if (check_overcommit &&
+                   !btrfs_can_overcommit(fs_info, space_info, 0, flush,
+                                         false))
+                       break;
+               if (num_bytes >= ticket->bytes) {
+                       list_del_init(&ticket->list);
+                       num_bytes -= ticket->bytes;
+                       ticket->bytes = 0;
+                       space_info->tickets_id++;
+                       wake_up(&ticket->wait);
+               } else {
+                       ticket->bytes -= num_bytes;
+                       num_bytes = 0;
+               }
+       }
+
+       if (num_bytes && head == &space_info->priority_tickets) {
+               head = &space_info->tickets;
+               flush = BTRFS_RESERVE_FLUSH_ALL;
+               goto again;
+       }
+       btrfs_space_info_update_bytes_may_use(fs_info, space_info, -num_bytes);
+       trace_btrfs_space_reservation(fs_info, "space_info",
+                                     space_info->flags, num_bytes, 0);
+       spin_unlock(&space_info->lock);
+}
+
+/*
+ * This is for newly allocated space that isn't accounted in
+ * space_info->bytes_may_use yet.  So if we allocate a chunk or unpin an extent
+ * we use this helper.
+ */
+void btrfs_space_info_add_new_bytes(struct btrfs_fs_info *fs_info,
+                                   struct btrfs_space_info *space_info,
+                                   u64 num_bytes)
+{
+       struct reserve_ticket *ticket;
+       struct list_head *head = &space_info->priority_tickets;
+
+again:
+       while (!list_empty(head) && num_bytes) {
+               ticket = list_first_entry(head, struct reserve_ticket,
+                                         list);
+               if (num_bytes >= ticket->bytes) {
+                       trace_btrfs_space_reservation(fs_info, "space_info",
+                                                     space_info->flags,
+                                                     ticket->bytes, 1);
+                       list_del_init(&ticket->list);
+                       num_bytes -= ticket->bytes;
+                       btrfs_space_info_update_bytes_may_use(fs_info,
+                                                             space_info,
+                                                             ticket->bytes);
+                       ticket->bytes = 0;
+                       space_info->tickets_id++;
+                       wake_up(&ticket->wait);
+               } else {
+                       trace_btrfs_space_reservation(fs_info, "space_info",
+                                                     space_info->flags,
+                                                     num_bytes, 1);
+                       btrfs_space_info_update_bytes_may_use(fs_info,
+                                                             space_info,
+                                                             num_bytes);
+                       ticket->bytes -= num_bytes;
+                       num_bytes = 0;
+               }
+       }
+
+       if (num_bytes && head == &space_info->priority_tickets) {
+               head = &space_info->tickets;
+               goto again;
+       }
+}
index 702e431..7df0973 100644 (file)
@@ -69,6 +69,14 @@ struct btrfs_space_info {
        struct kobject *block_group_kobjs[BTRFS_NR_RAID_TYPES];
 };
 
+struct reserve_ticket {
+       u64 orig_bytes;
+       u64 bytes;
+       int error;
+       struct list_head list;
+       wait_queue_head_t wait;
+};
+
 static inline bool btrfs_mixed_space_info(struct btrfs_space_info *space_info)
 {
        return ((space_info->flags & BTRFS_BLOCK_GROUP_METADATA) &&