From: Miklos Szeredi This patch correctly sets f_pos in readdir. The offset passed from userspace is now the offset of the next entry. Needs at least libfuse 2.3-pre2 to work properly. Zero lengh filenames are also disallowed. Signed-off-by: Miklos Szeredi Signed-off-by: Andrew Morton --- 25-akpm/fs/fuse/dir.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff -puN fs/fuse/dir.c~fuse-read-only-operations-readdir-fixes fs/fuse/dir.c --- 25/fs/fuse/dir.c~fuse-read-only-operations-readdir-fixes Fri Apr 1 15:45:53 2005 +++ 25-akpm/fs/fuse/dir.c Fri Apr 1 15:45:53 2005 @@ -191,19 +191,19 @@ static int parse_dirfile(char *buf, size struct fuse_dirent *dirent = (struct fuse_dirent *) buf; size_t reclen = FUSE_DIRENT_SIZE(dirent); int over; - if (dirent->namelen > FUSE_NAME_MAX) + if (!dirent->namelen || dirent->namelen > FUSE_NAME_MAX) return -EIO; if (reclen > nbytes) break; over = filldir(dstbuf, dirent->name, dirent->namelen, - dirent->off, dirent->ino, dirent->type); + file->f_pos, dirent->ino, dirent->type); if (over) break; buf += reclen; - file->f_pos += reclen; nbytes -= reclen; + file->f_pos = dirent->off; } return 0; _