On Tue, May 14, 2019 at 03:58:04PM +0200, Johannes Thumshirn wrote: > inspect-internal dump-superblock's load_and_dump_sb() already reads a > super block from a file descriptor and places it into a 'struct > btrfs_super_block'. > > For inspect-internal dump-csum we need this super block as well but don't > care about printing it. > > Separate the read from the dump phase so we can re-use it elsewhere. > > Signed-off-by: Johannes Thumshirn <jthumsh...@suse.de> > --- > - Fix double sizeof() @!$#$ (Nikolay) > > cmds-inspect-dump-super.c | 15 ++++++--------- > utils.c | 15 +++++++++++++++ > utils.h | 2 ++ > 3 files changed, 23 insertions(+), 9 deletions(-) > > diff --git a/cmds-inspect-dump-super.c b/cmds-inspect-dump-super.c > index 7815c863f2ed..879f979f526a 100644 > --- a/cmds-inspect-dump-super.c > +++ b/cmds-inspect-dump-super.c > @@ -477,16 +477,13 @@ static void dump_superblock(struct btrfs_super_block > *sb, int full) > static int load_and_dump_sb(char *filename, int fd, u64 sb_bytenr, int full, > int force) > { > - u8 super_block_data[BTRFS_SUPER_INFO_SIZE]; > - struct btrfs_super_block *sb; > + struct btrfs_super_block sb; > u64 ret; > > - sb = (struct btrfs_super_block *)super_block_data; > - > - ret = pread64(fd, super_block_data, BTRFS_SUPER_INFO_SIZE, sb_bytenr); > - if (ret != BTRFS_SUPER_INFO_SIZE) { > + ret = load_sb(fd, sb_bytenr, &sb); > + if (ret) {
This is buggy. We need to copy the whole BTRFS_SUPER_INFO_SIZE and calculate the checksums over this area. Sorry, Johannes -- Johannes Thumshirn SUSE Labs Filesystems jthumsh...@suse.de +49 911 74053 689 SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: Felix Imendörffer, Mary Higgins, Sri Rasiah HRB 21284 (AG Nürnberg) Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850