Btrfs: add parent_transid parameter to veirfy_level_key
authorLiu Bo <bo.liu@linux.alibaba.com>
Fri, 18 May 2018 02:59:35 +0000 (10:59 +0800)
committerDavid Sterba <dsterba@suse.com>
Wed, 30 May 2018 14:46:43 +0000 (16:46 +0200)
commitff76a864cc94d055b4239fb2cd13e8e633dc7aac
tree0248b26f1b960a82c18a1f4348124ffa0c9adc3e
parent9593bf49675efc5567c9bdb8c51cdb204b6f85b3
Btrfs: add parent_transid parameter to veirfy_level_key

As verify_level_key() is checked after verify_parent_transid(), i.e.

if (verify_parent_transid())
   ret = -EIO;
else if (verify_level_key())
   ret = -EUCLEAN;

if parent_transid is 0, verify_parent_transid() skips verifying
parent_transid and considers eb as valid, and if verify_level_key()
reports something wrong, we're not going to know if it's caused by
corrupted metadata or non-checkecd eb (e.g. stale eb).

The stale eb can be from an outdated raid1 mirror after a degraded
mount, see eg "btrfs: fix reading stale metadata blocks after degraded
raid1 mounts" (02a3307aa9c20b4f66262) for more details.

@parent_transid is able to tell whether the eb's generation has been
verified by the caller.

Signed-off-by: Liu Bo <bo.liu@linux.alibaba.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c