From: Han-Wen N. <ha...@gm...> - 2011-07-22 15:45:24
|
Hi there, I'm debugging an odd problem with my FUSE library. When I set timeout = 0.0 on lookup/getattr results, some programs start failing with EOVERFLOW. >From inspection of the source code of the userspace program, this happens because it is using fstat() rather than fstat64(). However, strace -v has the following to say fstat64(3, {st_dev=makedev(0, 82), st_ino=178635819520, st_mode=S_IFREG|0666, st_nlink=1, st_uid=500, st_gid=500, st_blksize=4096, st_blocks=24, st_size=11133, st_atime=2011/07/21-01:54:46, st_mtime=2010/12/13-02:23:53, st_ctime=2011/07/13-10:35:51}) = 0 close(3) = 0 lseek(2, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek) write(2, "Could not open input file '", 27) = 27 write(2, "X86.td", 6) = 6 write(2, "': ", 3) = 3 write(2, "Value too large for defined data type", 37) = 37 write(2, "\n", 1) = 1 exit_group(1) = ? It looks as if st_ino is overflowing. According to the manpage, it EOVERFLOW only happens for the size field, but the inode number is a candidate too (its sizeof is 4 on 32-bit). How do the daemon's inode numbers translate to the VFS' inodes anyway? AFAICS they are not passed on verbatim. On a related note, what is the purpose of the generation field -- Han-Wen Nienhuys - ha...@xs... - http://www.xs4all.nl/~hanwen |