From 85ccc1d42555c22f8e5547947b3b61507aaba3a4 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Tue, 9 Jun 2015 15:53:20 +0200 Subject: [PATCH] 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 --- libblkid/src/superblocks/nilfs.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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; -- 2.47.3