diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2005-10-18 17:20:18 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2005-10-18 17:20:18 -0400 |
commit | cdce5d6b94b6182f6d8a5b7b52923933e98cbc92 (patch) | |
tree | e98ec006186a5d18fac2189dc1d6ece1fda9541f | |
parent | 6f926b5ba75c568296ec227e7d782db4ddbdca5c (diff) |
VFS: Make link_path_walk set LOOKUP_CONTINUE before calling permission().
This will allow nfs_permission() to perform additional optimizations when
walking the path, by folding the ACCESS(MAY_EXEC) call on the directory
into the lookup revalidation.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r-- | fs/namei.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/namei.c b/fs/namei.c index 0d1dff7d3d95..aaaa81036234 100644 --- a/fs/namei.c +++ b/fs/namei.c | |||
@@ -763,6 +763,7 @@ static fastcall int __link_path_walk(const char * name, struct nameidata *nd) | |||
763 | struct qstr this; | 763 | struct qstr this; |
764 | unsigned int c; | 764 | unsigned int c; |
765 | 765 | ||
766 | nd->flags |= LOOKUP_CONTINUE; | ||
766 | err = exec_permission_lite(inode, nd); | 767 | err = exec_permission_lite(inode, nd); |
767 | if (err == -EAGAIN) { | 768 | if (err == -EAGAIN) { |
768 | err = permission(inode, MAY_EXEC, nd); | 769 | err = permission(inode, MAY_EXEC, nd); |
@@ -815,7 +816,6 @@ static fastcall int __link_path_walk(const char * name, struct nameidata *nd) | |||
815 | if (err < 0) | 816 | if (err < 0) |
816 | break; | 817 | break; |
817 | } | 818 | } |
818 | nd->flags |= LOOKUP_CONTINUE; | ||
819 | /* This does the actual lookups.. */ | 819 | /* This does the actual lookups.. */ |
820 | err = do_lookup(nd, &this, &next); | 820 | err = do_lookup(nd, &this, &next); |
821 | if (err) | 821 | if (err) |