bug-tar
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

GNU tar blocks forever on futex() ?


From: Bob Proulx
Subject: GNU tar blocks forever on futex() ?
Date: Wed, 11 Nov 2020 15:33:05 -0700

Strange problem that hopefully I will be able to get some wisdom
about.  On download0.savannah.gnu.org running an older Trisquel (which
I need to upgrade but life and time keeps everything from happening
all at once) with GNU tar 1.27.1 installed:

    $ tar --version
    tar (GNU tar) 1.27.1

I am having an odd problem with tar.  I made a tar archive of a dozen
webm files to copy as a single file from a different Ubuntu system
over to download0 where I tried to un-tar them.  For $REASONS I
created and copied the tar file like this.

    rwplocal@download0:/srv/audio-video/rwptmp$ ssh -n $user@$ipaddr tar cvf - 
audio-video-rms > audio-video-rms.tar

That worked.  It created a 7.4GB tar file of a dozen webm, ogz, and
html files.  Let's try to untar them.  I am showing t here but x is
the same.

    rwplocal@download0:/srv/audio-video/rwptmp$ tar tvf audio-video-rms.tar
    ...hangs forever...^C

    rwplocal@download0:/srv/audio-video/rwptmp$ tar tvf - < audio-video-rms.tar
    ...hangs forever...^C

But I can copy the file.  I used "pv" just to get a progress of the
copy since it is quite a large file.  But cp and pv and cat and all of
those utilities copy the file just fine no problem.  And I can wc the
file.  All no problem.

    rwplocal@download0:/srv/audio-video/rwptmp$ pv audio-video-rms.tar > 
junk.tar

All attempts failed.  Then tried "bsdtar" and that worked perfectly.
No problems at all.  So got the task done with bsdtar and that
completed the task that was needed to be done.

    rwplocal@download0:/srv/audio-video/rwptmp$ bsdtar tvf audio-video-rms.tar
    ...all good...no problems...
    rwplocal@download0:/srv/audio-video/rwptmp$ bsdtar xvf audio-video-rms.tar
    ...all good...no problems...

But what about GNU tar?  I am still looking at the problem.  I
rebooted the system so that it would be fresh.  No change in behavior
after the reboot.  The system has one cpu core and 2GB of RAM plus 2GB
of swap.  Linux memory overcommit is disabled.

The /srv/audio-video directory holding this data is an NFS mount.  All
of the data is on networked storage.  There isn't enough local space
to hold a file of this size.  Therefore I can't copy it to local
storage to see if NFS is somehow involved in the problem.  However
note that bsdtar worked perfectly.

Along the way I decided to try try the operation as root and when
running as root it untars okay no problem.

    root@download0:/srv/audio-video# tar tvf audio-video-rms.tar

Then I ran strace on it.  First lets strace as me again.

    rwplocal@download0:/srv/audio-video/rwptmp$ strace -v -f -e futex tar tvf 
audio-video-rms.tar
    futex(0x7ffde0fae3a0, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, 
NULL, 7f5365cde840) = -1 EAGAIN (Resource temporarily unavailable)
    futex(0x7f5364a611c0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
    futex(0x7f5363bcf9d0, FUTEX_WAIT, 2346, NULLProcess 2346 attached
    ) = 0
    [pid  2345] futex(0x7f536568f3d0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
    [pid  2346] +++ exited with 0 +++
    futex(0x7f536484fb68, FUTEX_WAKE_PRIVATE, 2147483647) = 0
    futex(0x7f536568d108, FUTEX_WAIT_PRIVATE, 2, NULL^CProcess 2345 detached
     <detached ...>

So then I created a small tar file and copied it to the same directory
I was using before.

    rwplocal@download0:~$ tar cvf junk.tar .bashrc
    .bashrc
    rwplocal@download0:~$ tar tvf junk.tar
    -rw-r--r-- rwplocal/rwplocal 3635 2016-08-15 17:40 .bashrc
    rwplocal@download0:~$ mv junk.tar /srv/audio-video/rwptmp/
    rwplocal@download0:~$ cd /srv/audio-video/rwptmp/
    rwplocal@download0:/srv/audio-video/rwptmp$ tar tvf junk.tar
    -rw-r--r-- rwplocal/rwplocal 3635 2016-08-15 17:40 .bashrc

All of that worked okay.

    rwplocal@download0:/srv/audio-video/rwptmp$ strace -v -f -e futex tar tvf 
junk.tar
    -rw-r--r-- rwplocal/rwplocal 3635 2016-08-15 17:40 .bashrc
    +++ exited with 0 +++

But the small file does not use futex().  So it seems that it needs a
larger file than my ~/.bashrc file to trigger this behavior?
Something changes when the file is large?  Let's strace as root on
this file.

    root@download0:/srv/audio-video/rwptmp# strace -v -f -e futex tar tvf 
audio-video-rms.tar 
    futex(0x7fff3a4eb9b0, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, 
NULL, 7fa8a2bb6840) = -1 EAGAIN (Resource temporarily unavailable)
    futex(0x7fa8a16691c0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
    futex(0x7fa8a07d79d0, FUTEX_WAIT, 5329, NULLProcess 5329 attached
    ) = 0
    [pid  5329] +++ exited with 0 +++
    futex(0x7fa8a25673d0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
    futex(0x7fa8a1457b68, FUTEX_WAKE_PRIVATE, 2147483647) = 0
    drwxrwxr-x javisep/javisep   0 2020-11-10 03:21 audio-video-rms/
    -rw-r--r-- javisep/javisep 352727029 2020-11-09 08:22 
audio-video-rms/rms-2019-07-15-frankfurt-are-we-facing-surveillance-like-in-china.webm
    -rw-r--r-- javisep/javisep 219297840 2020-11-09 05:09 
audio-video-rms/rms-2017-01-30-kalamazoo-computing-freedom-and-privacy.webm
    -rw-r--r-- javisep/javisep 485053006 2020-11-09 08:13 
audio-video-rms/rms-2019-05-14-zurich-free-software-ethics-and-freedom-in-a-digital-age.webm
    -rw-r--r-- javisep/javisep 825962517 2020-11-10 03:18 
audio-video-rms/rms-2017-08-17-boston-free-software-freedom-privacy-sovereignty.webm
    -rw-r--r-- javisep/javisep 619335203 2020-11-09 07:51 
audio-video-rms/rms-2019-02-11-montana-free-software-and-your-freedom.webm
    -rw-r--r-- javisep/javisep    102967 2020-11-10 03:18 
audio-video-rms/index.html
    -rw-r--r-- javisep/javisep 551051435 2020-11-09 05:33 
audio-video-rms/rms-2017-05-29-belohorizonte-a-free-digital-society-portuguese.webm
    -rw-r--r-- javisep/javisep 306494617 2020-11-09 05:18 
audio-video-rms/rms-2017-02-14-cologne-free-software-your-freedom-your-privacy.webm
    -rw-r--r-- javisep/javisep 383723086 2020-11-09 08:01 
audio-video-rms/rms-2019-05-09-copenhagen-copyright-freedom-and-privacy.webm
    -rw-r--r-- javisep/javisep 636890825 2020-11-09 05:52 
audio-video-rms/rms-2017-05-29-belohorizonte-a-free-digital-society.webm
    -rw-r--r-- javisep/javisep 2730947903 2020-11-09 07:07 
audio-video-rms/rms-2017-10-10-timisora-free-software-and-your-freedom.webm
    -rw-r--r-- javisep/javisep  653460425 2020-11-10 03:30 
audio-video-rms/rms-2019-03-29-rennes-le-logiciel-libre-face-a-informatique.ogv
    -rw-r--r-- javisep/javisep  148072556 2020-11-09 07:30 
audio-video-rms/rms-2018-06-04-pato-branco-speech-interview.webm
    +++ exited with 0 +++

And so I have this issue that I am hoping someone knowledgeable about
GNU tar will be able to explain and help me address whatever the issue
is on that system.  Obviously it is working elsewhere.

I can't imagine why tar would be calling futex().  Why futex() is
blocking.  Or what changes to call futex() only when it is a larger
sized file.  Or why it works when being run as root.  I know why
bsdtar is working. :-)

Thanks!
Bob



reply via email to

[Prev in Thread] Current Thread [Next in Thread]