linux/drivers/block
Cyril Hrubis 5f75e081ab loop: Disable fallocate() zero and discard if not supported
If fallcate is implemented but zero and discard operations are not
supported by the filesystem the backing file is on we continue to fill
dmesg with errors from the blk_mq_end_request() since each time we call
fallocate() on the loop device the EOPNOTSUPP error from lo_fallocate()
ends up propagated into the block layer. In the end syscall succeeds
since the blkdev_issue_zeroout() falls back to writing zeroes which
makes the errors even more misleading and confusing.

How to reproduce:

1. make sure /tmp is mounted as tmpfs
2. dd if=/dev/zero of=/tmp/disk.img bs=1M count=100
3. losetup /dev/loop0 /tmp/disk.img
4. mkfs.ext2 /dev/loop0
5. dmesg |tail

[710690.898214] operation not supported error, dev loop0, sector 204672 op 0x9:(WRITE_ZEROES) flags 0x8000800 phys_seg 0 prio class 0
[710690.898279] operation not supported error, dev loop0, sector 522 op 0x9:(WRITE_ZEROES) flags 0x8000800 phys_seg 0 prio class 0
[710690.898603] operation not supported error, dev loop0, sector 16906 op 0x9:(WRITE_ZEROES) flags 0x8000800 phys_seg 0 prio class 0
[710690.898917] operation not supported error, dev loop0, sector 32774 op 0x9:(WRITE_ZEROES) flags 0x8000800 phys_seg 0 prio class 0
[710690.899218] operation not supported error, dev loop0, sector 49674 op 0x9:(WRITE_ZEROES) flags 0x8000800 phys_seg 0 prio class 0
[710690.899484] operation not supported error, dev loop0, sector 65542 op 0x9:(WRITE_ZEROES) flags 0x8000800 phys_seg 0 prio class 0
[710690.899743] operation not supported error, dev loop0, sector 82442 op 0x9:(WRITE_ZEROES) flags 0x8000800 phys_seg 0 prio class 0
[710690.900015] operation not supported error, dev loop0, sector 98310 op 0x9:(WRITE_ZEROES) flags 0x8000800 phys_seg 0 prio class 0
[710690.900276] operation not supported error, dev loop0, sector 115210 op 0x9:(WRITE_ZEROES) flags 0x8000800 phys_seg 0 prio class 0
[710690.900546] operation not supported error, dev loop0, sector 131078 op 0x9:(WRITE_ZEROES) flags 0x8000800 phys_seg 0 prio class 0

This patch changes the lo_fallocate() to clear the flags for zero and
discard operations if we get EOPNOTSUPP from the backing file fallocate
callback, that way we at least stop spewing errors after the first
unsuccessful try.

CC: Jan Kara <jack@suse.cz>
Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20240613163817.22640-1-chrubis@suse.cz
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2024-06-14 06:21:25 -06:00
..
aoe aoe: fix the potential use-after-free problem in aoecmd_cfg_pkts 2024-03-06 08:32:46 -07:00
drbd for-6.9/block-20240310 2024-03-11 11:43:44 -07:00
mtip32xx mtip: pass queue_limits to blk_mq_alloc_disk 2024-02-19 16:59:31 -07:00
null_blk null_blk: fix validation of block size 2024-06-05 12:12:54 -06:00
rnbd tracing/treewide: Remove second parameter of __assign_str() 2024-05-22 20:14:47 -04:00
xen-blkback xen: port block device access to file 2024-02-25 12:05:23 +01:00
zram getting rid of bogus set_blocksize() uses, switching it 2024-05-21 08:34:51 -07:00
amiflop.c block: pass a queue_limits argument to blk_mq_alloc_disk 2024-02-13 08:56:59 -07:00
ataflop.c block: pass a queue_limits argument to blk_mq_alloc_disk 2024-02-13 08:56:59 -07:00
brd.c brd: implement discard support 2024-05-13 21:47:51 -06:00
floppy.c floppy: remove duplicated code in redo_fd_request() 2024-03-18 20:19:56 -06:00
Kconfig block: ublk: switch to ioctl command encoding 2023-04-18 20:13:30 -06:00
loop.c loop: Disable fallocate() zero and discard if not supported 2024-06-14 06:21:25 -06:00
Makefile Revert "pktcdvd: remove driver." 2023-01-04 14:44:13 -07:00
n64cart.c n64cart: pass queue_limits to blk_mq_alloc_disk 2024-02-19 16:58:24 -07:00
nbd.c nbd: Remove __force casts 2024-06-12 14:47:07 -06:00
pktcdvd.c set_blocksize(): switch to passing struct file * 2024-05-02 17:39:44 -04:00
ps3disk.c ps3disk: pass queue_limits to blk_mq_alloc_disk 2024-02-19 16:59:31 -07:00
ps3vram.c block: pass a queue_limits argument to blk_alloc_disk 2024-02-19 16:58:23 -07:00
rbd_types.h libceph, rbd: replace zero-length array with flexible-array 2020-06-01 13:22:53 +02:00
rbd.c rbd: pass queue_limits to blk_mq_alloc_disk 2024-02-19 16:59:31 -07:00
sunvdc.c - Kuan-Wei Chiu has developed the well-named series "lib min_heap: Min 2024-03-14 18:03:09 -07:00
swim3.c block: pass a queue_limits argument to blk_mq_alloc_disk 2024-02-13 08:56:59 -07:00
swim_asm.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
swim.c block/swim: Convert to platform remove callback returning void 2024-03-08 09:28:04 -07:00
ublk_drv.c ublk_drv: set DMA alignment mask to 3 2024-05-13 17:51:06 -06:00
virtio_blk.c virtio: features, fixes, cleanups 2024-05-23 12:04:36 -07:00
xen-blkfront.c xen-blkfront: atomically update queue limits 2024-02-27 09:33:08 -07:00
z2ram.c block: pass a queue_limits argument to blk_mq_alloc_disk 2024-02-13 08:56:59 -07:00