Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 27103
b: refs/heads/master
c: 6d09bb6
h: refs/heads/master
i:
  27101: 3883294
  27099: 5446628
  27095: d272715
  27087: 76673e3
  27071: b75924c
v: v3
  • Loading branch information
Trond Myklebust authored and Linus Torvalds committed Jun 5, 2006
1 parent 6e0acc1 commit 7e9d15e
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 10 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c7d2d28b9851d0ffc9924b0e36bac806d18ebf25
refs/heads/master: 6d09bb627d2470299dfb1af0e6d27fb4aece9196
19 changes: 10 additions & 9 deletions trunk/fs/namei.c
Original file line number Diff line number Diff line change
Expand Up @@ -1080,8 +1080,8 @@ static int fastcall do_path_lookup(int dfd, const char *name,
nd->flags = flags;
nd->depth = 0;

read_lock(&current->fs->lock);
if (*name=='/') {
read_lock(&current->fs->lock);
if (current->fs->altroot && !(nd->flags & LOOKUP_NOALT)) {
nd->mnt = mntget(current->fs->altrootmnt);
nd->dentry = dget(current->fs->altroot);
Expand All @@ -1092,33 +1092,35 @@ static int fastcall do_path_lookup(int dfd, const char *name,
}
nd->mnt = mntget(current->fs->rootmnt);
nd->dentry = dget(current->fs->root);
read_unlock(&current->fs->lock);
} else if (dfd == AT_FDCWD) {
read_lock(&current->fs->lock);
nd->mnt = mntget(current->fs->pwdmnt);
nd->dentry = dget(current->fs->pwd);
read_unlock(&current->fs->lock);
} else {
struct dentry *dentry;

file = fget_light(dfd, &fput_needed);
retval = -EBADF;
if (!file)
goto unlock_fail;
goto out_fail;

dentry = file->f_dentry;

retval = -ENOTDIR;
if (!S_ISDIR(dentry->d_inode->i_mode))
goto fput_unlock_fail;
goto fput_fail;

retval = file_permission(file, MAY_EXEC);
if (retval)
goto fput_unlock_fail;
goto fput_fail;

nd->mnt = mntget(file->f_vfsmnt);
nd->dentry = dget(dentry);

fput_light(file, fput_needed);
}
read_unlock(&current->fs->lock);
current->total_link_count = 0;
retval = link_path_walk(name, nd);
out:
Expand All @@ -1127,13 +1129,12 @@ static int fastcall do_path_lookup(int dfd, const char *name,
nd->dentry->d_inode))
audit_inode(name, nd->dentry->d_inode, flags);
}
out_fail:
return retval;

fput_unlock_fail:
fput_fail:
fput_light(file, fput_needed);
unlock_fail:
read_unlock(&current->fs->lock);
return retval;
goto out_fail;
}

int fastcall path_lookup(const char *name, unsigned int flags,
Expand Down

0 comments on commit 7e9d15e

Please sign in to comment.