On Thu, Jun 30, 2022 at 04:56:37PM +0900, Dominique MARTINET wrote: > Dominique MARTINET wrote on Thu, Jun 30, 2022 at 09:41:01AM +0900: > > > I just tried your program, against the qemu/vmdk image you mentioned in the > > > first message, and after over an hour running I couldn't trigger any short > > > reads - this was on the integration misc-next branch. > > > > > > It's possible that to trigger the issue, one needs a particular file extent > > > layout, which will not be the same as yours after downloading and converting > > > the file. > > > > Ugh. I've also been unable to reproduce on a test fs, despite filling it > > with small files and removing some to artificially fragment the image, > > so I guess I really do have something on these "normal" filesystems... > > > > Is there a way to artificially try to recreate weird layouts? > > I've also tried btrfs send|receive, but while it did preserve reflinked > > extents it didn't seem to do the trick. > > I take that one back, I was able to reproduce with my filesystem riddled > with holes. > I was just looking at another distantly related problem that happened > with cp, but trying with busybox cat didn't reproduce it and got > confused: > https://lore.kernel.org/linux-btrfs/Yr1QwVW+sHWlAqKj@xxxxxxxxxxxxxxxxx/T/#u > > > Anyway, here's a pretty ugly reproducer to create a file that made short > reads on a brand new FS: > > # 50GB FS -> fill with 50GB of small files and remove 1/10 > $ mkdir /mnt/d.{00..50} > $ for i in {00000..49999}; do > dd if=/dev/urandom of=/mnt/d.${i:0:2}/test.$i bs=1M count=1 status=none; > done > $ rm -f /mnt/d.*/*2 > $ btrfs subvolume create ~/sendme > $ cp --reflink=always bigfile ~/sendme/bigfile > $ btrfs property set ~/sendme ro true > $ btrfs send ~/sendme | btrfs receive /mnt/receive > > and /mnt/receive/bigfile did the trick for me. > This probably didn't need the send/receive at all, I just didn't try > plain copy again. > > Anyway, happy to test any patch as said earlier, it's probably not worth > spending too much time on trying to reproduce on your end at this > point... That's perfect. So here's a patch for you to try: https://gist.githubusercontent.com/fdmanana/4b24d6b30983e956bb1784a44873c5dd/raw/572490b127071bf827c3bc05dd58dcb7bcff373a/dio.patch Thanks! > > -- > Dominique