On Tue, Jan 14, 2025 at 7:19 AM Brian Inglis via Cygwin <cygwin@cygwin.com> wrote: > On 2025-01-13 13:10, Roland Mainz via Cygwin wrote: > > I just hit an endless loop with /usr/bin/cp from "coreutils" version > > 9.5-1 copying a larger *.pdb file (it seems that only this specific > > file is affected...) from Visual Studio 19. > > > > Using strace -p $pid_of_cp I get this output: > > ---- snip ---- > > ... > > 212 11917852 [main] cp 1319 fhandler_base::lseek: setting file > > pointer to 1708032 > > 200 11918052 [main] cp 1319 lseek: 1708032 = lseek(4, 1708032, 3) > > 239 11918291 [main] cp 1319 fhandler_base::lseek: setting file > > pointer to 1708032 > > 266 11918557 [main] cp 1319 lseek: 1708032 = lseek(4, 1708032, 4) > > 160 11918717 [main] cp 1319 fhandler_base::lseek: setting file > > pointer to 1708032 [snip] > > ... > > ---- snip ---- > > This never stops, even after a couple of hours, but cp(1) can be > > killed with <CTRL-C> > > > > Downgrading to "coreutils" version 9.0-1 fixes the problem. > > > > Cygwin version itself is > > "CYGWIN_NT-10.0-19045 chickenmonster 3.6.0-0.304.g264544bf72f6.x86_64 > > 2025-01-13 10:15 UTC x86_64 Cygwin" > > The command is not simply looping, it is repeating 4 SEEK_HOLE, 0 SEEK_SET, 3 > SEEK_DATA, at the same file offset, which looks like some kind of retry cycle, > but each of the operations are succeeding. > > What is the exact command you are running and what are the source and target > filesystems?
See https://nrubsig.kpaste.net/70f1c8 > What is the exact size of the file and what device type is it on: SSD or HDD? "Virtual SSD", which is VMware's NVME emulation > What is the allocation size of the file and how many 4KB holes (zeroed blocks) > are in the file? > > Could you please try running the command under strace to see what it is doing > before it gets in to that cycle? See https://nrubsig.kpaste.net/70f1c8 for the strace log. I think I found the problem: The *.pdb file uses NTFS compression: ---- snip ---- /bin/winfsinfo filebasicinfo "$(cygpath -w $PWD/../build.vc19/x64/Debug/nfs41_driver.pdb)" ( filename='C:\cygwin64\home\roland_mainz\work\msnfs41_uidmapping\ms-nfs41-client-kofemannvacation\build.vc19\x64\Debug\nfs41_driver.pdb' CreationTime=133812707624654816 LastAccessTime=133813220892976366 LastWriteTime=133812707639811081 ChangeTime=133812707639811081 typeset -a FileAttributes=( FILE_ATTRIBUTE_ARCHIVE FILE_ATTRIBUTE_COMPRESSED ) ) ---- snip ---- If I remove the "FILE_ATTRIBUTE_COMPRESSED" flag /bin/cp works without problems. I think the issues here are: 1. Coreutils 9.5-1 /bin/cp erroneously assumes that a file is sparse if the number of blocks is smaller than $((filesize / fs_blocksize)) - but in this case the file is NOT sparse, just compressed. 2. The loop to copy a sparse file is faulty because there are no holes in that file. That itself is IMHO already a bad idea to have a separate codepath for sparse files, just the normal codepath should use SEEK_HOLE and just skip those in the destination ---- Bye, Roland -- __ . . __ (o.\ \/ /.o) roland.ma...@nrubsig.org \__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer /O /==\ O\ TEL +49 641 3992797 (;O/ \/ \O;) -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple