Lines Matching refs:fs_info
221 int btrfs_init_space_info(struct btrfs_fs_info *fs_info)
229 disk_super = fs_info->super_copy;
238 ret = create_space_info(fs_info, flags);
244 ret = create_space_info(fs_info, flags);
247 ret = create_space_info(fs_info, flags);
252 ret = create_space_info(fs_info, flags);
298 static u64 calc_available_free_space(struct btrfs_fs_info *fs_info,
307 profile = btrfs_system_alloc_profile(fs_info);
309 profile = btrfs_metadata_alloc_profile(fs_info);
311 avail = atomic64_read(&fs_info->free_chunk_space);
334 int btrfs_can_overcommit(struct btrfs_fs_info *fs_info,
346 avail = calc_available_free_space(fs_info, space_info, flush);
367 void btrfs_try_granting_tickets(struct btrfs_fs_info *fs_info,
385 btrfs_can_overcommit(fs_info, space_info, ticket->bytes,
387 btrfs_space_info_update_bytes_may_use(fs_info,
406 #define DUMP_BLOCK_RSV(fs_info, rsv_name) \
408 struct btrfs_block_rsv *__rsv = &(fs_info)->rsv_name; \
410 btrfs_info(fs_info, #rsv_name ": size %llu reserved %llu", \
415 static void __btrfs_dump_space_info(struct btrfs_fs_info *fs_info,
421 btrfs_info(fs_info, "space_info %llu has %lld free, is %sfull",
425 btrfs_info(fs_info,
431 DUMP_BLOCK_RSV(fs_info, global_block_rsv);
432 DUMP_BLOCK_RSV(fs_info, trans_block_rsv);
433 DUMP_BLOCK_RSV(fs_info, chunk_block_rsv);
434 DUMP_BLOCK_RSV(fs_info, delayed_block_rsv);
435 DUMP_BLOCK_RSV(fs_info, delayed_refs_rsv);
439 void btrfs_dump_space_info(struct btrfs_fs_info *fs_info,
447 __btrfs_dump_space_info(fs_info, info);
457 btrfs_info(fs_info,
469 static inline u64 calc_reclaim_items_nr(struct btrfs_fs_info *fs_info,
475 bytes = btrfs_calc_insert_metadata_size(fs_info, 1);
487 static void shrink_delalloc(struct btrfs_fs_info *fs_info,
509 items = calc_reclaim_items_nr(fs_info, to_reclaim) * 2;
516 &fs_info->delalloc_bytes);
517 dio_bytes = percpu_counter_sum_positive(&fs_info->dio_bytes);
522 btrfs_wait_ordered_roots(fs_info, items, 0, (u64)-1);
538 btrfs_start_delalloc_roots(fs_info, nr_pages, true);
542 btrfs_wait_ordered_roots(fs_info, items, 0, (u64)-1);
558 &fs_info->delalloc_bytes);
559 dio_bytes = percpu_counter_sum_positive(&fs_info->dio_bytes);
573 static int may_commit_transaction(struct btrfs_fs_info *fs_info,
577 struct btrfs_block_rsv *delayed_rsv = &fs_info->delayed_block_rsv;
578 struct btrfs_block_rsv *delayed_refs_rsv = &fs_info->delayed_refs_rsv;
579 struct btrfs_block_rsv *trans_rsv = &fs_info->trans_block_rsv;
614 trans = btrfs_join_transaction(fs_info->extent_root);
671 static void flush_space(struct btrfs_fs_info *fs_info,
675 struct btrfs_root *root = fs_info->extent_root;
684 nr = calc_reclaim_items_nr(fs_info, num_bytes) * 2;
698 shrink_delalloc(fs_info, space_info, num_bytes,
709 nr = calc_reclaim_items_nr(fs_info, num_bytes);
723 btrfs_get_alloc_profile(fs_info, space_info->flags),
736 btrfs_run_delayed_iputs(fs_info);
737 btrfs_wait_on_delayed_iputs(fs_info);
740 ret = may_commit_transaction(fs_info, space_info);
747 trace_btrfs_flush_space(fs_info, space_info->flags, num_bytes, state,
753 btrfs_calc_reclaim_metadata_size(struct btrfs_fs_info *fs_info,
763 avail = calc_available_free_space(fs_info, space_info,
780 if (btrfs_can_overcommit(fs_info, space_info, to_reclaim,
786 if (btrfs_can_overcommit(fs_info, space_info, SZ_1M,
801 static inline int need_do_async_reclaim(struct btrfs_fs_info *fs_info,
811 if (!btrfs_calc_reclaim_metadata_size(fs_info, space_info))
814 return (used >= thresh && !btrfs_fs_closing(fs_info) &&
815 !test_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state));
818 static bool steal_from_global_rsv(struct btrfs_fs_info *fs_info,
822 struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv;
848 * @fs_info - fs_info for this fs
861 static bool maybe_fail_all_tickets(struct btrfs_fs_info *fs_info,
868 if (btrfs_test_opt(fs_info, ENOSPC_DEBUG)) {
869 btrfs_info(fs_info, "cannot satisfy tickets, dumping space info");
870 __btrfs_dump_space_info(fs_info, space_info);
879 steal_from_global_rsv(fs_info, space_info, ticket))
897 if (btrfs_test_opt(fs_info, ENOSPC_DEBUG))
898 btrfs_info(fs_info, "failing ticket with %llu bytes",
911 btrfs_try_granting_tickets(fs_info, space_info);
923 struct btrfs_fs_info *fs_info;
930 fs_info = container_of(work, struct btrfs_fs_info, async_reclaim_work);
931 space_info = btrfs_find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);
934 to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info, space_info);
945 flush_space(fs_info, space_info, to_reclaim, flush_state);
952 to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info,
979 if (maybe_fail_all_tickets(fs_info, space_info)) {
1055 struct btrfs_fs_info *fs_info;
1060 fs_info = container_of(work, struct btrfs_fs_info, async_data_reclaim_work);
1061 space_info = fs_info->data_sinfo;
1073 flush_space(fs_info, space_info, U64_MAX, ALLOC_CHUNK_FORCE);
1085 flush_space(fs_info, space_info, U64_MAX,
1103 if (maybe_fail_all_tickets(fs_info, space_info))
1115 void btrfs_init_async_reclaim_work(struct btrfs_fs_info *fs_info)
1117 INIT_WORK(&fs_info->async_reclaim_work, btrfs_async_reclaim_metadata_space);
1118 INIT_WORK(&fs_info->async_data_reclaim_work, btrfs_async_reclaim_data_space);
1138 static void priority_reclaim_metadata_space(struct btrfs_fs_info *fs_info,
1148 to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info, space_info);
1157 flush_space(fs_info, space_info, to_reclaim, states[flush_state]);
1168 static void priority_reclaim_data_space(struct btrfs_fs_info *fs_info,
1173 flush_space(fs_info, space_info, U64_MAX, ALLOC_CHUNK_FORCE);
1183 static void wait_reserve_ticket(struct btrfs_fs_info *fs_info,
1219 * @fs_info - the fs
1227 static int handle_reserve_ticket(struct btrfs_fs_info *fs_info,
1238 wait_reserve_ticket(fs_info, space_info, ticket);
1241 priority_reclaim_metadata_space(fs_info, space_info, ticket,
1246 priority_reclaim_metadata_space(fs_info, space_info, ticket,
1251 priority_reclaim_data_space(fs_info, space_info, ticket);
1270 btrfs_try_granting_tickets(fs_info, space_info);
1312 static int __reserve_bytes(struct btrfs_fs_info *fs_info,
1326 async_work = &fs_info->async_data_reclaim_work;
1328 async_work = &fs_info->async_reclaim_work;
1351 btrfs_can_overcommit(fs_info, space_info, orig_bytes, flush))) {
1352 btrfs_space_info_update_bytes_may_use(fs_info, space_info,
1376 trace_btrfs_trigger_flush(fs_info,
1390 * which means we won't have fs_info->fs_root set, so don't do
1393 if (!test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags) &&
1394 need_do_async_reclaim(fs_info, space_info, used) &&
1395 !work_busy(&fs_info->async_reclaim_work)) {
1396 trace_btrfs_trigger_flush(fs_info, space_info->flags,
1399 &fs_info->async_reclaim_work);
1406 return handle_reserve_ticket(fs_info, space_info, &ticket, flush);
1428 struct btrfs_fs_info *fs_info = root->fs_info;
1429 struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv;
1432 ret = __reserve_bytes(fs_info, block_rsv->space_info, orig_bytes, flush);
1440 trace_btrfs_space_reservation(fs_info, "space_info:enospc",
1444 if (btrfs_test_opt(fs_info, ENOSPC_DEBUG))
1445 btrfs_dump_space_info(fs_info, block_rsv->space_info,
1453 * @fs_info - the filesystem
1460 int btrfs_reserve_data_bytes(struct btrfs_fs_info *fs_info, u64 bytes,
1463 struct btrfs_space_info *data_sinfo = fs_info->data_sinfo;
1470 ret = __reserve_bytes(fs_info, data_sinfo, bytes, flush);
1472 trace_btrfs_space_reservation(fs_info, "space_info:enospc",
1474 if (btrfs_test_opt(fs_info, ENOSPC_DEBUG))
1475 btrfs_dump_space_info(fs_info, data_sinfo, bytes, 0);