Loading fs/btrfs/extent-tree.c +3 −0 Original line number Diff line number Diff line Loading @@ -2647,7 +2647,10 @@ static noinline int __btrfs_run_delayed_refs(struct btrfs_trans_handle *trans, btrfs_free_delayed_extent_op(extent_op); if (ret) { spin_lock(&delayed_refs->lock); locked_ref->processing = 0; delayed_refs->num_heads_ready++; spin_unlock(&delayed_refs->lock); btrfs_delayed_ref_unlock(locked_ref); btrfs_put_delayed_ref(ref); btrfs_debug(fs_info, "run_one_delayed_ref returned %d", Loading fs/btrfs/extent_io.c +4 −4 Original line number Diff line number Diff line Loading @@ -5569,7 +5569,7 @@ void le_bitmap_set(u8 *map, unsigned int start, int len) *p |= mask_to_set; len -= bits_to_set; bits_to_set = BITS_PER_BYTE; mask_to_set = ~(u8)0; mask_to_set = ~0; p++; } if (len) { Loading @@ -5589,7 +5589,7 @@ void le_bitmap_clear(u8 *map, unsigned int start, int len) *p &= ~mask_to_clear; len -= bits_to_clear; bits_to_clear = BITS_PER_BYTE; mask_to_clear = ~(u8)0; mask_to_clear = ~0; p++; } if (len) { Loading Loading @@ -5679,7 +5679,7 @@ void extent_buffer_bitmap_set(struct extent_buffer *eb, unsigned long start, kaddr[offset] |= mask_to_set; len -= bits_to_set; bits_to_set = BITS_PER_BYTE; mask_to_set = ~(u8)0; mask_to_set = ~0; if (++offset >= PAGE_SIZE && len > 0) { offset = 0; page = eb->pages[++i]; Loading Loading @@ -5721,7 +5721,7 @@ void extent_buffer_bitmap_clear(struct extent_buffer *eb, unsigned long start, kaddr[offset] &= ~mask_to_clear; len -= bits_to_clear; bits_to_clear = BITS_PER_BYTE; mask_to_clear = ~(u8)0; mask_to_clear = ~0; if (++offset >= PAGE_SIZE && len > 0) { offset = 0; page = eb->pages[++i]; Loading fs/btrfs/inode.c +9 −4 Original line number Diff line number Diff line Loading @@ -4605,8 +4605,8 @@ int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans, BUG_ON(ret); if (btrfs_should_throttle_delayed_refs(trans, root)) btrfs_async_run_delayed_refs(root, trans->transid, trans->delayed_ref_updates * 2, 0); trans->delayed_ref_updates * 2, trans->transid, 0); if (be_nice) { if (truncate_space_check(trans, root, extent_num_bytes)) { Loading Loading @@ -8930,8 +8930,13 @@ static void btrfs_invalidatepage(struct page *page, unsigned int offset, * So even we call qgroup_free_data(), it won't decrease reserved * space. * 2) Not written to disk * This means the reserved space should be freed here. * This means the reserved space should be freed here. However, * if a truncate invalidates the page (by clearing PageDirty) * and the page is accounted for while allocating extent * in btrfs_check_data_free_space() we let delayed_ref to * free the entire extent. */ if (PageDirty(page)) btrfs_qgroup_free_data(inode, page_start, PAGE_SIZE); if (!inode_evicting) { clear_extent_bit(tree, page_start, page_end, Loading fs/btrfs/ioctl.c +5 −0 Original line number Diff line number Diff line Loading @@ -3814,6 +3814,11 @@ static int btrfs_clone(struct inode *src, struct inode *inode, } btrfs_release_path(path); key.offset = next_key_min_offset; if (fatal_signal_pending(current)) { ret = -EINTR; goto out; } } ret = 0; Loading fs/btrfs/relocation.c +8 −1 Original line number Diff line number Diff line Loading @@ -2728,7 +2728,14 @@ static int do_relocation(struct btrfs_trans_handle *trans, bytenr = btrfs_node_blockptr(upper->eb, slot); if (lowest) { BUG_ON(bytenr != node->bytenr); if (bytenr != node->bytenr) { btrfs_err(root->fs_info, "lowest leaf/node mismatch: bytenr %llu node->bytenr %llu slot %d upper %llu", bytenr, node->bytenr, slot, upper->eb->start); err = -EIO; goto next; } } else { if (node->eb->start == bytenr) goto next; Loading Loading
fs/btrfs/extent-tree.c +3 −0 Original line number Diff line number Diff line Loading @@ -2647,7 +2647,10 @@ static noinline int __btrfs_run_delayed_refs(struct btrfs_trans_handle *trans, btrfs_free_delayed_extent_op(extent_op); if (ret) { spin_lock(&delayed_refs->lock); locked_ref->processing = 0; delayed_refs->num_heads_ready++; spin_unlock(&delayed_refs->lock); btrfs_delayed_ref_unlock(locked_ref); btrfs_put_delayed_ref(ref); btrfs_debug(fs_info, "run_one_delayed_ref returned %d", Loading
fs/btrfs/extent_io.c +4 −4 Original line number Diff line number Diff line Loading @@ -5569,7 +5569,7 @@ void le_bitmap_set(u8 *map, unsigned int start, int len) *p |= mask_to_set; len -= bits_to_set; bits_to_set = BITS_PER_BYTE; mask_to_set = ~(u8)0; mask_to_set = ~0; p++; } if (len) { Loading @@ -5589,7 +5589,7 @@ void le_bitmap_clear(u8 *map, unsigned int start, int len) *p &= ~mask_to_clear; len -= bits_to_clear; bits_to_clear = BITS_PER_BYTE; mask_to_clear = ~(u8)0; mask_to_clear = ~0; p++; } if (len) { Loading Loading @@ -5679,7 +5679,7 @@ void extent_buffer_bitmap_set(struct extent_buffer *eb, unsigned long start, kaddr[offset] |= mask_to_set; len -= bits_to_set; bits_to_set = BITS_PER_BYTE; mask_to_set = ~(u8)0; mask_to_set = ~0; if (++offset >= PAGE_SIZE && len > 0) { offset = 0; page = eb->pages[++i]; Loading Loading @@ -5721,7 +5721,7 @@ void extent_buffer_bitmap_clear(struct extent_buffer *eb, unsigned long start, kaddr[offset] &= ~mask_to_clear; len -= bits_to_clear; bits_to_clear = BITS_PER_BYTE; mask_to_clear = ~(u8)0; mask_to_clear = ~0; if (++offset >= PAGE_SIZE && len > 0) { offset = 0; page = eb->pages[++i]; Loading
fs/btrfs/inode.c +9 −4 Original line number Diff line number Diff line Loading @@ -4605,8 +4605,8 @@ int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans, BUG_ON(ret); if (btrfs_should_throttle_delayed_refs(trans, root)) btrfs_async_run_delayed_refs(root, trans->transid, trans->delayed_ref_updates * 2, 0); trans->delayed_ref_updates * 2, trans->transid, 0); if (be_nice) { if (truncate_space_check(trans, root, extent_num_bytes)) { Loading Loading @@ -8930,8 +8930,13 @@ static void btrfs_invalidatepage(struct page *page, unsigned int offset, * So even we call qgroup_free_data(), it won't decrease reserved * space. * 2) Not written to disk * This means the reserved space should be freed here. * This means the reserved space should be freed here. However, * if a truncate invalidates the page (by clearing PageDirty) * and the page is accounted for while allocating extent * in btrfs_check_data_free_space() we let delayed_ref to * free the entire extent. */ if (PageDirty(page)) btrfs_qgroup_free_data(inode, page_start, PAGE_SIZE); if (!inode_evicting) { clear_extent_bit(tree, page_start, page_end, Loading
fs/btrfs/ioctl.c +5 −0 Original line number Diff line number Diff line Loading @@ -3814,6 +3814,11 @@ static int btrfs_clone(struct inode *src, struct inode *inode, } btrfs_release_path(path); key.offset = next_key_min_offset; if (fatal_signal_pending(current)) { ret = -EINTR; goto out; } } ret = 0; Loading
fs/btrfs/relocation.c +8 −1 Original line number Diff line number Diff line Loading @@ -2728,7 +2728,14 @@ static int do_relocation(struct btrfs_trans_handle *trans, bytenr = btrfs_node_blockptr(upper->eb, slot); if (lowest) { BUG_ON(bytenr != node->bytenr); if (bytenr != node->bytenr) { btrfs_err(root->fs_info, "lowest leaf/node mismatch: bytenr %llu node->bytenr %llu slot %d upper %llu", bytenr, node->bytenr, slot, upper->eb->start); err = -EIO; goto next; } } else { if (node->eb->start == bytenr) goto next; Loading