snapshots are breaking shred

ericblake@comcast.net ericblake@comcast.net
Wed Feb 9 21:24:00 GMT 2005


With coreutils 5.3.0-2 and various snapshots, I am seeing regressions in shred(1)caused by cygwin changes:

1.5.12:
$ echo a > a
$ shred --remove a
$ echo $?
0
$ ls
$

20050131:
$ echo a > a
$ shred --remove a
shred: .: fsync failed: Permission denied
shred: .: fsync failed: Permission denied
$ echo $?
1
$ ls
$

20050206 and 20050208:
$ echo a > a
$ shred --remove a
shred: a: error truncating
$ echo $?
1
$ ls
a
$ uname -a
CYGWIN_NT-5.0 eblake 1.5.13s(0.118/4/2) 20050208 14:21:58 i686 unknown unknown Cygwin
$

20050206 introduced Corinna's changes to ftruncate, which might explain the current failure.  I don't know when fsync regressed between 1.5.12 and 20050131, and it is probably still broken in 20050208 since shred bypasses the final fsync on . after detecting the earlier error on ftruncate.  The following strace chunk shows that fd 3 (assigned to "./a") was open for writing as evidenced by the successful writev, so ftruncate should have succeeded instead of dying with EBADF:

   71  127064 [main] shred 13776 writev: 1024 = write (3, 0x22A2F0, 1), errno 0
  417  127481 [main] shred 13776 fhandler_base::lseek: lseek (/tmp/shred.test/a, 0, 1)
   70  127551 [main] shred 13776 fhandler_base::lseek: setting file pointer to 0 (high), 0 (low)
   68  127619 [main] shred 13776 fhandler_base::lseek: lseek (/tmp/shred.test/a, 0, 0)
   63  127682 [main] shred 13776 fhandler_base::lseek: setting file pointer to 0 (high), 0 (low)
   65  127747 [main] shred 13776 ftruncate64: -1 = ftruncate (3, 0)
  612  128359 [main] shred 13776 fhandler_base::write: binary write
shred:   573  128932 [main] shred 13776 fhandler_base::write: binary write
a: error truncating

I am also seeing the ftruncate errors when running automake, but since that invokes a perl script with many forks() before the ftruncate(), compared to the single process of shred, it was easier to use shred as the example of reproducibility during debugging.

$ automake Makefile
autom4te: cannot truncate autom4te.cache/requests at 0: Bad file descriptor
automake: autoconf failed with exit status: 1

--
Eric Blake

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list