From: Omar Sandoval <osandov@xxxxxx> The request queue created when we create a loop device has the default logical block size of 512. When we associate the device with an fd, we set the block size on the block_device but don't update the logical block size of the request_queue. This makes it impossibe to use direct I/O with a backing file on a device with a block size >512, as the following check in __loop_update_dio() fails: sb_bsize = bdev_logical_block_size(inode->i_sb->s_bdev); if (queue_logical_block_size(lo->lo_queue) >= sb_bsize && ... Fix it by updating the logical block size when we set the fd. Signed-off-by: Omar Sandoval <osandov@xxxxxx> --- drivers/block/loop.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/block/loop.c b/drivers/block/loop.c index cc981f34e017..1bb22903ad1a 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -941,6 +941,7 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode, /* let user-space know about the new size */ kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE); + blk_queue_logical_block_size(lo->lo_queue, lo_blocksize); set_blocksize(bdev, lo_blocksize); lo->lo_state = Lo_bound; -- 2.12.2