fs/9p: fix readdir()
authorJohannes Berg <johannes.berg@intel.com>
Wed, 22 Apr 2015 09:55:14 +0000 (11:55 +0200)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 24 Apr 2015 19:45:03 +0000 (15:45 -0400)
Al Viro's IOV changes broke 9p readdir() because the new code
didn't abort the read when it returned nothing. The original
code checked if the combined error/length was <= 0 but in the
new code that accidentally got changed to just an error check.

Add back the return from the function when nothing is read.

Cc: Al Viro <viro@zeniv.linux.org.uk>
Fixes: e1200fe68f20 ("9p: switch p9_client_read() to passing struct iov_iter *")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/9p/vfs_dir.c

index 76c3b1ab6361d69b12f069ed7e9d68b48751eb82..5cc00e56206e339cb6077db514a6ac6a2bffcfd9 100644 (file)
@@ -138,6 +138,8 @@ static int v9fs_dir_readdir(struct file *file, struct dir_context *ctx)
                                           &err);
                        if (err)
                                return err;
+                       if (n == 0)
+                               return 0;
 
                        rdir->head = 0;
                        rdir->tail = n;