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