Signed-off-by: Jeff Layton <jlay...@redhat.com>
---
 fs/stat.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/fs/stat.c b/fs/stat.c
index 4078022..7f1602a 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -74,7 +74,8 @@ int vfs_fstatat(int dfd, const char __user *filename, struct 
kstat *stat,
 {
        struct path path;
        int error = -EINVAL;
-       int lookup_flags = 0;
+       unsigned int try = 0;
+       unsigned int lookup_flags = 0;
 
        if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT |
                      AT_EMPTY_PATH)) != 0)
@@ -85,12 +86,15 @@ int vfs_fstatat(int dfd, const char __user *filename, 
struct kstat *stat,
        if (flag & AT_EMPTY_PATH)
                lookup_flags |= LOOKUP_EMPTY;
 
-       error = user_path_at(dfd, filename, lookup_flags, &path);
-       if (error)
-               goto out;
+       do {
+               error = user_path_at(dfd, filename, lookup_flags, &path);
+               if (error)
+                       break;
 
-       error = vfs_getattr(path.mnt, path.dentry, stat);
-       path_put(&path);
+               error = vfs_getattr(path.mnt, path.dentry, stat);
+               path_put(&path);
+               lookup_flags |= LOOKUP_REVAL;
+       } while (retry_estale(error, try++));
 out:
        return error;
 }
-- 
1.7.11.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to