[PATCH] Optimise NFS readdir hack slightly.
authorDavid Woodhouse <dwmw2@infradead.org>
Sun, 17 Aug 2008 16:21:18 +0000 (17:21 +0100)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 23 Oct 2008 09:13:11 +0000 (05:13 -0400)
Avoid calling the underlying ->readdir() again when we reached the end
already; keep going round the loop only if we stopped due to our own
buffer being full.

[AV: tidy the things up a bit, while we are there]

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/nfsd/vfs.c

index e3e37f7c84775cfb350750d96db4e598d9f54bde..49d4b8725ca374e778b1cca112ffa4bc5ac791f1 100644 (file)
@@ -1891,7 +1891,6 @@ static int nfsd_buffered_readdir(struct file *file, filldir_t func,
                if (!size)
                        break;
 
-
                de = (struct buffered_dirent *)buf.dirent;
                while (size > 0) {
                        offset = de->offset;
@@ -1908,7 +1907,9 @@ static int nfsd_buffered_readdir(struct file *file, filldir_t func,
                        size -= reclen;
                        de = (struct buffered_dirent *)((char *)de + reclen);
                }
-               offset = vfs_llseek(file, 0, 1);
+               offset = vfs_llseek(file, 0, SEEK_CUR);
+               if (!buf.full)
+                       break;
        }
 
  done: