Lines Matching refs:fs_info

197 static u64 calc_chunk_size(const struct btrfs_fs_info *fs_info, u64 flags)
199 if (btrfs_is_zoned(fs_info))
200 return fs_info->zone_size;
210 if (fs_info->fs_devices->total_rw_bytes > 50ULL * SZ_1G)
262 int btrfs_init_space_info(struct btrfs_fs_info *fs_info)
270 disk_super = fs_info->super_copy;
279 ret = create_space_info(fs_info, flags);
285 ret = create_space_info(fs_info, flags);
288 ret = create_space_info(fs_info, flags);
293 ret = create_space_info(fs_info, flags);
344 static u64 calc_available_free_space(struct btrfs_fs_info *fs_info,
353 profile = btrfs_system_alloc_profile(fs_info);
355 profile = btrfs_metadata_alloc_profile(fs_info);
357 avail = atomic64_read(&fs_info->free_chunk_space);
380 int btrfs_can_overcommit(struct btrfs_fs_info *fs_info,
392 avail = calc_available_free_space(fs_info, space_info, flush);
413 void btrfs_try_granting_tickets(struct btrfs_fs_info *fs_info,
431 btrfs_can_overcommit(fs_info, space_info, ticket->bytes,
433 btrfs_space_info_update_bytes_may_use(fs_info,
452 #define DUMP_BLOCK_RSV(fs_info, rsv_name) \
454 struct btrfs_block_rsv *__rsv = &(fs_info)->rsv_name; \
456 btrfs_info(fs_info, #rsv_name ": size %llu reserved %llu", \
477 static void dump_global_block_rsv(struct btrfs_fs_info *fs_info)
479 DUMP_BLOCK_RSV(fs_info, global_block_rsv);
480 DUMP_BLOCK_RSV(fs_info, trans_block_rsv);
481 DUMP_BLOCK_RSV(fs_info, chunk_block_rsv);
482 DUMP_BLOCK_RSV(fs_info, delayed_block_rsv);
483 DUMP_BLOCK_RSV(fs_info, delayed_refs_rsv);
486 static void __btrfs_dump_space_info(struct btrfs_fs_info *fs_info,
493 btrfs_info(fs_info, "space_info %s has %lld free, is %sfull",
497 btrfs_info(fs_info,
504 void btrfs_dump_space_info(struct btrfs_fs_info *fs_info,
513 __btrfs_dump_space_info(fs_info, info);
514 dump_global_block_rsv(fs_info);
529 btrfs_info(fs_info,
543 btrfs_info(fs_info, "%llu bytes available across all block groups", total_avail);
546 static inline u64 calc_reclaim_items_nr(const struct btrfs_fs_info *fs_info,
552 bytes = btrfs_calc_insert_metadata_size(fs_info, 1);
559 static inline u64 calc_delayed_refs_nr(const struct btrfs_fs_info *fs_info,
562 const u64 bytes = btrfs_calc_delayed_ref_bytes(fs_info, 1);
576 static void shrink_delalloc(struct btrfs_fs_info *fs_info,
588 delalloc_bytes = percpu_counter_sum_positive(&fs_info->delalloc_bytes);
589 ordered_bytes = percpu_counter_sum_positive(&fs_info->ordered_bytes);
610 items = calc_reclaim_items_nr(fs_info, to_reclaim) * 2;
629 btrfs_start_delalloc_roots(fs_info, nr_pages, true);
652 async_pages = atomic_read(&fs_info->async_delalloc_pages);
666 wait_event(fs_info->async_submit_wait,
667 atomic_read(&fs_info->async_delalloc_pages) <=
672 btrfs_wait_ordered_roots(fs_info, items, 0, (u64)-1);
696 &fs_info->delalloc_bytes);
698 &fs_info->ordered_bytes);
707 static void flush_space(struct btrfs_fs_info *fs_info,
711 struct btrfs_root *root = fs_info->tree_root;
720 nr = calc_reclaim_items_nr(fs_info, num_bytes) * 2;
739 shrink_delalloc(fs_info, space_info, num_bytes,
752 nr = calc_delayed_refs_nr(fs_info, num_bytes);
766 btrfs_get_alloc_profile(fs_info, space_info->flags),
780 btrfs_run_delayed_iputs(fs_info);
781 btrfs_wait_on_delayed_iputs(fs_info);
806 trace_btrfs_flush_space(fs_info, space_info->flags, num_bytes, state,
812 btrfs_calc_reclaim_metadata_size(struct btrfs_fs_info *fs_info,
821 avail = calc_available_free_space(fs_info, space_info,
837 static bool need_preemptive_reclaim(struct btrfs_fs_info *fs_info,
840 const u64 global_rsv_size = btrfs_block_rsv_reserved(&fs_info->global_block_rsv);
904 thresh = calc_available_free_space(fs_info, space_info,
937 ordered = percpu_counter_read_positive(&fs_info->ordered_bytes) >> 1;
938 delalloc = percpu_counter_read_positive(&fs_info->delalloc_bytes);
940 used += btrfs_block_rsv_reserved(&fs_info->delayed_refs_rsv) +
941 btrfs_block_rsv_reserved(&fs_info->delayed_block_rsv);
945 return (used >= thresh && !btrfs_fs_closing(fs_info) &&
946 !test_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state));
949 static bool steal_from_global_rsv(struct btrfs_fs_info *fs_info,
953 struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv;
982 * @fs_info - fs_info for this fs
995 static bool maybe_fail_all_tickets(struct btrfs_fs_info *fs_info,
1000 const bool aborted = BTRFS_FS_ERROR(fs_info);
1002 trace_btrfs_fail_all_tickets(fs_info, space_info);
1004 if (btrfs_test_opt(fs_info, ENOSPC_DEBUG)) {
1005 btrfs_info(fs_info, "cannot satisfy tickets, dumping space info");
1006 __btrfs_dump_space_info(fs_info, space_info);
1014 if (!aborted && steal_from_global_rsv(fs_info, space_info, ticket))
1017 if (!aborted && btrfs_test_opt(fs_info, ENOSPC_DEBUG))
1018 btrfs_info(fs_info, "failing ticket with %llu bytes",
1035 btrfs_try_granting_tickets(fs_info, space_info);
1047 struct btrfs_fs_info *fs_info;
1054 fs_info = container_of(work, struct btrfs_fs_info, async_reclaim_work);
1055 space_info = btrfs_find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);
1058 to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info, space_info);
1069 flush_space(fs_info, space_info, to_reclaim, flush_state, false);
1076 to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info,
1111 if (maybe_fail_all_tickets(fs_info, space_info)) {
1135 struct btrfs_fs_info *fs_info;
1143 fs_info = container_of(work, struct btrfs_fs_info,
1145 space_info = btrfs_find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);
1146 delayed_block_rsv = &fs_info->delayed_block_rsv;
1147 delayed_refs_rsv = &fs_info->delayed_refs_rsv;
1148 global_rsv = &fs_info->global_block_rsv;
1149 trans_rsv = &fs_info->trans_block_rsv;
1152 while (need_preemptive_reclaim(fs_info, space_info)) {
1212 to_reclaim = btrfs_calc_insert_metadata_size(fs_info, 1);
1213 flush_space(fs_info, space_info, to_reclaim, flush, true);
1221 trace_btrfs_done_preemptive_reclaim(fs_info, space_info);
1267 struct btrfs_fs_info *fs_info;
1272 fs_info = container_of(work, struct btrfs_fs_info, async_data_reclaim_work);
1273 space_info = fs_info->data_sinfo;
1285 flush_space(fs_info, space_info, U64_MAX, ALLOC_CHUNK_FORCE, false);
1294 if (BTRFS_FS_ERROR(fs_info))
1301 flush_space(fs_info, space_info, U64_MAX,
1319 if (maybe_fail_all_tickets(fs_info, space_info))
1328 if (BTRFS_FS_ERROR(fs_info))
1337 maybe_fail_all_tickets(fs_info, space_info);
1342 void btrfs_init_async_reclaim_work(struct btrfs_fs_info *fs_info)
1344 INIT_WORK(&fs_info->async_reclaim_work, btrfs_async_reclaim_metadata_space);
1345 INIT_WORK(&fs_info->async_data_reclaim_work, btrfs_async_reclaim_data_space);
1346 INIT_WORK(&fs_info->preempt_reclaim_work,
1368 static void priority_reclaim_metadata_space(struct btrfs_fs_info *fs_info,
1378 to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info, space_info);
1392 flush_space(fs_info, space_info, to_reclaim, states[flush_state],
1410 if (BTRFS_FS_ERROR(fs_info)) {
1411 ticket->error = BTRFS_FS_ERROR(fs_info);
1413 } else if (!steal_from_global_rsv(fs_info, space_info, ticket)) {
1423 btrfs_try_granting_tickets(fs_info, space_info);
1427 static void priority_reclaim_data_space(struct btrfs_fs_info *fs_info,
1441 flush_space(fs_info, space_info, U64_MAX, ALLOC_CHUNK_FORCE, false);
1451 btrfs_try_granting_tickets(fs_info, space_info);
1455 static void wait_reserve_ticket(struct btrfs_fs_info *fs_info,
1492 * @fs_info: the filesystem
1502 static int handle_reserve_ticket(struct btrfs_fs_info *fs_info,
1514 wait_reserve_ticket(fs_info, space_info, ticket);
1517 priority_reclaim_metadata_space(fs_info, space_info, ticket,
1522 priority_reclaim_metadata_space(fs_info, space_info, ticket,
1527 priority_reclaim_data_space(fs_info, space_info, ticket);
1543 trace_btrfs_reserve_ticket(fs_info, space_info->flags, orig_bytes,
1558 static inline void maybe_clamp_preempt(struct btrfs_fs_info *fs_info,
1561 u64 ordered = percpu_counter_sum_positive(&fs_info->ordered_bytes);
1562 u64 delalloc = percpu_counter_sum_positive(&fs_info->delalloc_bytes);
1595 * @fs_info: the filesystem
1607 static int __reserve_bytes(struct btrfs_fs_info *fs_info,
1633 async_work = &fs_info->async_data_reclaim_work;
1635 async_work = &fs_info->async_reclaim_work;
1657 btrfs_can_overcommit(fs_info, space_info, orig_bytes, flush))) {
1658 btrfs_space_info_update_bytes_may_use(fs_info, space_info,
1671 btrfs_space_info_update_bytes_may_use(fs_info, space_info,
1705 maybe_clamp_preempt(fs_info, space_info);
1708 trace_btrfs_trigger_flush(fs_info,
1721 * which means we won't have fs_info->fs_root set, so don't do
1724 if (!test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags) &&
1725 !work_busy(&fs_info->preempt_reclaim_work) &&
1726 need_preemptive_reclaim(fs_info, space_info)) {
1727 trace_btrfs_trigger_flush(fs_info, space_info->flags,
1730 &fs_info->preempt_reclaim_work);
1737 return handle_reserve_ticket(fs_info, space_info, &ticket, start_ns,
1744 * @fs_info: the filesystem
1756 int btrfs_reserve_metadata_bytes(struct btrfs_fs_info *fs_info,
1763 ret = __reserve_bytes(fs_info, block_rsv->space_info, orig_bytes, flush);
1765 trace_btrfs_space_reservation(fs_info, "space_info:enospc",
1769 if (btrfs_test_opt(fs_info, ENOSPC_DEBUG))
1770 btrfs_dump_space_info(fs_info, block_rsv->space_info,
1779 * @fs_info: the filesystem
1786 int btrfs_reserve_data_bytes(struct btrfs_fs_info *fs_info, u64 bytes,
1789 struct btrfs_space_info *data_sinfo = fs_info->data_sinfo;
1797 ret = __reserve_bytes(fs_info, data_sinfo, bytes, flush);
1799 trace_btrfs_space_reservation(fs_info, "space_info:enospc",
1801 if (btrfs_test_opt(fs_info, ENOSPC_DEBUG))
1802 btrfs_dump_space_info(fs_info, data_sinfo, bytes, 0);
1808 __cold void btrfs_dump_space_info_for_trans_abort(struct btrfs_fs_info *fs_info)
1812 btrfs_info(fs_info, "dumping space info:");
1813 list_for_each_entry(space_info, &fs_info->space_info, list) {
1815 __btrfs_dump_space_info(fs_info, space_info);
1818 dump_global_block_rsv(fs_info);