]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
block/bdev: enable large folio support for large logical block sizes
authorHannes Reinecke <hare@suse.de>
Fri, 21 Feb 2025 22:38:21 +0000 (14:38 -0800)
committerChristian Brauner <brauner@kernel.org>
Mon, 24 Feb 2025 10:44:44 +0000 (11:44 +0100)
Call mapping_set_folio_min_order() when modifying the logical block
size to ensure folios are allocated with the correct size.

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Reviewed-by: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Signed-off-by: Hannes Reinecke <hare@suse.de>
Link: https://lore.kernel.org/r/20250221223823.1680616-7-mcgrof@kernel.org
Reviewed-by: John Garry <john.g.garry@oracle.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Christian Brauner <brauner@kernel.org>
block/bdev.c

index 9d73a8fbf7f99712e4aead293e92734d25477abf..8aadf1f23cb4a268f67a46b7690bf51193a21338 100644 (file)
@@ -148,6 +148,8 @@ static void set_init_blocksize(struct block_device *bdev)
                bsize <<= 1;
        }
        BD_INODE(bdev)->i_blkbits = blksize_bits(bsize);
+       mapping_set_folio_min_order(BD_INODE(bdev)->i_mapping,
+                                   get_order(bsize));
 }
 
 int set_blocksize(struct file *file, int size)
@@ -169,6 +171,7 @@ int set_blocksize(struct file *file, int size)
        if (inode->i_blkbits != blksize_bits(size)) {
                sync_blockdev(bdev);
                inode->i_blkbits = blksize_bits(size);
+               mapping_set_folio_min_order(inode->i_mapping, get_order(size));
                kill_bdev(bdev);
        }
        return 0;