dm cache metadata: do not allow the data block size to change
authorMike Snitzer <snitzer@redhat.com>
Mon, 14 Jul 2014 20:59:39 +0000 (16:59 -0400)
committerMike Snitzer <snitzer@redhat.com>
Tue, 15 Jul 2014 18:07:50 +0000 (14:07 -0400)
The block size for the dm-cache's data device must remained fixed for
the life of the cache.  Disallow any attempt to change the cache's data
block size.

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Acked-by: Joe Thornber <ejt@redhat.com>
Cc: stable@vger.kernel.org
drivers/md/dm-cache-metadata.c

index 4ead4ba606562b0c33d750064660a4effe0594ea..d2899e7eb3aaf317a93d91978936dac5e3c7f132 100644 (file)
@@ -425,6 +425,15 @@ static int __open_metadata(struct dm_cache_metadata *cmd)
 
        disk_super = dm_block_data(sblock);
 
+       /* Verify the data block size hasn't changed */
+       if (le32_to_cpu(disk_super->data_block_size) != cmd->data_block_size) {
+               DMERR("changing the data block size (from %u to %llu) is not supported",
+                     le32_to_cpu(disk_super->data_block_size),
+                     (unsigned long long)cmd->data_block_size);
+               r = -EINVAL;
+               goto bad;
+       }
+
        r = __check_incompat_features(disk_super, cmd);
        if (r < 0)
                goto bad;