Commit 8f5fd927 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 8757ae23 093e037c
...@@ -1519,6 +1519,7 @@ int btrfs_check_shared(struct btrfs_root *root, u64 inum, u64 bytenr) ...@@ -1519,6 +1519,7 @@ int btrfs_check_shared(struct btrfs_root *root, u64 inum, u64 bytenr)
if (!node) if (!node)
break; break;
bytenr = node->val; bytenr = node->val;
shared.share_count = 0;
cond_resched(); cond_resched();
} }
......
...@@ -1370,6 +1370,7 @@ static int find_bio_stripe(struct btrfs_raid_bio *rbio, ...@@ -1370,6 +1370,7 @@ static int find_bio_stripe(struct btrfs_raid_bio *rbio,
stripe_start = stripe->physical; stripe_start = stripe->physical;
if (physical >= stripe_start && if (physical >= stripe_start &&
physical < stripe_start + rbio->stripe_len && physical < stripe_start + rbio->stripe_len &&
stripe->dev->bdev &&
bio->bi_disk == stripe->dev->bdev->bd_disk && bio->bi_disk == stripe->dev->bdev->bd_disk &&
bio->bi_partno == stripe->dev->bdev->bd_partno) { bio->bi_partno == stripe->dev->bdev->bd_partno) {
return i; return i;
......
...@@ -423,7 +423,7 @@ static ssize_t btrfs_nodesize_show(struct kobject *kobj, ...@@ -423,7 +423,7 @@ static ssize_t btrfs_nodesize_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = to_fs_info(kobj); struct btrfs_fs_info *fs_info = to_fs_info(kobj);
return snprintf(buf, PAGE_SIZE, "%u\n", fs_info->nodesize); return snprintf(buf, PAGE_SIZE, "%u\n", fs_info->super_copy->nodesize);
} }
BTRFS_ATTR(, nodesize, btrfs_nodesize_show); BTRFS_ATTR(, nodesize, btrfs_nodesize_show);
...@@ -433,7 +433,8 @@ static ssize_t btrfs_sectorsize_show(struct kobject *kobj, ...@@ -433,7 +433,8 @@ static ssize_t btrfs_sectorsize_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = to_fs_info(kobj); struct btrfs_fs_info *fs_info = to_fs_info(kobj);
return snprintf(buf, PAGE_SIZE, "%u\n", fs_info->sectorsize); return snprintf(buf, PAGE_SIZE, "%u\n",
fs_info->super_copy->sectorsize);
} }
BTRFS_ATTR(, sectorsize, btrfs_sectorsize_show); BTRFS_ATTR(, sectorsize, btrfs_sectorsize_show);
...@@ -443,7 +444,8 @@ static ssize_t btrfs_clone_alignment_show(struct kobject *kobj, ...@@ -443,7 +444,8 @@ static ssize_t btrfs_clone_alignment_show(struct kobject *kobj,
{ {
struct btrfs_fs_info *fs_info = to_fs_info(kobj); struct btrfs_fs_info *fs_info = to_fs_info(kobj);
return snprintf(buf, PAGE_SIZE, "%u\n", fs_info->sectorsize); return snprintf(buf, PAGE_SIZE, "%u\n",
fs_info->super_copy->sectorsize);
} }
BTRFS_ATTR(, clone_alignment, btrfs_clone_alignment_show); BTRFS_ATTR(, clone_alignment, btrfs_clone_alignment_show);
......
...@@ -1722,23 +1722,19 @@ static void update_super_roots(struct btrfs_fs_info *fs_info) ...@@ -1722,23 +1722,19 @@ static void update_super_roots(struct btrfs_fs_info *fs_info)
super = fs_info->super_copy; super = fs_info->super_copy;
/* update latest btrfs_super_block::chunk_root refs */
root_item = &fs_info->chunk_root->root_item; root_item = &fs_info->chunk_root->root_item;
btrfs_set_super_chunk_root(super, root_item->bytenr); super->chunk_root = root_item->bytenr;
btrfs_set_super_chunk_root_generation(super, root_item->generation); super->chunk_root_generation = root_item->generation;
btrfs_set_super_chunk_root_level(super, root_item->level); super->chunk_root_level = root_item->level;
/* update latest btrfs_super_block::root refs */
root_item = &fs_info->tree_root->root_item; root_item = &fs_info->tree_root->root_item;
btrfs_set_super_root(super, root_item->bytenr); super->root = root_item->bytenr;
btrfs_set_super_generation(super, root_item->generation); super->generation = root_item->generation;
btrfs_set_super_root_level(super, root_item->level); super->root_level = root_item->level;
if (btrfs_test_opt(fs_info, SPACE_CACHE)) if (btrfs_test_opt(fs_info, SPACE_CACHE))
btrfs_set_super_cache_generation(super, root_item->generation); super->cache_generation = root_item->generation;
if (test_bit(BTRFS_FS_UPDATE_UUID_TREE_GEN, &fs_info->flags)) if (test_bit(BTRFS_FS_UPDATE_UUID_TREE_GEN, &fs_info->flags))
btrfs_set_super_uuid_tree_generation(super, super->uuid_tree_generation = root_item->generation;
root_item->generation);
} }
int btrfs_transaction_in_commit(struct btrfs_fs_info *info) int btrfs_transaction_in_commit(struct btrfs_fs_info *info)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment