Skip to content

Commit 4ce37fe

Browse files
Christoph Hellwigaxboe
authored andcommitted
loop: also use the default block size from an underlying block device
Fix the code in loop_reconfigure_limits to pick a default block size for O_DIRECT file descriptors to also work when the loop device sits on top of a block device and not just on a regular file on a block device based file system. Signed-off-by: Christoph Hellwig <[email protected]> Reviewed-by: Hannes Reinecke <[email protected]> Reviewed-by: Bart Van Assche <[email protected]> Reviewed-by: Damien Le Moal <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jens Axboe <[email protected]>
1 parent a17ece7 commit 4ce37fe

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

drivers/block/loop.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -988,10 +988,16 @@ static int loop_reconfigure_limits(struct loop_device *lo, unsigned short bsize)
988988
{
989989
struct file *file = lo->lo_backing_file;
990990
struct inode *inode = file->f_mapping->host;
991+
struct block_device *backing_bdev = NULL;
991992
struct queue_limits lim;
992993

994+
if (S_ISBLK(inode->i_mode))
995+
backing_bdev = I_BDEV(inode);
996+
else if (inode->i_sb->s_bdev)
997+
backing_bdev = inode->i_sb->s_bdev;
998+
993999
if (!bsize)
994-
bsize = loop_default_blocksize(lo, inode->i_sb->s_bdev);
1000+
bsize = loop_default_blocksize(lo, backing_bdev);
9951001

9961002
lim = queue_limits_start_update(lo->lo_queue);
9971003
lim.logical_block_size = bsize;

0 commit comments

Comments
 (0)