Messages in this thread |  | | Date | Thu, 18 Jan 2001 13:32:08 +0100 | | From | Mogens Kjaer <> | | Subject | Re: nfs client problem in kernel 2.4.0 |
| |
Trond Myklebust wrote: > > >>>>> " " == Mogens Kjaer <mk@crc.dk> writes: > >> getdents64(3, /* 6 entries */, 65536) = 160 lseek(3, > >> 1547825467, SEEK_SET) = 1547825467 ... getdents64(3, /* 1 > >> entries */, 65536) = 32 > > BTW: there does in any case seem to be a bug in your version of > glibc. getdents64() is returning 64-bit file offsets, so they're not > going to fit with ordinary lseek().
This turned out to be more difficult than I thought...
I suspect glibc-2.2-12 being the reason, but I'm not quite sure yet:
The problem is, that the 64-bit dirent's are converted to 32-bit dirent's and a sanity check is performed, if the inodes or offsets don't fit into 32 bits.
The offset of the last entry is 4294967295 (no, not -1), this won't fit in a signed 32 bit number.
Does this number come from the SGI or from the NFS stuff in the Linux kernel?
Mogens -- Mogens Kjaer, Carlsberg Laboratory, Dept. of Chemistry Gamle Carlsberg Vej 10, DK-2500 Valby, Denmark Phone: +45 33 27 53 25, Fax: +45 33 27 47 08 Email: mk@crc.dk Homepage: http://www.crc.dk - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
|  |