From: Karel Zak Date: Tue, 9 Jun 2015 13:53:20 +0000 (+0200) Subject: libblkid: (nilfs2) check size for backup superblock only X-Git-Tag: v2.27-rc1~154 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=85ccc1d42555c22f8e5547947b3b61507aaba3a4;p=thirdparty%2Futil-linux.git libblkid: (nilfs2) check size for backup superblock only The size of the device seems irrelevant for the primary superblock. The primary superblock is stored on fixed offset, possible collision between last partition and whole-disk is possible only for backup superblock only. Signed-off-by: Karel Zak --- diff --git a/libblkid/src/superblocks/nilfs.c b/libblkid/src/superblocks/nilfs.c index 14a4b74c63..011ad95216 100644 --- a/libblkid/src/superblocks/nilfs.c +++ b/libblkid/src/superblocks/nilfs.c @@ -67,7 +67,7 @@ struct nilfs_super_block { #define NILFS_SB_OFFSET 0x400 #define NILFS_SBB_OFFSET(_sz) ((((_sz) / 0x200) - 8) * 0x200) -static int nilfs_valid_sb(blkid_probe pr, struct nilfs_super_block *sb) +static int nilfs_valid_sb(blkid_probe pr, struct nilfs_super_block *sb, int is_bak) { static unsigned char sum[4]; const int sumoff = offsetof(struct nilfs_super_block, s_sum); @@ -77,7 +77,8 @@ static int nilfs_valid_sb(blkid_probe pr, struct nilfs_super_block *sb) if (!sb || le16_to_cpu(sb->s_magic) != NILFS_SB_MAGIC) return 0; - if (sb->s_dev_size != pr->size) + if (is_bak && blkid_probe_is_wholedisk(pr) && + sb->s_dev_size != pr->size) return 0; bytes = le16_to_cpu(sb->s_bytes); @@ -110,8 +111,8 @@ static int probe_nilfs2(blkid_probe pr, const struct blkid_idmag *mag) * Compare two super blocks and set 1 in swp if the secondary * super block is valid and newer. Otherwise, set 0 in swp. */ - valid[0] = nilfs_valid_sb(pr, sbp); - valid[1] = nilfs_valid_sb(pr, sbb); + valid[0] = nilfs_valid_sb(pr, sbp, 0); + valid[1] = nilfs_valid_sb(pr, sbb, 1); if (!valid[0] && !valid[1]) return 1;