History

Merge branch 'for-4.9-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux

Pull btrfs fixes from Chris Mason: "Some fixes that Dave Sterba collected. We held off on these last week because I was focused on the memory corruption testing" * 'for-4.9-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: btrfs: fix WARNING in btrfs_select_ref_head() Btrfs: remove some no-op casts btrfs: pass correct args to btrfs_async_run_delayed_refs() btrfs: make file clone aware of fatal signals btrfs: qgroup: Prevent qgroup->reserved from going subzero Btrfs: kill BUG_ON in do_relocation

Linus Torvalds committed 10 years ago

Commit 46d7cbb2 parents bd30fac 9d1032c5 files · +29 −9Browse files

Unified · Split

5 files
  1. fs/btrfs/extent-tree.c +3 −0
  2. fs/btrfs/extent_io.c +4 −4
  3. fs/btrfs/inode.c +9 −4
  4. fs/btrfs/ioctl.c +5 −0
  5. fs/btrfs/relocation.c +8 −1
fs/btrfs/extent-tree.c+3−0
@@ -2647,7 +2647,10 @@ static noinline int __btrfs_run_delayed_refs(struct btrfs_trans_handle *trans, · 2646 unmodified lines
26472647
26482648 btrfs_free_delayed_extent_op(extent_op);
26492649 if (ret) {
2650+ spin_lock(&delayed_refs->lock);
26502651 locked_ref->processing = 0;
2652+ delayed_refs->num_heads_ready++;
2653+ spin_unlock(&delayed_refs->lock);
26512654 btrfs_delayed_ref_unlock(locked_ref);
26522655 btrfs_put_delayed_ref(ref);
26532656 btrfs_debug(fs_info, "run_one_delayed_ref returned %d",
fs/btrfs/extent_io.c+4−4
@@ -5569,7 +5569,7 @@ void le_bitmap_set(u8 *map, unsigned int start, int len) · 5568 unmodified lines
55695569 *p |= mask_to_set;
55705570 len -= bits_to_set;
55715571 bits_to_set = BITS_PER_BYTE;
5572− mask_to_set = ~(u8)0;
5572+ mask_to_set = ~0;
55735573 p++;
55745574 }
55755575 if (len) {
@@ -5589,7 +5589,7 @@ void le_bitmap_clear(u8 *map, unsigned int start, int len) · 13 unmodified lines
55895589 *p &= ~mask_to_clear;
55905590 len -= bits_to_clear;
55915591 bits_to_clear = BITS_PER_BYTE;
5592− mask_to_clear = ~(u8)0;
5592+ mask_to_clear = ~0;
55935593 p++;
55945594 }
55955595 if (len) {
@@ -5679,7 +5679,7 @@ void extent_buffer_bitmap_set(struct extent_buffer *eb, unsigned long start, · 83 unmodified lines
56795679 kaddr[offset] |= mask_to_set;
56805680 len -= bits_to_set;
56815681 bits_to_set = BITS_PER_BYTE;
5682− mask_to_set = ~(u8)0;
5682+ mask_to_set = ~0;
56835683 if (++offset >= PAGE_SIZE && len > 0) {
56845684 offset = 0;
56855685 page = eb->pages[++i];
@@ -5721,7 +5721,7 @@ void extent_buffer_bitmap_clear(struct extent_buffer *eb, unsigned long start, · 35 unmodified lines
57215721 kaddr[offset] &= ~mask_to_clear;
57225722 len -= bits_to_clear;
57235723 bits_to_clear = BITS_PER_BYTE;
5724− mask_to_clear = ~(u8)0;
5724+ mask_to_clear = ~0;
57255725 if (++offset >= PAGE_SIZE && len > 0) {
57265726 offset = 0;
57275727 page = eb->pages[++i];
fs/btrfs/inode.c+9−4
@@ -4605,8 +4605,8 @@ delete: · 4604 unmodified lines
46054605 BUG_ON(ret);
46064606 if (btrfs_should_throttle_delayed_refs(trans, root))
46074607 btrfs_async_run_delayed_refs(root,
4608− trans->transid,
4609− trans->delayed_ref_updates * 2, 0);
4608+ trans->delayed_ref_updates * 2,
4609+ trans->transid, 0);
46104610 if (be_nice) {
46114611 if (truncate_space_check(trans, root,
46124612 extent_num_bytes)) {
@@ -8931,9 +8931,14 @@ again: · 4318 unmodified lines
89318931 * So even we call qgroup_free_data(), it won't decrease reserved
89328932 * space.
89338933 * 2) Not written to disk
8934− * This means the reserved space should be freed here.
8934+ * This means the reserved space should be freed here. However,
8935+ * if a truncate invalidates the page (by clearing PageDirty)
8936+ * and the page is accounted for while allocating extent
8937+ * in btrfs_check_data_free_space() we let delayed_ref to
8938+ * free the entire extent.
89358939 */
8936− btrfs_qgroup_free_data(inode, page_start, PAGE_SIZE);
8940+ if (PageDirty(page))
8941+ btrfs_qgroup_free_data(inode, page_start, PAGE_SIZE);
89378942 if (!inode_evicting) {
89388943 clear_extent_bit(tree, page_start, page_end,
89398944 EXTENT_LOCKED | EXTENT_DIRTY |
fs/btrfs/ioctl.c+5−0
@@ -3814,6 +3814,11 @@ process_slot: · 3813 unmodified lines
38143814 }
38153815 btrfs_release_path(path);
38163816 key.offset = next_key_min_offset;
3817+
3818+ if (fatal_signal_pending(current)) {
3819+ ret = -EINTR;
3820+ goto out;
3821+ }
38173822 }
38183823 ret = 0;
38193824
fs/btrfs/relocation.c+8−1
@@ -2728,7 +2728,14 @@ static int do_relocation(struct btrfs_trans_handle *trans, · 2727 unmodified lines
27282728
27292729 bytenr = btrfs_node_blockptr(upper->eb, slot);
27302730 if (lowest) {
2731− BUG_ON(bytenr != node->bytenr);
2731+ if (bytenr != node->bytenr) {
2732+ btrfs_err(root->fs_info,
2733+ "lowest leaf/node mismatch: bytenr %llu node->bytenr %llu slot %d upper %llu",
2734+ bytenr, node->bytenr, slot,
2735+ upper->eb->start);
2736+ err = -EIO;
2737+ goto next;
2738+ }
27322739 } else {
27332740 if (node->eb->start == bytenr)
27342741 goto next;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t