summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiao Xie <miaox@cn.fujitsu.com>2014-07-24 11:37:09 +0800
committerChris Mason <clm@fb.com>2014-09-17 13:37:44 -0700
commit5f546063cee93047af90cf2756e023da9f9fca51 (patch)
treea8ed537e39112c1d6a07d41f33b2f83cb56aa345
parent17a9be2f28595945ec9bfac0dd15b86891c1f1de (diff)
downloadop-kernel-dev-5f546063cee93047af90cf2756e023da9f9fca51.zip
op-kernel-dev-5f546063cee93047af90cf2756e023da9f9fca51.tar.gz
Btrfs: fix wrong generation check of super block on a seed device
The super block generation of the seed devices is not the same as the filesystem which sprouted from them because we don't update the super block on the seed devices when we change that new filesystem. So we should not use the generation of that new filesystem to check the super block generation on the seed devices, Fix it. Signed-off-by: Miao Xie <miaox@cn.fujitsu.com> Reviewed-by: David Sterba <dsterba@suse.cz> Signed-off-by: Chris Mason <clm@fb.com>
-rw-r--r--fs/btrfs/scrub.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
index d1aa95a..72c8981 100644
--- a/fs/btrfs/scrub.c
+++ b/fs/btrfs/scrub.c
@@ -2832,7 +2832,11 @@ static noinline_for_stack int scrub_supers(struct scrub_ctx *sctx,
if (test_bit(BTRFS_FS_STATE_ERROR, &root->fs_info->fs_state))
return -EIO;
- gen = root->fs_info->last_trans_committed;
+ /* Seed devices of a new filesystem has their own generation. */
+ if (scrub_dev->fs_devices != root->fs_info->fs_devices)
+ gen = scrub_dev->generation;
+ else
+ gen = root->fs_info->last_trans_committed;
for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {
bytenr = btrfs_sb_offset(i);
OpenPOWER on IntegriCloud