diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-03-16 16:37:42 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-03-16 16:37:42 -0400 |
commit | 8f5fd927c3a7576d57248a2d7a0861c3f2795973 (patch) | |
tree | 3bc57e2e7c166440b6a090b2fbd2d02107fbbbde /fs | |
parent | 8757ae23a33d312bd09bd3b8c7824b3323954608 (diff) | |
parent | 093e037ca88e1767693bc6bcb2df3f49c6be68c7 (diff) |
Merge tag 'for-4.16-rc5-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux
Pull btrfs fixes from David Sterba:
"There's an important revert in this pull request that needs to go to
stable as it causes a corruption on big endian machines.
The other fix is for FIEMAP incorrectly reporting shared extents
before a sync and one fix for a crash in raid56.
So far we got only one report about the BE corruption, the stable
kernels were out for like a week, so hopefully the scope of the damage
is low"
* tag 'for-4.16-rc5-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux:
Revert "btrfs: use proper endianness accessors for super_copy"
btrfs: add missing initialization in btrfs_check_shared
btrfs: Fix NULL pointer exception in find_bio_stripe
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/backref.c | 1 | ||||
-rw-r--r-- | fs/btrfs/raid56.c | 1 | ||||
-rw-r--r-- | fs/btrfs/sysfs.c | 8 | ||||
-rw-r--r-- | fs/btrfs/transaction.c | 20 |
4 files changed, 15 insertions, 15 deletions
diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index f94b2d8c744a..26484648d090 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c | |||
@@ -1519,6 +1519,7 @@ int btrfs_check_shared(struct btrfs_root *root, u64 inum, u64 bytenr) | |||
1519 | if (!node) | 1519 | if (!node) |
1520 | break; | 1520 | break; |
1521 | bytenr = node->val; | 1521 | bytenr = node->val; |
1522 | shared.share_count = 0; | ||
1522 | cond_resched(); | 1523 | cond_resched(); |
1523 | } | 1524 | } |
1524 | 1525 | ||
diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c index dec0907dfb8a..fcfc20de2df3 100644 --- a/fs/btrfs/raid56.c +++ b/fs/btrfs/raid56.c | |||
@@ -1370,6 +1370,7 @@ static int find_bio_stripe(struct btrfs_raid_bio *rbio, | |||
1370 | stripe_start = stripe->physical; | 1370 | stripe_start = stripe->physical; |
1371 | if (physical >= stripe_start && | 1371 | if (physical >= stripe_start && |
1372 | physical < stripe_start + rbio->stripe_len && | 1372 | physical < stripe_start + rbio->stripe_len && |
1373 | stripe->dev->bdev && | ||
1373 | bio->bi_disk == stripe->dev->bdev->bd_disk && | 1374 | bio->bi_disk == stripe->dev->bdev->bd_disk && |
1374 | bio->bi_partno == stripe->dev->bdev->bd_partno) { | 1375 | bio->bi_partno == stripe->dev->bdev->bd_partno) { |
1375 | return i; | 1376 | return i; |
diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c index d11c70bff5a9..a8bafed931f4 100644 --- a/fs/btrfs/sysfs.c +++ b/fs/btrfs/sysfs.c | |||
@@ -423,7 +423,7 @@ static ssize_t btrfs_nodesize_show(struct kobject *kobj, | |||
423 | { | 423 | { |
424 | struct btrfs_fs_info *fs_info = to_fs_info(kobj); | 424 | struct btrfs_fs_info *fs_info = to_fs_info(kobj); |
425 | 425 | ||
426 | return snprintf(buf, PAGE_SIZE, "%u\n", fs_info->nodesize); | 426 | return snprintf(buf, PAGE_SIZE, "%u\n", fs_info->super_copy->nodesize); |
427 | } | 427 | } |
428 | 428 | ||
429 | BTRFS_ATTR(, nodesize, btrfs_nodesize_show); | 429 | BTRFS_ATTR(, nodesize, btrfs_nodesize_show); |
@@ -433,7 +433,8 @@ static ssize_t btrfs_sectorsize_show(struct kobject *kobj, | |||
433 | { | 433 | { |
434 | struct btrfs_fs_info *fs_info = to_fs_info(kobj); | 434 | struct btrfs_fs_info *fs_info = to_fs_info(kobj); |
435 | 435 | ||
436 | return snprintf(buf, PAGE_SIZE, "%u\n", fs_info->sectorsize); | 436 | return snprintf(buf, PAGE_SIZE, "%u\n", |
437 | fs_info->super_copy->sectorsize); | ||
437 | } | 438 | } |
438 | 439 | ||
439 | BTRFS_ATTR(, sectorsize, btrfs_sectorsize_show); | 440 | BTRFS_ATTR(, sectorsize, btrfs_sectorsize_show); |
@@ -443,7 +444,8 @@ static ssize_t btrfs_clone_alignment_show(struct kobject *kobj, | |||
443 | { | 444 | { |
444 | struct btrfs_fs_info *fs_info = to_fs_info(kobj); | 445 | struct btrfs_fs_info *fs_info = to_fs_info(kobj); |
445 | 446 | ||
446 | return snprintf(buf, PAGE_SIZE, "%u\n", fs_info->sectorsize); | 447 | return snprintf(buf, PAGE_SIZE, "%u\n", |
448 | fs_info->super_copy->sectorsize); | ||
447 | } | 449 | } |
448 | 450 | ||
449 | BTRFS_ATTR(, clone_alignment, btrfs_clone_alignment_show); | 451 | BTRFS_ATTR(, clone_alignment, btrfs_clone_alignment_show); |
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 9220f004001c..04f07144b45c 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c | |||
@@ -1722,23 +1722,19 @@ static void update_super_roots(struct btrfs_fs_info *fs_info) | |||
1722 | 1722 | ||
1723 | super = fs_info->super_copy; | 1723 | super = fs_info->super_copy; |
1724 | 1724 | ||
1725 | /* update latest btrfs_super_block::chunk_root refs */ | ||
1726 | root_item = &fs_info->chunk_root->root_item; | 1725 | root_item = &fs_info->chunk_root->root_item; |
1727 | btrfs_set_super_chunk_root(super, root_item->bytenr); | 1726 | super->chunk_root = root_item->bytenr; |
1728 | btrfs_set_super_chunk_root_generation(super, root_item->generation); | 1727 | super->chunk_root_generation = root_item->generation; |
1729 | btrfs_set_super_chunk_root_level(super, root_item->level); | 1728 | super->chunk_root_level = root_item->level; |
1730 | 1729 | ||
1731 | /* update latest btrfs_super_block::root refs */ | ||
1732 | root_item = &fs_info->tree_root->root_item; | 1730 | root_item = &fs_info->tree_root->root_item; |
1733 | btrfs_set_super_root(super, root_item->bytenr); | 1731 | super->root = root_item->bytenr; |
1734 | btrfs_set_super_generation(super, root_item->generation); | 1732 | super->generation = root_item->generation; |
1735 | btrfs_set_super_root_level(super, root_item->level); | 1733 | super->root_level = root_item->level; |
1736 | |||
1737 | if (btrfs_test_opt(fs_info, SPACE_CACHE)) | 1734 | if (btrfs_test_opt(fs_info, SPACE_CACHE)) |
1738 | btrfs_set_super_cache_generation(super, root_item->generation); | 1735 | super->cache_generation = root_item->generation; |
1739 | if (test_bit(BTRFS_FS_UPDATE_UUID_TREE_GEN, &fs_info->flags)) | 1736 | if (test_bit(BTRFS_FS_UPDATE_UUID_TREE_GEN, &fs_info->flags)) |
1740 | btrfs_set_super_uuid_tree_generation(super, | 1737 | super->uuid_tree_generation = root_item->generation; |
1741 | root_item->generation); | ||
1742 | } | 1738 | } |
1743 | 1739 | ||
1744 | int btrfs_transaction_in_commit(struct btrfs_fs_info *info) | 1740 | int btrfs_transaction_in_commit(struct btrfs_fs_info *info) |