Hello OmegaPhil, OmegaPhil: > The actual problem is happening in git's > sha1_file.c:prepare_packed_git_one, the closedir call right at the > bottom is setting errno to 'Bad file descriptor', git later on notices > that errno is bad and panics (ironically the fetch itself looks good). > > Any idea what libau is doing here? Have confirmed the problem on a VM.
I could reproduce the problem, and added some debug print into aufs-util.git/libau/rdu_lib.c:closedir(). See the attachment. It must be an application's problem instead of libau. Generally applications should not use errno after a systemcall/library succeeded. Actually the manual of errno(3) says DESCRIPTION The <errno.h> header file defines the integer variable errno, which is set by system calls and some library functions in the event of an error to indicate what went wrong. Its value is significant only when the return value of the call indicated an error (i.e., -1 from most system calls; -1 or NULL from most library functions); a function that succeeds is allowed to change errno. ::: I didn't check the source files of git-fetch, but this symptom indicates that git-fetch incorrectly tests errno after libau:closedir() returned a success. libau can fix this problem (see the attachment again), but it is definitly better to fix git-fetch. > It took me a very long time to realise it could be aufs' doing - as soon > as I killed off LD_PRELOAD, the fetch started working... I can understand it very hard. Good job! J. R. Okajima
a.patch.bz2
Description: BZip2 compressed data
------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot