|
@@ -790,7 +790,7 @@ static fastcall int __link_path_walk(const char * name, struct nameidata *nd)
|
|
|
|
|
|
inode = nd->dentry->d_inode;
|
|
inode = nd->dentry->d_inode;
|
|
if (nd->depth)
|
|
if (nd->depth)
|
|
- lookup_flags = LOOKUP_FOLLOW;
|
|
|
|
|
|
+ lookup_flags = LOOKUP_FOLLOW | (nd->flags & LOOKUP_CONTINUE);
|
|
|
|
|
|
/* At this point we know we have a real path component. */
|
|
/* At this point we know we have a real path component. */
|
|
for(;;) {
|
|
for(;;) {
|
|
@@ -885,7 +885,8 @@ static fastcall int __link_path_walk(const char * name, struct nameidata *nd)
|
|
last_with_slashes:
|
|
last_with_slashes:
|
|
lookup_flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;
|
|
lookup_flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;
|
|
last_component:
|
|
last_component:
|
|
- nd->flags &= ~LOOKUP_CONTINUE;
|
|
|
|
|
|
+ /* Clear LOOKUP_CONTINUE iff it was previously unset */
|
|
|
|
+ nd->flags &= lookup_flags | ~LOOKUP_CONTINUE;
|
|
if (lookup_flags & LOOKUP_PARENT)
|
|
if (lookup_flags & LOOKUP_PARENT)
|
|
goto lookup_parent;
|
|
goto lookup_parent;
|
|
if (this.name[0] == '.') switch (this.len) {
|
|
if (this.name[0] == '.') switch (this.len) {
|