mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
affs: handle set_blocksize failures
affs uses buffer_heads, which don't handle block size > PAGE_SIZE well.
Without this, mounting we will hit the
BUG_ON(offset >= folio_size(folio));
in folio_set_bh on the first __bread_gfp call.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://patch.msgid.link/20260511071701.2456211-7-hch@lst.de
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
This commit is contained in:
committed by
Christian Brauner
parent
7597d42a25
commit
0861182af5
@@ -227,11 +227,6 @@ static inline bool affs_validblock(struct super_block *sb, int block)
|
||||
block < AFFS_SB(sb)->s_partition_size);
|
||||
}
|
||||
|
||||
static inline void
|
||||
affs_set_blocksize(struct super_block *sb, int size)
|
||||
{
|
||||
sb_set_blocksize(sb, size);
|
||||
}
|
||||
static inline struct buffer_head *
|
||||
affs_bread(struct super_block *sb, int block)
|
||||
{
|
||||
|
||||
@@ -358,7 +358,8 @@ static int affs_fill_super(struct super_block *sb, struct fs_context *fc)
|
||||
size = bdev_nr_sectors(sb->s_bdev);
|
||||
pr_debug("initial blocksize=%d, #blocks=%d\n", 512, size);
|
||||
|
||||
affs_set_blocksize(sb, PAGE_SIZE);
|
||||
if (!sb_set_blocksize(sb, PAGE_SIZE))
|
||||
return -EINVAL;
|
||||
/* Try to find root block. Its location depends on the block size. */
|
||||
|
||||
i = bdev_logical_block_size(sb->s_bdev);
|
||||
@@ -374,7 +375,8 @@ static int affs_fill_super(struct super_block *sb, struct fs_context *fc)
|
||||
if (ctx->root_block < 0)
|
||||
sbi->s_root_block = (ctx->reserved + size - 1) / 2;
|
||||
pr_debug("setting blocksize to %d\n", blocksize);
|
||||
affs_set_blocksize(sb, blocksize);
|
||||
if (!sb_set_blocksize(sb, blocksize))
|
||||
return -EINVAL;
|
||||
sbi->s_partition_size = size;
|
||||
|
||||
/* The root block location that was calculated above is not
|
||||
|
||||
Reference in New Issue
Block a user