loop: fix zero sized loop for block special file
authorYu Kuai <yukuai3@huawei.com>
Mon, 25 Aug 2025 09:32:05 +0000 (17:32 +0800)
committerJens Axboe <axboe@kernel.dk>
Mon, 25 Aug 2025 13:46:57 +0000 (07:46 -0600)
commitd14469ed7c00314fe8957b2841bda329e4eaf4ab
treec13f586824ecdf1fe9bfffb66d5c51970e63f8c5
parent370ac285f23aecae40600851fb4a1a9e75e50973
loop: fix zero sized loop for block special file

By default, /dev/sda is block special file from devtmpfs, getattr will
return file size as zero, causing loop failed for raw block device.

We can add bdev_statx() to return device size, however this may
introduce changes that are not acknowledged by user. Fix this problem by
reverting changes for block special file, file mapping host is set to
bdev inode while opening, and use i_size_read() directly to get device
size.

Fixes: 47b71abd5846 ("loop: use vfs_getattr_nosec for accurate file size")
Reported-by: kernel test robot <oliver.sang@intel.com>
Closes: https://lore.kernel.org/oe-lkp/202508200409.b2459c02-lkp@intel.com
Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20250825093205.3684121-1-yukuai1@huaweicloud.com
[axboe: fix spelling error]
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/loop.c