On Wed, Jul 8, 2020 at 3:17 PM Jan Kara <jack@xxxxxxx> wrote: > > Hi! > > On Mon 15-06-20 18:53:11, Filipe Manana wrote: > > I found out a bug in btrfs where a RWF_NOWRITE does not fail if we > > write to a range that starts with an extent followed by holes (since > > it requires allocating extent(s)). > > > > When writing a test case for fstests I noticed xfs fails with -EAGAIN > > as expected, but ext4 succeeds just like btrfs currently does: > > > > mkfs.ext4 -F /dev/sdb > > mount /dev/sdb /mnt > > > > xfs_io -f -d -c "pwrite -S 0xab -b 256K 0 256K" /mnt/bar > > xfs_io -c "fpunch 64K 64K" /mnt/bar > > sync > > xfs_io -d -c "pwrite -N -V 1 -b 128K -S 0xfe 0 128K" /mnt/bar > > > > Is this a known bug? Or is there a technical reason that makes it too > > expensive to check no extents will need to be allocated? > > Thanks for report! This is actually a fallout of the conversion of ext4 > direct IO code to iomap (commit 378f32bab37 "ext4: introduce direct I/O > write using iomap infrastructure"). I'll send a fix. Thanks for looking into it Jan. I just wrote a test case for fstests that exercises that case and others where btrfs used to fail. And I think I found some regression happened in ext4 in the meanwhile. Basically a write into a fallocated extent that starts at eof now fails with -EAGAIN in ext4 on a 5.9-rc6 kernel at least, but it used to work when I found the bug in btrfs [1] (with a 5.7 kernel iirc). [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4b1946284dd6641afdb9457101056d9e6ee6204c That new test case: https://patchwork.kernel.org/project/fstests/patch/aa8318c5beb380a9e99142d1b5e776b739d04bdb.1602774113.git.fdmanana@xxxxxxxx/ Thanks. > > Honza > > -- > Jan Kara <jack@xxxxxxxx> > SUSE Labs, CR -- Filipe David Manana, “Whether you think you can, or you think you can't — you're right.”