Skip to content

Commit 82e05e9

Browse files
Miklos Szeredigregkh
authored andcommitted
fuse: fix READDIRPLUS skipping an entry
commit c6cdd51404b7ac12dd95173ddfc548c59ecf037f upstream. Marios Titas running a Haskell program noticed a problem with fuse's readdirplus: when it is interrupted by a signal, it skips one directory entry. The reason is that fuse erronously updates ctx->pos after a failed dir_emit(). The issue originates from the patch adding readdirplus support. Reported-by: Jakob Unterwurzacher <jakobunt@gmail.com> Tested-by: Marios Titas <redneb@gmx.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com> Fixes: 0b05b18 ("fuse: implement NFS-like readdirplus support") Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 7d74eec commit 82e05e9

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

fs/fuse/dir.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1295,7 +1295,8 @@ static int parse_dirplusfile(char *buf, size_t nbytes, struct file *file,
12951295
*/
12961296
over = !dir_emit(ctx, dirent->name, dirent->namelen,
12971297
dirent->ino, dirent->type);
1298-
ctx->pos = dirent->off;
1298+
if (!over)
1299+
ctx->pos = dirent->off;
12991300
}
13001301

13011302
buf += reclen;

0 commit comments

Comments
 (0)