#669 nedit uses getdents() which dies with large filesystems

development
open
nobody
Program (402)
5
2013-02-12
2013-02-12
Anonymous
No

http://rhn.redhat.com/errata/RHBA-2013-0073.html (search getdents)
Man page says use readdir.

64bit RHEL5 running a 32bit version of nedit.

With the isilon, it has enormous single file shares using 64bit file id's that the default 32bit getdents call can't handle.

There is a workaround in the isilon to turn on 32bit file id's, but it would be much better if the program made the correct calls.

strace when fails:
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
getdents(4, 0x866594c, 32768) = -1 EINVAL (Invalid argument)
close(4) = 0

After remounting the share with the 32bit id workaround enabled:
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
getdents(4, /* 3 entries */, 32768) = 5132
getdents(4, /* 0 entries */, 32768) = 0
close(4) = 0

Discussion

  • Lutz Vieweg
    Lutz Vieweg
    2013-02-19

    I recently stumbled upon the same issue, and fixed it by recompiling nedit as a 64bit executable.