Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8abb2a5d authored by Kent Overstreet's avatar Kent Overstreet
Browse files

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: default avatarKent Overstreet <koverstreet@google.com>
parent a09ded8e
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -139,13 +139,17 @@ static const char *read_super(struct cache_sb *sb, struct block_device *bdev,
	if (bch_is_zero(sb->uuid, 16))
		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) {
	case BCACHE_SB_VERSION_BDEV:
		sb->block_size	= le16_to_cpu(s->block_size);
		sb->data_offset	= BDEV_DATA_START_DEFAULT;
		break;
	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);

		err = "Bad data offset";