Skip to content

Commit e3597e6

Browse files
committed
Merge branch 'for-4.9-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux into for-linus-4.9
2 parents 570dd45 + 9d1032c commit e3597e6

File tree

5 files changed

+29
-9
lines changed

5 files changed

+29
-9
lines changed

fs/btrfs/extent-tree.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2647,7 +2647,10 @@ static noinline int __btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5569,7 +5569,7 @@ void le_bitmap_set(u8 *map, unsigned int start, int len)
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)
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,
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,
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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4605,8 +4605,8 @@ int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans,
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)) {
@@ -8930,9 +8930,14 @@ static void btrfs_invalidatepage(struct page *page, unsigned int offset,
89308930
* So even we call qgroup_free_data(), it won't decrease reserved
89318931
* space.
89328932
* 2) Not written to disk
8933-
* This means the reserved space should be freed here.
8933+
* This means the reserved space should be freed here. However,
8934+
* if a truncate invalidates the page (by clearing PageDirty)
8935+
* and the page is accounted for while allocating extent
8936+
* in btrfs_check_data_free_space() we let delayed_ref to
8937+
* free the entire extent.
89348938
*/
8935-
btrfs_qgroup_free_data(inode, page_start, PAGE_SIZE);
8939+
if (PageDirty(page))
8940+
btrfs_qgroup_free_data(inode, page_start, PAGE_SIZE);
89368941
if (!inode_evicting) {
89378942
clear_extent_bit(tree, page_start, page_end,
89388943
EXTENT_LOCKED | EXTENT_DIRTY |

fs/btrfs/ioctl.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3814,6 +3814,11 @@ static int btrfs_clone(struct inode *src, struct inode *inode,
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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2728,7 +2728,14 @@ static int do_relocation(struct btrfs_trans_handle *trans,
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;

0 commit comments

Comments
 (0)