Hi! > > 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 > > Can you wire this up for blktests? Will try. > > + if (ret == -EOPNOTSUPP) { > > + struct queue_limits lim = queue_limits_start_update(lo->lo_queue); > > + > > + if (mode & FALLOC_FL_ZERO_RANGE) > > + lim.max_write_zeroes_sectors = 0; > > + > > + if (mode & FALLOC_FL_PUNCH_HOLE) { > > + lim.max_hw_discard_sectors = 0; > > + lim.discard_granularity = 0; > > + } > > + > > + queue_limits_commit_update(lo->lo_queue, &lim); > > Please split this out into a separate helper to keep it out of the > main fast path I/O handling. A little comment that we are > optimistically trying these if ->fallocate is support and might have > to paddle back here would also be useful. Will do. Do we need noinline attribute for the function as well or unlikely() in the if condition? > (and maybe one day we figure out a way for the file system to > advertise what fallocate modes it actually supports..) One of my ideas was to try fallocate() with zero size in the loop_reconfigure_limits() to see if we get EOPNOTSUPP but for that to work we would have to make sure that we do not bail early on zero size in the vfs layer... -- Cyril Hrubis chrubis@xxxxxxx