bcache: Make sure blocksize isn't smaller than device blocksize
Sanity check to make sure we don't end up doing IO the device doesn't support. Signed-off-by: Kent Overstreet <koverstreet@google.com>
This commit is contained in:
@@ -139,13 +139,17 @@ static const char *read_super(struct cache_sb *sb, struct block_device *bdev,
|
|||||||
if (bch_is_zero(sb->uuid, 16))
|
if (bch_is_zero(sb->uuid, 16))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
sb->block_size = le16_to_cpu(s->block_size);
|
||||||
|
|
||||||
|
err = "Superblock block size smaller than device block size";
|
||||||
|
if (sb->block_size << 9 < bdev_logical_block_size(bdev))
|
||||||
|
goto err;
|
||||||
|
|
||||||
switch (sb->version) {
|
switch (sb->version) {
|
||||||
case BCACHE_SB_VERSION_BDEV:
|
case BCACHE_SB_VERSION_BDEV:
|
||||||
sb->block_size = le16_to_cpu(s->block_size);
|
|
||||||
sb->data_offset = BDEV_DATA_START_DEFAULT;
|
sb->data_offset = BDEV_DATA_START_DEFAULT;
|
||||||
break;
|
break;
|
||||||
case BCACHE_SB_VERSION_BDEV_WITH_OFFSET:
|
case BCACHE_SB_VERSION_BDEV_WITH_OFFSET:
|
||||||
sb->block_size = le16_to_cpu(s->block_size);
|
|
||||||
sb->data_offset = le64_to_cpu(s->data_offset);
|
sb->data_offset = le64_to_cpu(s->data_offset);
|
||||||
|
|
||||||
err = "Bad data offset";
|
err = "Bad data offset";
|
||||||
|
|||||||
Reference in New Issue
Block a user