Loading fs/btrfs/extent-tree.c +21 −1 Original line number Diff line number Diff line Loading @@ -2331,6 +2331,7 @@ int btrfs_shrink_extent_tree(struct btrfs_root *root, u64 new_size) struct extent_buffer *leaf; u32 nritems; int ret; int progress = 0; btrfs_set_super_total_bytes(&info->super_copy, new_size); block_group_cache = &info->block_group_cache; Loading Loading @@ -2383,6 +2384,19 @@ int btrfs_shrink_extent_tree(struct btrfs_root *root, u64 new_size) } btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); if (progress && need_resched()) { memcpy(&key, &found_key, sizeof(key)); mutex_unlock(&root->fs_info->fs_mutex); cond_resched(); mutex_lock(&root->fs_info->fs_mutex); btrfs_release_path(root, path); btrfs_search_slot(NULL, root, &key, path, 0, 0); progress = 0; goto next; } progress = 1; if (btrfs_key_type(&found_key) != BTRFS_EXTENT_ITEM_KEY || found_key.objectid + found_key.offset <= cur_byte) { path->slots[0]++; Loading Loading @@ -2442,7 +2456,7 @@ int btrfs_shrink_extent_tree(struct btrfs_root *root, u64 new_size) */ memcpy(&key, &found_key, sizeof(key)); btrfs_release_path(root, path); continue; goto resched_check; } btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); Loading @@ -2465,6 +2479,12 @@ int btrfs_shrink_extent_tree(struct btrfs_root *root, u64 new_size) key.objectid = found_key.objectid + 1; btrfs_del_item(trans, root, path); btrfs_release_path(root, path); resched_check: if (need_resched()) { mutex_unlock(&root->fs_info->fs_mutex); cond_resched(); mutex_lock(&root->fs_info->fs_mutex); } } clear_extent_dirty(&info->free_space_cache, new_size, (u64)-1, GFP_NOFS); Loading Loading
fs/btrfs/extent-tree.c +21 −1 Original line number Diff line number Diff line Loading @@ -2331,6 +2331,7 @@ int btrfs_shrink_extent_tree(struct btrfs_root *root, u64 new_size) struct extent_buffer *leaf; u32 nritems; int ret; int progress = 0; btrfs_set_super_total_bytes(&info->super_copy, new_size); block_group_cache = &info->block_group_cache; Loading Loading @@ -2383,6 +2384,19 @@ int btrfs_shrink_extent_tree(struct btrfs_root *root, u64 new_size) } btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); if (progress && need_resched()) { memcpy(&key, &found_key, sizeof(key)); mutex_unlock(&root->fs_info->fs_mutex); cond_resched(); mutex_lock(&root->fs_info->fs_mutex); btrfs_release_path(root, path); btrfs_search_slot(NULL, root, &key, path, 0, 0); progress = 0; goto next; } progress = 1; if (btrfs_key_type(&found_key) != BTRFS_EXTENT_ITEM_KEY || found_key.objectid + found_key.offset <= cur_byte) { path->slots[0]++; Loading Loading @@ -2442,7 +2456,7 @@ int btrfs_shrink_extent_tree(struct btrfs_root *root, u64 new_size) */ memcpy(&key, &found_key, sizeof(key)); btrfs_release_path(root, path); continue; goto resched_check; } btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); Loading @@ -2465,6 +2479,12 @@ int btrfs_shrink_extent_tree(struct btrfs_root *root, u64 new_size) key.objectid = found_key.objectid + 1; btrfs_del_item(trans, root, path); btrfs_release_path(root, path); resched_check: if (need_resched()) { mutex_unlock(&root->fs_info->fs_mutex); cond_resched(); mutex_lock(&root->fs_info->fs_mutex); } } clear_extent_dirty(&info->free_space_cache, new_size, (u64)-1, GFP_NOFS); Loading