Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / fs / btrfs / space-info.c
1 // SPDX-License-Identifier: GPL-2.0
2
3 #include "ctree.h"
4 #include "space-info.h"
5 #include "sysfs.h"
6 #include "volumes.h"
7 #include "free-space-cache.h"
8 #include "ordered-data.h"
9 #include "transaction.h"
10 #include "math.h"
11
12 u64 btrfs_space_info_used(struct btrfs_space_info *s_info,
13                           bool may_use_included)
14 {
15         ASSERT(s_info);
16         return s_info->bytes_used + s_info->bytes_reserved +
17                 s_info->bytes_pinned + s_info->bytes_readonly +
18                 (may_use_included ? s_info->bytes_may_use : 0);
19 }
20
21 /*
22  * after adding space to the filesystem, we need to clear the full flags
23  * on all the space infos.
24  */
25 void btrfs_clear_space_info_full(struct btrfs_fs_info *info)
26 {
27         struct list_head *head = &info->space_info;
28         struct btrfs_space_info *found;
29
30         rcu_read_lock();
31         list_for_each_entry_rcu(found, head, list)
32                 found->full = 0;
33         rcu_read_unlock();
34 }
35
36 static const char *alloc_name(u64 flags)
37 {
38         switch (flags) {
39         case BTRFS_BLOCK_GROUP_METADATA|BTRFS_BLOCK_GROUP_DATA:
40                 return "mixed";
41         case BTRFS_BLOCK_GROUP_METADATA:
42                 return "metadata";
43         case BTRFS_BLOCK_GROUP_DATA:
44                 return "data";
45         case BTRFS_BLOCK_GROUP_SYSTEM:
46                 return "system";
47         default:
48                 WARN_ON(1);
49                 return "invalid-combination";
50         };
51 }
52
53 static int create_space_info(struct btrfs_fs_info *info, u64 flags)
54 {
55
56         struct btrfs_space_info *space_info;
57         int i;
58         int ret;
59
60         space_info = kzalloc(sizeof(*space_info), GFP_NOFS);
61         if (!space_info)
62                 return -ENOMEM;
63
64         ret = percpu_counter_init(&space_info->total_bytes_pinned, 0,
65                                  GFP_KERNEL);
66         if (ret) {
67                 kfree(space_info);
68                 return ret;
69         }
70
71         for (i = 0; i < BTRFS_NR_RAID_TYPES; i++)
72                 INIT_LIST_HEAD(&space_info->block_groups[i]);
73         init_rwsem(&space_info->groups_sem);
74         spin_lock_init(&space_info->lock);
75         space_info->flags = flags & BTRFS_BLOCK_GROUP_TYPE_MASK;
76         space_info->force_alloc = CHUNK_ALLOC_NO_FORCE;
77         init_waitqueue_head(&space_info->wait);
78         INIT_LIST_HEAD(&space_info->ro_bgs);
79         INIT_LIST_HEAD(&space_info->tickets);
80         INIT_LIST_HEAD(&space_info->priority_tickets);
81
82         ret = kobject_init_and_add(&space_info->kobj, &space_info_ktype,
83                                     info->space_info_kobj, "%s",
84                                     alloc_name(space_info->flags));
85         if (ret) {
86                 kobject_put(&space_info->kobj);
87                 return ret;
88         }
89
90         list_add_rcu(&space_info->list, &info->space_info);
91         if (flags & BTRFS_BLOCK_GROUP_DATA)
92                 info->data_sinfo = space_info;
93
94         return ret;
95 }
96
97 int btrfs_init_space_info(struct btrfs_fs_info *fs_info)
98 {
99         struct btrfs_super_block *disk_super;
100         u64 features;
101         u64 flags;
102         int mixed = 0;
103         int ret;
104
105         disk_super = fs_info->super_copy;
106         if (!btrfs_super_root(disk_super))
107                 return -EINVAL;
108
109         features = btrfs_super_incompat_flags(disk_super);
110         if (features & BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS)
111                 mixed = 1;
112
113         flags = BTRFS_BLOCK_GROUP_SYSTEM;
114         ret = create_space_info(fs_info, flags);
115         if (ret)
116                 goto out;
117
118         if (mixed) {
119                 flags = BTRFS_BLOCK_GROUP_METADATA | BTRFS_BLOCK_GROUP_DATA;
120                 ret = create_space_info(fs_info, flags);
121         } else {
122                 flags = BTRFS_BLOCK_GROUP_METADATA;
123                 ret = create_space_info(fs_info, flags);
124                 if (ret)
125                         goto out;
126
127                 flags = BTRFS_BLOCK_GROUP_DATA;
128                 ret = create_space_info(fs_info, flags);
129         }
130 out:
131         return ret;
132 }
133
134 void btrfs_update_space_info(struct btrfs_fs_info *info, u64 flags,
135                              u64 total_bytes, u64 bytes_used,
136                              u64 bytes_readonly,
137                              struct btrfs_space_info **space_info)
138 {
139         struct btrfs_space_info *found;
140         int factor;
141
142         factor = btrfs_bg_type_to_factor(flags);
143
144         found = btrfs_find_space_info(info, flags);
145         ASSERT(found);
146         spin_lock(&found->lock);
147         found->total_bytes += total_bytes;
148         found->disk_total += total_bytes * factor;
149         found->bytes_used += bytes_used;
150         found->disk_used += bytes_used * factor;
151         found->bytes_readonly += bytes_readonly;
152         if (total_bytes > 0)
153                 found->full = 0;
154         btrfs_space_info_add_new_bytes(info, found,
155                                        total_bytes - bytes_used -
156                                        bytes_readonly);
157         spin_unlock(&found->lock);
158         *space_info = found;
159 }
160
161 struct btrfs_space_info *btrfs_find_space_info(struct btrfs_fs_info *info,
162                                                u64 flags)
163 {
164         struct list_head *head = &info->space_info;
165         struct btrfs_space_info *found;
166
167         flags &= BTRFS_BLOCK_GROUP_TYPE_MASK;
168
169         rcu_read_lock();
170         list_for_each_entry_rcu(found, head, list) {
171                 if (found->flags & flags) {
172                         rcu_read_unlock();
173                         return found;
174                 }
175         }
176         rcu_read_unlock();
177         return NULL;
178 }
179
180 static inline u64 calc_global_rsv_need_space(struct btrfs_block_rsv *global)
181 {
182         return (global->size << 1);
183 }
184
185 static int can_overcommit(struct btrfs_fs_info *fs_info,
186                           struct btrfs_space_info *space_info, u64 bytes,
187                           enum btrfs_reserve_flush_enum flush,
188                           bool system_chunk)
189 {
190         struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv;
191         u64 profile;
192         u64 space_size;
193         u64 avail;
194         u64 used;
195         int factor;
196
197         /* Don't overcommit when in mixed mode. */
198         if (space_info->flags & BTRFS_BLOCK_GROUP_DATA)
199                 return 0;
200
201         if (system_chunk)
202                 profile = btrfs_system_alloc_profile(fs_info);
203         else
204                 profile = btrfs_metadata_alloc_profile(fs_info);
205
206         used = btrfs_space_info_used(space_info, false);
207
208         /*
209          * We only want to allow over committing if we have lots of actual space
210          * free, but if we don't have enough space to handle the global reserve
211          * space then we could end up having a real enospc problem when trying
212          * to allocate a chunk or some other such important allocation.
213          */
214         spin_lock(&global_rsv->lock);
215         space_size = calc_global_rsv_need_space(global_rsv);
216         spin_unlock(&global_rsv->lock);
217         if (used + space_size >= space_info->total_bytes)
218                 return 0;
219
220         used += space_info->bytes_may_use;
221
222         avail = atomic64_read(&fs_info->free_chunk_space);
223
224         /*
225          * If we have dup, raid1 or raid10 then only half of the free
226          * space is actually usable.  For raid56, the space info used
227          * doesn't include the parity drive, so we don't have to
228          * change the math
229          */
230         factor = btrfs_bg_type_to_factor(profile);
231         avail = div_u64(avail, factor);
232
233         /*
234          * If we aren't flushing all things, let us overcommit up to
235          * 1/2th of the space. If we can flush, don't let us overcommit
236          * too much, let it overcommit up to 1/8 of the space.
237          */
238         if (flush == BTRFS_RESERVE_FLUSH_ALL)
239                 avail >>= 3;
240         else
241                 avail >>= 1;
242
243         if (used + bytes < space_info->total_bytes + avail)
244                 return 1;
245         return 0;
246 }
247
248 /*
249  * This is for space we already have accounted in space_info->bytes_may_use, so
250  * basically when we're returning space from block_rsv's.
251  */
252 void btrfs_space_info_add_old_bytes(struct btrfs_fs_info *fs_info,
253                                     struct btrfs_space_info *space_info,
254                                     u64 num_bytes)
255 {
256         struct reserve_ticket *ticket;
257         struct list_head *head;
258         u64 used;
259         enum btrfs_reserve_flush_enum flush = BTRFS_RESERVE_NO_FLUSH;
260         bool check_overcommit = false;
261
262         spin_lock(&space_info->lock);
263         head = &space_info->priority_tickets;
264
265         /*
266          * If we are over our limit then we need to check and see if we can
267          * overcommit, and if we can't then we just need to free up our space
268          * and not satisfy any requests.
269          */
270         used = btrfs_space_info_used(space_info, true);
271         if (used - num_bytes >= space_info->total_bytes)
272                 check_overcommit = true;
273 again:
274         while (!list_empty(head) && num_bytes) {
275                 ticket = list_first_entry(head, struct reserve_ticket,
276                                           list);
277                 /*
278                  * We use 0 bytes because this space is already reserved, so
279                  * adding the ticket space would be a double count.
280                  */
281                 if (check_overcommit &&
282                     !can_overcommit(fs_info, space_info, 0, flush, false))
283                         break;
284                 if (num_bytes >= ticket->bytes) {
285                         list_del_init(&ticket->list);
286                         num_bytes -= ticket->bytes;
287                         ticket->bytes = 0;
288                         space_info->tickets_id++;
289                         wake_up(&ticket->wait);
290                 } else {
291                         ticket->bytes -= num_bytes;
292                         num_bytes = 0;
293                 }
294         }
295
296         if (num_bytes && head == &space_info->priority_tickets) {
297                 head = &space_info->tickets;
298                 flush = BTRFS_RESERVE_FLUSH_ALL;
299                 goto again;
300         }
301         btrfs_space_info_update_bytes_may_use(fs_info, space_info, -num_bytes);
302         trace_btrfs_space_reservation(fs_info, "space_info",
303                                       space_info->flags, num_bytes, 0);
304         spin_unlock(&space_info->lock);
305 }
306
307 /*
308  * This is for newly allocated space that isn't accounted in
309  * space_info->bytes_may_use yet.  So if we allocate a chunk or unpin an extent
310  * we use this helper.
311  */
312 void btrfs_space_info_add_new_bytes(struct btrfs_fs_info *fs_info,
313                                     struct btrfs_space_info *space_info,
314                                     u64 num_bytes)
315 {
316         struct reserve_ticket *ticket;
317         struct list_head *head = &space_info->priority_tickets;
318
319 again:
320         while (!list_empty(head) && num_bytes) {
321                 ticket = list_first_entry(head, struct reserve_ticket,
322                                           list);
323                 if (num_bytes >= ticket->bytes) {
324                         trace_btrfs_space_reservation(fs_info, "space_info",
325                                                       space_info->flags,
326                                                       ticket->bytes, 1);
327                         list_del_init(&ticket->list);
328                         num_bytes -= ticket->bytes;
329                         btrfs_space_info_update_bytes_may_use(fs_info,
330                                                               space_info,
331                                                               ticket->bytes);
332                         ticket->bytes = 0;
333                         space_info->tickets_id++;
334                         wake_up(&ticket->wait);
335                 } else {
336                         trace_btrfs_space_reservation(fs_info, "space_info",
337                                                       space_info->flags,
338                                                       num_bytes, 1);
339                         btrfs_space_info_update_bytes_may_use(fs_info,
340                                                               space_info,
341                                                               num_bytes);
342                         ticket->bytes -= num_bytes;
343                         num_bytes = 0;
344                 }
345         }
346
347         if (num_bytes && head == &space_info->priority_tickets) {
348                 head = &space_info->tickets;
349                 goto again;
350         }
351 }
352
353 #define DUMP_BLOCK_RSV(fs_info, rsv_name)                               \
354 do {                                                                    \
355         struct btrfs_block_rsv *__rsv = &(fs_info)->rsv_name;           \
356         spin_lock(&__rsv->lock);                                        \
357         btrfs_info(fs_info, #rsv_name ": size %llu reserved %llu",      \
358                    __rsv->size, __rsv->reserved);                       \
359         spin_unlock(&__rsv->lock);                                      \
360 } while (0)
361
362 void btrfs_dump_space_info(struct btrfs_fs_info *fs_info,
363                            struct btrfs_space_info *info, u64 bytes,
364                            int dump_block_groups)
365 {
366         struct btrfs_block_group_cache *cache;
367         int index = 0;
368
369         spin_lock(&info->lock);
370         btrfs_info(fs_info, "space_info %llu has %llu free, is %sfull",
371                    info->flags,
372                    info->total_bytes - btrfs_space_info_used(info, true),
373                    info->full ? "" : "not ");
374         btrfs_info(fs_info,
375                 "space_info total=%llu, used=%llu, pinned=%llu, reserved=%llu, may_use=%llu, readonly=%llu",
376                 info->total_bytes, info->bytes_used, info->bytes_pinned,
377                 info->bytes_reserved, info->bytes_may_use,
378                 info->bytes_readonly);
379         spin_unlock(&info->lock);
380
381         DUMP_BLOCK_RSV(fs_info, global_block_rsv);
382         DUMP_BLOCK_RSV(fs_info, trans_block_rsv);
383         DUMP_BLOCK_RSV(fs_info, chunk_block_rsv);
384         DUMP_BLOCK_RSV(fs_info, delayed_block_rsv);
385         DUMP_BLOCK_RSV(fs_info, delayed_refs_rsv);
386
387         if (!dump_block_groups)
388                 return;
389
390         down_read(&info->groups_sem);
391 again:
392         list_for_each_entry(cache, &info->block_groups[index], list) {
393                 spin_lock(&cache->lock);
394                 btrfs_info(fs_info,
395                         "block group %llu has %llu bytes, %llu used %llu pinned %llu reserved %s",
396                         cache->key.objectid, cache->key.offset,
397                         btrfs_block_group_used(&cache->item), cache->pinned,
398                         cache->reserved, cache->ro ? "[readonly]" : "");
399                 btrfs_dump_free_space(cache, bytes);
400                 spin_unlock(&cache->lock);
401         }
402         if (++index < BTRFS_NR_RAID_TYPES)
403                 goto again;
404         up_read(&info->groups_sem);
405 }
406
407 static void btrfs_writeback_inodes_sb_nr(struct btrfs_fs_info *fs_info,
408                                          unsigned long nr_pages, int nr_items)
409 {
410         struct super_block *sb = fs_info->sb;
411
412         if (down_read_trylock(&sb->s_umount)) {
413                 writeback_inodes_sb_nr(sb, nr_pages, WB_REASON_FS_FREE_SPACE);
414                 up_read(&sb->s_umount);
415         } else {
416                 /*
417                  * We needn't worry the filesystem going from r/w to r/o though
418                  * we don't acquire ->s_umount mutex, because the filesystem
419                  * should guarantee the delalloc inodes list be empty after
420                  * the filesystem is readonly(all dirty pages are written to
421                  * the disk).
422                  */
423                 btrfs_start_delalloc_roots(fs_info, nr_items);
424                 if (!current->journal_info)
425                         btrfs_wait_ordered_roots(fs_info, nr_items, 0, (u64)-1);
426         }
427 }
428
429 static inline u64 calc_reclaim_items_nr(struct btrfs_fs_info *fs_info,
430                                         u64 to_reclaim)
431 {
432         u64 bytes;
433         u64 nr;
434
435         bytes = btrfs_calc_trans_metadata_size(fs_info, 1);
436         nr = div64_u64(to_reclaim, bytes);
437         if (!nr)
438                 nr = 1;
439         return nr;
440 }
441
442 #define EXTENT_SIZE_PER_ITEM    SZ_256K
443
444 /*
445  * shrink metadata reservation for delalloc
446  */
447 static void shrink_delalloc(struct btrfs_fs_info *fs_info, u64 to_reclaim,
448                             u64 orig, bool wait_ordered)
449 {
450         struct btrfs_space_info *space_info;
451         struct btrfs_trans_handle *trans;
452         u64 delalloc_bytes;
453         u64 dio_bytes;
454         u64 async_pages;
455         u64 items;
456         long time_left;
457         unsigned long nr_pages;
458         int loops;
459
460         /* Calc the number of the pages we need flush for space reservation */
461         items = calc_reclaim_items_nr(fs_info, to_reclaim);
462         to_reclaim = items * EXTENT_SIZE_PER_ITEM;
463
464         trans = (struct btrfs_trans_handle *)current->journal_info;
465         space_info = btrfs_find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);
466
467         delalloc_bytes = percpu_counter_sum_positive(
468                                                 &fs_info->delalloc_bytes);
469         dio_bytes = percpu_counter_sum_positive(&fs_info->dio_bytes);
470         if (delalloc_bytes == 0 && dio_bytes == 0) {
471                 if (trans)
472                         return;
473                 if (wait_ordered)
474                         btrfs_wait_ordered_roots(fs_info, items, 0, (u64)-1);
475                 return;
476         }
477
478         /*
479          * If we are doing more ordered than delalloc we need to just wait on
480          * ordered extents, otherwise we'll waste time trying to flush delalloc
481          * that likely won't give us the space back we need.
482          */
483         if (dio_bytes > delalloc_bytes)
484                 wait_ordered = true;
485
486         loops = 0;
487         while ((delalloc_bytes || dio_bytes) && loops < 3) {
488                 nr_pages = min(delalloc_bytes, to_reclaim) >> PAGE_SHIFT;
489
490                 /*
491                  * Triggers inode writeback for up to nr_pages. This will invoke
492                  * ->writepages callback and trigger delalloc filling
493                  *  (btrfs_run_delalloc_range()).
494                  */
495                 btrfs_writeback_inodes_sb_nr(fs_info, nr_pages, items);
496
497                 /*
498                  * We need to wait for the compressed pages to start before
499                  * we continue.
500                  */
501                 async_pages = atomic_read(&fs_info->async_delalloc_pages);
502                 if (!async_pages)
503                         goto skip_async;
504
505                 /*
506                  * Calculate how many compressed pages we want to be written
507                  * before we continue. I.e if there are more async pages than we
508                  * require wait_event will wait until nr_pages are written.
509                  */
510                 if (async_pages <= nr_pages)
511                         async_pages = 0;
512                 else
513                         async_pages -= nr_pages;
514
515                 wait_event(fs_info->async_submit_wait,
516                            atomic_read(&fs_info->async_delalloc_pages) <=
517                            (int)async_pages);
518 skip_async:
519                 spin_lock(&space_info->lock);
520                 if (list_empty(&space_info->tickets) &&
521                     list_empty(&space_info->priority_tickets)) {
522                         spin_unlock(&space_info->lock);
523                         break;
524                 }
525                 spin_unlock(&space_info->lock);
526
527                 loops++;
528                 if (wait_ordered && !trans) {
529                         btrfs_wait_ordered_roots(fs_info, items, 0, (u64)-1);
530                 } else {
531                         time_left = schedule_timeout_killable(1);
532                         if (time_left)
533                                 break;
534                 }
535                 delalloc_bytes = percpu_counter_sum_positive(
536                                                 &fs_info->delalloc_bytes);
537                 dio_bytes = percpu_counter_sum_positive(&fs_info->dio_bytes);
538         }
539 }
540
541 /**
542  * maybe_commit_transaction - possibly commit the transaction if its ok to
543  * @root - the root we're allocating for
544  * @bytes - the number of bytes we want to reserve
545  * @force - force the commit
546  *
547  * This will check to make sure that committing the transaction will actually
548  * get us somewhere and then commit the transaction if it does.  Otherwise it
549  * will return -ENOSPC.
550  */
551 static int may_commit_transaction(struct btrfs_fs_info *fs_info,
552                                   struct btrfs_space_info *space_info)
553 {
554         struct reserve_ticket *ticket = NULL;
555         struct btrfs_block_rsv *delayed_rsv = &fs_info->delayed_block_rsv;
556         struct btrfs_block_rsv *delayed_refs_rsv = &fs_info->delayed_refs_rsv;
557         struct btrfs_trans_handle *trans;
558         u64 bytes_needed;
559         u64 reclaim_bytes = 0;
560
561         trans = (struct btrfs_trans_handle *)current->journal_info;
562         if (trans)
563                 return -EAGAIN;
564
565         spin_lock(&space_info->lock);
566         if (!list_empty(&space_info->priority_tickets))
567                 ticket = list_first_entry(&space_info->priority_tickets,
568                                           struct reserve_ticket, list);
569         else if (!list_empty(&space_info->tickets))
570                 ticket = list_first_entry(&space_info->tickets,
571                                           struct reserve_ticket, list);
572         bytes_needed = (ticket) ? ticket->bytes : 0;
573         spin_unlock(&space_info->lock);
574
575         if (!bytes_needed)
576                 return 0;
577
578         trans = btrfs_join_transaction(fs_info->extent_root);
579         if (IS_ERR(trans))
580                 return PTR_ERR(trans);
581
582         /*
583          * See if there is enough pinned space to make this reservation, or if
584          * we have block groups that are going to be freed, allowing us to
585          * possibly do a chunk allocation the next loop through.
586          */
587         if (test_bit(BTRFS_TRANS_HAVE_FREE_BGS, &trans->transaction->flags) ||
588             __percpu_counter_compare(&space_info->total_bytes_pinned,
589                                      bytes_needed,
590                                      BTRFS_TOTAL_BYTES_PINNED_BATCH) >= 0)
591                 goto commit;
592
593         /*
594          * See if there is some space in the delayed insertion reservation for
595          * this reservation.
596          */
597         if (space_info != delayed_rsv->space_info)
598                 goto enospc;
599
600         spin_lock(&delayed_rsv->lock);
601         reclaim_bytes += delayed_rsv->reserved;
602         spin_unlock(&delayed_rsv->lock);
603
604         spin_lock(&delayed_refs_rsv->lock);
605         reclaim_bytes += delayed_refs_rsv->reserved;
606         spin_unlock(&delayed_refs_rsv->lock);
607         if (reclaim_bytes >= bytes_needed)
608                 goto commit;
609         bytes_needed -= reclaim_bytes;
610
611         if (__percpu_counter_compare(&space_info->total_bytes_pinned,
612                                    bytes_needed,
613                                    BTRFS_TOTAL_BYTES_PINNED_BATCH) < 0)
614                 goto enospc;
615
616 commit:
617         return btrfs_commit_transaction(trans);
618 enospc:
619         btrfs_end_transaction(trans);
620         return -ENOSPC;
621 }
622
623 /*
624  * Try to flush some data based on policy set by @state. This is only advisory
625  * and may fail for various reasons. The caller is supposed to examine the
626  * state of @space_info to detect the outcome.
627  */
628 static void flush_space(struct btrfs_fs_info *fs_info,
629                        struct btrfs_space_info *space_info, u64 num_bytes,
630                        int state)
631 {
632         struct btrfs_root *root = fs_info->extent_root;
633         struct btrfs_trans_handle *trans;
634         int nr;
635         int ret = 0;
636
637         switch (state) {
638         case FLUSH_DELAYED_ITEMS_NR:
639         case FLUSH_DELAYED_ITEMS:
640                 if (state == FLUSH_DELAYED_ITEMS_NR)
641                         nr = calc_reclaim_items_nr(fs_info, num_bytes) * 2;
642                 else
643                         nr = -1;
644
645                 trans = btrfs_join_transaction(root);
646                 if (IS_ERR(trans)) {
647                         ret = PTR_ERR(trans);
648                         break;
649                 }
650                 ret = btrfs_run_delayed_items_nr(trans, nr);
651                 btrfs_end_transaction(trans);
652                 break;
653         case FLUSH_DELALLOC:
654         case FLUSH_DELALLOC_WAIT:
655                 shrink_delalloc(fs_info, num_bytes * 2, num_bytes,
656                                 state == FLUSH_DELALLOC_WAIT);
657                 break;
658         case FLUSH_DELAYED_REFS_NR:
659         case FLUSH_DELAYED_REFS:
660                 trans = btrfs_join_transaction(root);
661                 if (IS_ERR(trans)) {
662                         ret = PTR_ERR(trans);
663                         break;
664                 }
665                 if (state == FLUSH_DELAYED_REFS_NR)
666                         nr = calc_reclaim_items_nr(fs_info, num_bytes);
667                 else
668                         nr = 0;
669                 btrfs_run_delayed_refs(trans, nr);
670                 btrfs_end_transaction(trans);
671                 break;
672         case ALLOC_CHUNK:
673         case ALLOC_CHUNK_FORCE:
674                 trans = btrfs_join_transaction(root);
675                 if (IS_ERR(trans)) {
676                         ret = PTR_ERR(trans);
677                         break;
678                 }
679                 ret = btrfs_chunk_alloc(trans,
680                                 btrfs_metadata_alloc_profile(fs_info),
681                                 (state == ALLOC_CHUNK) ? CHUNK_ALLOC_NO_FORCE :
682                                         CHUNK_ALLOC_FORCE);
683                 btrfs_end_transaction(trans);
684                 if (ret > 0 || ret == -ENOSPC)
685                         ret = 0;
686                 break;
687         case COMMIT_TRANS:
688                 /*
689                  * If we have pending delayed iputs then we could free up a
690                  * bunch of pinned space, so make sure we run the iputs before
691                  * we do our pinned bytes check below.
692                  */
693                 btrfs_run_delayed_iputs(fs_info);
694                 btrfs_wait_on_delayed_iputs(fs_info);
695
696                 ret = may_commit_transaction(fs_info, space_info);
697                 break;
698         default:
699                 ret = -ENOSPC;
700                 break;
701         }
702
703         trace_btrfs_flush_space(fs_info, space_info->flags, num_bytes, state,
704                                 ret);
705         return;
706 }
707
708 static inline u64
709 btrfs_calc_reclaim_metadata_size(struct btrfs_fs_info *fs_info,
710                                  struct btrfs_space_info *space_info,
711                                  bool system_chunk)
712 {
713         struct reserve_ticket *ticket;
714         u64 used;
715         u64 expected;
716         u64 to_reclaim = 0;
717
718         list_for_each_entry(ticket, &space_info->tickets, list)
719                 to_reclaim += ticket->bytes;
720         list_for_each_entry(ticket, &space_info->priority_tickets, list)
721                 to_reclaim += ticket->bytes;
722         if (to_reclaim)
723                 return to_reclaim;
724
725         to_reclaim = min_t(u64, num_online_cpus() * SZ_1M, SZ_16M);
726         if (can_overcommit(fs_info, space_info, to_reclaim,
727                            BTRFS_RESERVE_FLUSH_ALL, system_chunk))
728                 return 0;
729
730         used = btrfs_space_info_used(space_info, true);
731
732         if (can_overcommit(fs_info, space_info, SZ_1M,
733                            BTRFS_RESERVE_FLUSH_ALL, system_chunk))
734                 expected = div_factor_fine(space_info->total_bytes, 95);
735         else
736                 expected = div_factor_fine(space_info->total_bytes, 90);
737
738         if (used > expected)
739                 to_reclaim = used - expected;
740         else
741                 to_reclaim = 0;
742         to_reclaim = min(to_reclaim, space_info->bytes_may_use +
743                                      space_info->bytes_reserved);
744         return to_reclaim;
745 }
746
747 static inline int need_do_async_reclaim(struct btrfs_fs_info *fs_info,
748                                         struct btrfs_space_info *space_info,
749                                         u64 used, bool system_chunk)
750 {
751         u64 thresh = div_factor_fine(space_info->total_bytes, 98);
752
753         /* If we're just plain full then async reclaim just slows us down. */
754         if ((space_info->bytes_used + space_info->bytes_reserved) >= thresh)
755                 return 0;
756
757         if (!btrfs_calc_reclaim_metadata_size(fs_info, space_info,
758                                               system_chunk))
759                 return 0;
760
761         return (used >= thresh && !btrfs_fs_closing(fs_info) &&
762                 !test_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state));
763 }
764
765 static bool wake_all_tickets(struct list_head *head)
766 {
767         struct reserve_ticket *ticket;
768
769         while (!list_empty(head)) {
770                 ticket = list_first_entry(head, struct reserve_ticket, list);
771                 list_del_init(&ticket->list);
772                 ticket->error = -ENOSPC;
773                 wake_up(&ticket->wait);
774                 if (ticket->bytes != ticket->orig_bytes)
775                         return true;
776         }
777         return false;
778 }
779
780 /*
781  * This is for normal flushers, we can wait all goddamned day if we want to.  We
782  * will loop and continuously try to flush as long as we are making progress.
783  * We count progress as clearing off tickets each time we have to loop.
784  */
785 static void btrfs_async_reclaim_metadata_space(struct work_struct *work)
786 {
787         struct btrfs_fs_info *fs_info;
788         struct btrfs_space_info *space_info;
789         u64 to_reclaim;
790         int flush_state;
791         int commit_cycles = 0;
792         u64 last_tickets_id;
793
794         fs_info = container_of(work, struct btrfs_fs_info, async_reclaim_work);
795         space_info = btrfs_find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);
796
797         spin_lock(&space_info->lock);
798         to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info, space_info,
799                                                       false);
800         if (!to_reclaim) {
801                 space_info->flush = 0;
802                 spin_unlock(&space_info->lock);
803                 return;
804         }
805         last_tickets_id = space_info->tickets_id;
806         spin_unlock(&space_info->lock);
807
808         flush_state = FLUSH_DELAYED_ITEMS_NR;
809         do {
810                 flush_space(fs_info, space_info, to_reclaim, flush_state);
811                 spin_lock(&space_info->lock);
812                 if (list_empty(&space_info->tickets)) {
813                         space_info->flush = 0;
814                         spin_unlock(&space_info->lock);
815                         return;
816                 }
817                 to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info,
818                                                               space_info,
819                                                               false);
820                 if (last_tickets_id == space_info->tickets_id) {
821                         flush_state++;
822                 } else {
823                         last_tickets_id = space_info->tickets_id;
824                         flush_state = FLUSH_DELAYED_ITEMS_NR;
825                         if (commit_cycles)
826                                 commit_cycles--;
827                 }
828
829                 /*
830                  * We don't want to force a chunk allocation until we've tried
831                  * pretty hard to reclaim space.  Think of the case where we
832                  * freed up a bunch of space and so have a lot of pinned space
833                  * to reclaim.  We would rather use that than possibly create a
834                  * underutilized metadata chunk.  So if this is our first run
835                  * through the flushing state machine skip ALLOC_CHUNK_FORCE and
836                  * commit the transaction.  If nothing has changed the next go
837                  * around then we can force a chunk allocation.
838                  */
839                 if (flush_state == ALLOC_CHUNK_FORCE && !commit_cycles)
840                         flush_state++;
841
842                 if (flush_state > COMMIT_TRANS) {
843                         commit_cycles++;
844                         if (commit_cycles > 2) {
845                                 if (wake_all_tickets(&space_info->tickets)) {
846                                         flush_state = FLUSH_DELAYED_ITEMS_NR;
847                                         commit_cycles--;
848                                 } else {
849                                         space_info->flush = 0;
850                                 }
851                         } else {
852                                 flush_state = FLUSH_DELAYED_ITEMS_NR;
853                         }
854                 }
855                 spin_unlock(&space_info->lock);
856         } while (flush_state <= COMMIT_TRANS);
857 }
858
859 void btrfs_init_async_reclaim_work(struct work_struct *work)
860 {
861         INIT_WORK(work, btrfs_async_reclaim_metadata_space);
862 }
863
864 static const enum btrfs_flush_state priority_flush_states[] = {
865         FLUSH_DELAYED_ITEMS_NR,
866         FLUSH_DELAYED_ITEMS,
867         ALLOC_CHUNK,
868 };
869
870 static void priority_reclaim_metadata_space(struct btrfs_fs_info *fs_info,
871                                             struct btrfs_space_info *space_info,
872                                             struct reserve_ticket *ticket)
873 {
874         u64 to_reclaim;
875         int flush_state;
876
877         spin_lock(&space_info->lock);
878         to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info, space_info,
879                                                       false);
880         if (!to_reclaim) {
881                 spin_unlock(&space_info->lock);
882                 return;
883         }
884         spin_unlock(&space_info->lock);
885
886         flush_state = 0;
887         do {
888                 flush_space(fs_info, space_info, to_reclaim,
889                             priority_flush_states[flush_state]);
890                 flush_state++;
891                 spin_lock(&space_info->lock);
892                 if (ticket->bytes == 0) {
893                         spin_unlock(&space_info->lock);
894                         return;
895                 }
896                 spin_unlock(&space_info->lock);
897         } while (flush_state < ARRAY_SIZE(priority_flush_states));
898 }
899
900 static int wait_reserve_ticket(struct btrfs_fs_info *fs_info,
901                                struct btrfs_space_info *space_info,
902                                struct reserve_ticket *ticket)
903
904 {
905         DEFINE_WAIT(wait);
906         u64 reclaim_bytes = 0;
907         int ret = 0;
908
909         spin_lock(&space_info->lock);
910         while (ticket->bytes > 0 && ticket->error == 0) {
911                 ret = prepare_to_wait_event(&ticket->wait, &wait, TASK_KILLABLE);
912                 if (ret) {
913                         ret = -EINTR;
914                         break;
915                 }
916                 spin_unlock(&space_info->lock);
917
918                 schedule();
919
920                 finish_wait(&ticket->wait, &wait);
921                 spin_lock(&space_info->lock);
922         }
923         if (!ret)
924                 ret = ticket->error;
925         if (!list_empty(&ticket->list))
926                 list_del_init(&ticket->list);
927         if (ticket->bytes && ticket->bytes < ticket->orig_bytes)
928                 reclaim_bytes = ticket->orig_bytes - ticket->bytes;
929         spin_unlock(&space_info->lock);
930
931         if (reclaim_bytes)
932                 btrfs_space_info_add_old_bytes(fs_info, space_info,
933                                                reclaim_bytes);
934         return ret;
935 }
936
937 /**
938  * reserve_metadata_bytes - try to reserve bytes from the block_rsv's space
939  * @root - the root we're allocating for
940  * @space_info - the space info we want to allocate from
941  * @orig_bytes - the number of bytes we want
942  * @flush - whether or not we can flush to make our reservation
943  *
944  * This will reserve orig_bytes number of bytes from the space info associated
945  * with the block_rsv.  If there is not enough space it will make an attempt to
946  * flush out space to make room.  It will do this by flushing delalloc if
947  * possible or committing the transaction.  If flush is 0 then no attempts to
948  * regain reservations will be made and this will fail if there is not enough
949  * space already.
950  */
951 static int __reserve_metadata_bytes(struct btrfs_fs_info *fs_info,
952                                     struct btrfs_space_info *space_info,
953                                     u64 orig_bytes,
954                                     enum btrfs_reserve_flush_enum flush,
955                                     bool system_chunk)
956 {
957         struct reserve_ticket ticket;
958         u64 used;
959         u64 reclaim_bytes = 0;
960         int ret = 0;
961
962         ASSERT(orig_bytes);
963         ASSERT(!current->journal_info || flush != BTRFS_RESERVE_FLUSH_ALL);
964
965         spin_lock(&space_info->lock);
966         ret = -ENOSPC;
967         used = btrfs_space_info_used(space_info, true);
968
969         /*
970          * Carry on if we have enough space (short-circuit) OR call
971          * can_overcommit() to ensure we can overcommit to continue.
972          */
973         if ((used + orig_bytes <= space_info->total_bytes) ||
974             can_overcommit(fs_info, space_info, orig_bytes, flush,
975                            system_chunk)) {
976                 btrfs_space_info_update_bytes_may_use(fs_info, space_info,
977                                                       orig_bytes);
978                 trace_btrfs_space_reservation(fs_info, "space_info",
979                                               space_info->flags, orig_bytes, 1);
980                 ret = 0;
981         }
982
983         /*
984          * If we couldn't make a reservation then setup our reservation ticket
985          * and kick the async worker if it's not already running.
986          *
987          * If we are a priority flusher then we just need to add our ticket to
988          * the list and we will do our own flushing further down.
989          */
990         if (ret && flush != BTRFS_RESERVE_NO_FLUSH) {
991                 ticket.orig_bytes = orig_bytes;
992                 ticket.bytes = orig_bytes;
993                 ticket.error = 0;
994                 init_waitqueue_head(&ticket.wait);
995                 if (flush == BTRFS_RESERVE_FLUSH_ALL) {
996                         list_add_tail(&ticket.list, &space_info->tickets);
997                         if (!space_info->flush) {
998                                 space_info->flush = 1;
999                                 trace_btrfs_trigger_flush(fs_info,
1000                                                           space_info->flags,
1001                                                           orig_bytes, flush,
1002                                                           "enospc");
1003                                 queue_work(system_unbound_wq,
1004                                            &fs_info->async_reclaim_work);
1005                         }
1006                 } else {
1007                         list_add_tail(&ticket.list,
1008                                       &space_info->priority_tickets);
1009                 }
1010         } else if (!ret && space_info->flags & BTRFS_BLOCK_GROUP_METADATA) {
1011                 used += orig_bytes;
1012                 /*
1013                  * We will do the space reservation dance during log replay,
1014                  * which means we won't have fs_info->fs_root set, so don't do
1015                  * the async reclaim as we will panic.
1016                  */
1017                 if (!test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags) &&
1018                     need_do_async_reclaim(fs_info, space_info,
1019                                           used, system_chunk) &&
1020                     !work_busy(&fs_info->async_reclaim_work)) {
1021                         trace_btrfs_trigger_flush(fs_info, space_info->flags,
1022                                                   orig_bytes, flush, "preempt");
1023                         queue_work(system_unbound_wq,
1024                                    &fs_info->async_reclaim_work);
1025                 }
1026         }
1027         spin_unlock(&space_info->lock);
1028         if (!ret || flush == BTRFS_RESERVE_NO_FLUSH)
1029                 return ret;
1030
1031         if (flush == BTRFS_RESERVE_FLUSH_ALL)
1032                 return wait_reserve_ticket(fs_info, space_info, &ticket);
1033
1034         ret = 0;
1035         priority_reclaim_metadata_space(fs_info, space_info, &ticket);
1036         spin_lock(&space_info->lock);
1037         if (ticket.bytes) {
1038                 if (ticket.bytes < orig_bytes)
1039                         reclaim_bytes = orig_bytes - ticket.bytes;
1040                 list_del_init(&ticket.list);
1041                 ret = -ENOSPC;
1042         }
1043         spin_unlock(&space_info->lock);
1044
1045         if (reclaim_bytes)
1046                 btrfs_space_info_add_old_bytes(fs_info, space_info,
1047                                                reclaim_bytes);
1048         ASSERT(list_empty(&ticket.list));
1049         return ret;
1050 }
1051
1052 /**
1053  * reserve_metadata_bytes - try to reserve bytes from the block_rsv's space
1054  * @root - the root we're allocating for
1055  * @block_rsv - the block_rsv we're allocating for
1056  * @orig_bytes - the number of bytes we want
1057  * @flush - whether or not we can flush to make our reservation
1058  *
1059  * This will reserve orig_bytes number of bytes from the space info associated
1060  * with the block_rsv.  If there is not enough space it will make an attempt to
1061  * flush out space to make room.  It will do this by flushing delalloc if
1062  * possible or committing the transaction.  If flush is 0 then no attempts to
1063  * regain reservations will be made and this will fail if there is not enough
1064  * space already.
1065  */
1066 int btrfs_reserve_metadata_bytes(struct btrfs_root *root,
1067                                  struct btrfs_block_rsv *block_rsv,
1068                                  u64 orig_bytes,
1069                                  enum btrfs_reserve_flush_enum flush)
1070 {
1071         struct btrfs_fs_info *fs_info = root->fs_info;
1072         struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv;
1073         int ret;
1074         bool system_chunk = (root == fs_info->chunk_root);
1075
1076         ret = __reserve_metadata_bytes(fs_info, block_rsv->space_info,
1077                                        orig_bytes, flush, system_chunk);
1078         if (ret == -ENOSPC &&
1079             unlikely(root->orphan_cleanup_state == ORPHAN_CLEANUP_STARTED)) {
1080                 if (block_rsv != global_rsv &&
1081                     !btrfs_block_rsv_use_bytes(global_rsv, orig_bytes))
1082                         ret = 0;
1083         }
1084         if (ret == -ENOSPC) {
1085                 trace_btrfs_space_reservation(fs_info, "space_info:enospc",
1086                                               block_rsv->space_info->flags,
1087                                               orig_bytes, 1);
1088
1089                 if (btrfs_test_opt(fs_info, ENOSPC_DEBUG))
1090                         btrfs_dump_space_info(fs_info, block_rsv->space_info,
1091                                               orig_bytes, 0);
1092         }
1093         return ret;
1094 }