On 2/9/15 2:03 PM, Josef Bacik wrote:
> The METADUMP super flag makes us skip doing the chunk tree reading which isn't
> helpful for the new restore since we have a valid chunk tree.  But we still 
> want
> to have a way for the kernel to know that this is a metadump restore so it
> doesn't do things like verify data checksums.  We also want to skip some of 
> the
> device extent checks in fsck since those will obviously not match.  Thanks,

coverity points out that the "metadump_v2" flag is never set to anything but 0.

# git show 797a937e | grep metadump_v2
    Btrfs-progs: Introduce metadump_v2
+       int metadump_v2 = 0;
+                   (!metadump_v2 &&
+       if (metadump_v2)
# 

is that ... intentional?

-Eric


> Signed-off-by: Josef Bacik <[email protected]>
> ---
>  btrfs-image.c | 3 +++
>  cmds-check.c  | 9 +++++++--
>  ctree.h       | 1 +
>  3 files changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/btrfs-image.c b/btrfs-image.c
> index ea85542..feb4a62 100644
> --- a/btrfs-image.c
> +++ b/btrfs-image.c
> @@ -1455,6 +1455,7 @@ static int update_super(struct mdrestore_struct *mdres, 
> u8 *buffer)
>       struct btrfs_chunk *chunk;
>       struct btrfs_disk_key *disk_key;
>       struct btrfs_key key;
> +     u64 flags = btrfs_super_flags(super);
>       u32 new_array_size = 0;
>       u32 array_size;
>       u32 cur = 0;
> @@ -1510,6 +1511,8 @@ static int update_super(struct mdrestore_struct *mdres, 
> u8 *buffer)
>       if (mdres->clear_space_cache)
>               btrfs_set_super_cache_generation(super, 0);
>  
> +     flags |= BTRFS_SUPER_FLAG_METADUMP_V2;
> +     btrfs_set_super_flags(super, flags);
>       btrfs_set_super_sys_array_size(super, new_array_size);
>       csum_block(buffer, BTRFS_SUPER_INFO_SIZE);
>  
> diff --git a/cmds-check.c b/cmds-check.c
> index 2163823..ffdfbf2 100644
> --- a/cmds-check.c
> +++ b/cmds-check.c
> @@ -7426,6 +7426,7 @@ static int check_chunk_refs(struct chunk_record 
> *chunk_rec,
>       u64 devid;
>       u64 offset;
>       u64 length;
> +     int metadump_v2 = 0;
>       int i;
>       int ret = 0;
>  
> @@ -7438,7 +7439,8 @@ static int check_chunk_refs(struct chunk_record 
> *chunk_rec,
>                                              cache);
>               if (chunk_rec->length != block_group_rec->offset ||
>                   chunk_rec->offset != block_group_rec->objectid ||
> -                 chunk_rec->type_flags != block_group_rec->flags) {
> +                 (!metadump_v2 &&
> +                  chunk_rec->type_flags != block_group_rec->flags)) {
>                       if (!silent)
>                               fprintf(stderr,
>                                       "Chunk[%llu, %u, %llu]: length(%llu), 
> offset(%llu), type(%llu) mismatch with block group[%llu, %u, %llu]: 
> offset(%llu), objectid(%llu), flags(%llu)\n",
> @@ -7472,6 +7474,9 @@ static int check_chunk_refs(struct chunk_record 
> *chunk_rec,
>               ret = 1;
>       }
>  
> +     if (metadump_v2)
> +             return ret;
> +
>       length = calc_stripe_length(chunk_rec->type_flags, chunk_rec->length,
>                                   chunk_rec->num_stripes);
>       for (i = 0; i < chunk_rec->num_stripes; ++i) {
> @@ -7538,7 +7543,7 @@ int check_chunks(struct cache_tree *chunk_cache,
>                                        cache);
>               err = check_chunk_refs(chunk_rec, block_group_cache,
>                                      dev_extent_cache, silent);
> -             if (err)
> +             if (err < 0)
>                       ret = err;
>               if (err == 0 && good)
>                       list_add_tail(&chunk_rec->list, good);
> diff --git a/ctree.h b/ctree.h
> index 2d2988b..be30cb6 100644
> --- a/ctree.h
> +++ b/ctree.h
> @@ -309,6 +309,7 @@ static inline unsigned long btrfs_chunk_item_size(int 
> num_stripes)
>  #define BTRFS_HEADER_FLAG_RELOC                      (1ULL << 1)
>  #define BTRFS_SUPER_FLAG_SEEDING             (1ULL << 32)
>  #define BTRFS_SUPER_FLAG_METADUMP            (1ULL << 33)
> +#define BTRFS_SUPER_FLAG_METADUMP_V2         (1ULL << 34)
>  
>  #define BTRFS_BACKREF_REV_MAX                256
>  #define BTRFS_BACKREF_REV_SHIFT              56
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to