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;
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.