Date: Thu, 7 Sep 2000 12:20:03 -0700 (PDT) From: Gerhard Sittig <Gerhard.Sittig@gmx.net> To: freebsd-bugs@FreeBSD.org Subject: Re: bin/21017: mtree's "no such file" message at job's end Message-ID: <200009071920.MAA92116@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/21017; it has been noted by GNATS. From: Gerhard Sittig <Gerhard.Sittig@gmx.net> To: FreeBSD-gnats-submit@freebsd.org Cc: Subject: Re: bin/21017: mtree's "no such file" message at job's end Date: Thu, 7 Sep 2000 21:08:16 +0200 On Wed, Sep 06, 2000 at 22:26 +0200, Gerhard Sittig wrote: > > [ ... a whole bunch trying to chase it down ... ] > > To summarize: It's not about the broken symlink in itself. > But readlink(2) fails at a broken symlink when something else > happened before -- but I don't know what this is. :< Could > bin/4961 (nonzero errno although there's no error) apply in > this case? I hate to disappoint the gentle reader here. :( Just when I thought I had a grip to the problem -- it turned out to not lead any further. Hmmm ... I expanded /usr/src/usr.sbin/mtree/compare.c with the following printout, did a make and made sure by means of strings(1) that I ran the newly compiled executable: ----- snip ------------------------------------------------------ # cvs diff -u compare.c Index: compare.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/mtree/compare.c,v retrieving revision 1.15.2.1 diff -u -r1.15.2.1 compare.c --- compare.c 2000/06/28 02:33:17 1.15.2.1 +++ compare.c 2000/09/06 20:07:23 @@ -362,6 +362,9 @@ static char lbuf[MAXPATHLEN]; register int len; + if (errno) { + warn("nonzero errno before readlink(2) in compare:rlink(%s)", name); + } if ((len = readlink(name, lbuf, sizeof(lbuf) - 1)) == -1) err(1, "line %d: %s", lineno, name); lbuf[len] = '\0'; # strings /usr/obj/usr/src/usr.sbin/mtree/mtree | grep nonzero nonzero errno before readlink(2) in compare:rlink(%s) # truss /usr/obj/usr/src/usr.sbin/mtree/mtree \ -K $KEYS -p /usr -x -X $DB/_usr.ex < $DB/_usr.db \ 2> ~/nonzero.err > ~/nonzero.std # tail -15 ~/nonzero.err read(0x3,0xbfbff520,0x400) = 1024 (0x400) read(0x3,0xbfbff520,0x400) = 1024 (0x400) read(0x3,0xbfbff520,0x400) = 168 (0xa8) read(0x3,0xbfbff520,0x400) = 0 (0x0) close(3) = 0 (0x0) readlink("X11",0x804ef80,1023) ERR#2 'No such file or directory' mtree: write(2,0xbfbff18c,7) = 7 (0x7) line 1361949: X11write(2,0xbfbff1bc,17) = 17 (0x11) : write(2,0xbfbff17c,2) = 2 (0x2) No such file or directory write(2,0xbfbff17c,26) = 26 (0x1a) sigprocmask(0x1,0x280605a0,0xbfbff824) = 0 (0x0) sigprocmask(0x3,0x280605b0,0x0) = 0 (0x0) write(1,0xd2dd000,2466) = 2466 (0x9a2) exit(0x1) process exit, rval = 256 ----- snap ------------------------------------------------------ In the end I can only see two reasons for mtree's failure: - readlink(2) barfs on broken symlinks under not known yet conditions (after "long" runs?) and does so unpredictably - mtree fails to chdir(2) to the new directory and therefor fails to read _any_ file there with a relative pathname The latter thought is new and comes from the fact, that "X11" on organ as well as "30_qmail.sh" on the third machine are the first files in their directories (and in the .db file's respective section). But this doesn't hold any longer when looking at "libtermcap_p.a" on stein which is "in the middle" of the listing and the .db dir section. Once I can find another spare moment I will try to dump the relevant info of the readlink invocation's environment (current dir, fts' root + path + filename, fts' already provided slink and access failure info, etc). And I will try to determine the "needed" depth of the tree somewhere between /usr and /usr/compat/linux/usr/lib to make the mtree run fail. virtually yours 82D1 9B9C 01DC 4FB4 D7B4 61BE 3F49 4F77 72DE DA76 Gerhard Sittig true | mail -s "get gpg key" Gerhard.Sittig@gmx.net -- If you don't understand or are scared by any of the above ask your parents or an adult to help you. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200009071920.MAA92116>