JFS readdir() issues in stable 3.2
Richard Weinberger <[email protected]>
| Newsgroups | gmane.comp.file-systems.jfs.general |
|---|---|
| Message-ID | <[email protected]> |
Hi! Mainline commit 44512449c0ab368889dd13ae0031fba74ee7e1d2 (jfs: fix readdir cookie incompatibility with NFSv4) does not work as expected on 3.2. Maybe on other stable kernels too. UML stumbled over it: https://bugzilla.kernel.org/show_bug.cgi?id=94741 If you run the attached readdir.c on a JFS on stable 3.2.51+ readdir() will not increment the directory offset nor return NULL, hence the caller will loop forever. It looks like if the current directory offset is > 0 and you run seekdir(telldir()) the next readdir() call will not increment it. Dave, has your fix some unnamed dependencies which need backporting too? Thanks, //richard ------------------------------------------------------------------------------ Dive into the World of Parallel Programming The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ Jfs-discussion mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/jfs-discussion
readdir.c
(text/x-csrc, 432 B)
#include <stdio.h>
#include <dirent.h>
#include <assert.h>
int main(int argc, char *argv[])
{
DIR *dirp;
struct dirent *dent;
off_t dpos;
if (argc < 2) {
fprintf(stderr, "Usage: %s DIR\n", argv[0]);
return 1;
}
dirp = opendir(argv[1]);
assert(dirp);
dpos = 0;
for (;;) {
seekdir(dirp, dpos);
dent = readdir(dirp);
if (!dent)
break;
assert(dpos != telldir(dirp));
dpos = telldir(dirp);
}
return 0;
}