[bug-notifications] [tetex 0004097]: LaTeX "can't find file" when file is on a large filesystem because 32-bit stat() call is used

Mantis Bug Tracker noreply at opencsw.org
Mon Oct 4 21:10:23 CEST 2010


A NOTE has been added to this issue. 
====================================================================== 
https://www.opencsw.org/mantis/view.php?id=4097 
====================================================================== 
Reported By:                adb
Assigned To:                pfelecan
====================================================================== 
Project:                    tetex
Issue ID:                   4097
Category:                   regular use
Reproducibility:            always
Severity:                   block
Priority:                   normal
Status:                     feedback
====================================================================== 
Date Submitted:             2009-12-24 02:53 CET
Last Modified:              2010-10-04 21:10 CEST
====================================================================== 
Summary:                    LaTeX "can't find file" when file is on a large
filesystem because 32-bit stat() call is used
Description: 
On our multi-TB filesystems, the CSW LaTeX gives the error "can't find
file".  When the same file is moved to a smaller filesystem, LaTeX can find
it.

I ran latex under truss, and it appears that the xstat() call is returning
EOVERFLOW when latex checks on the target file, presumably because the
number of blocks on the filesystem does not fit in a 32-bit int.

I'm hoping this is just a matter of rebuilding TeTeX with 64-bit
filesystem calls enabled.

====================================================================== 

---------------------------------------------------------------------- 
 (0008351) adb (reporter) - 2010-10-04 21:10
 https://www.opencsw.org/mantis/view.php?id=4097#c8351 
---------------------------------------------------------------------- 
[I sent this earlier via email, but apparently that doesn't update the
issue notes]

I think I was mistaken about it being related to # of blocks;  it may
actually be a issue with the size of inode numbers.

The filesystem is NFS-mounted from an Isilon cluster.  It's currently
1TB;  at the time I submitted the bug report, I think it was rather
larger.  (It's carved out with a server-side quota from a 1PB
filesystem.)  I still see the bug on all our Isilon filesystems, but
not on NetApp or local filesystems.

Files on the Isilon filesystems typically have inode numbers > 2^32,
while creating the test file on the NetApp and local filesystems
generally yields inode numbers in the millions.  Attached are example
LaTeX runs with stat information about the file and filesystems.

Diffing the strace outputs (stripped of everything but stat calls,
with pointer values scrubbed to make the diff work), we see

 xstat(2, "/opt/csw/share/texmf-dist/aliases", POINTER) = 0
 fstat64(3, POINTER)                            = 0
 fstat64(3, POINTER)                            = 0
-xstat(2, ".", POINTER)                 = 0
-xstat(2, "./test.ltx", POINTER)                = 0
+xstat(2, ".", POINTER)                 Err#79 EOVERFLOW
 fstat64(1, POINTER)                            = 0
 fstat64(1, POINTER)                            = 0

i.e., in the successful run, we stat the current directory, then stat
the file, but in the failed run we stat the current directory, get
EOVERFLOW, and bail.

The "stat" command uses lstat64() rather than xstat().  (I'm assuming
xstat() is actually getting called behind the scenes by a library
function, since it's undocumented...)



More information about the bug-notifications mailing list