mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
Embed a struct path into struct nameidata instead of nd->{dentry,mnt}
This is the central patch of a cleanup series. In most cases there is no good
reason why someone would want to use a dentry for itself. This series reflects
that fact and embeds a struct path into nameidata.
Together with the other patches of this series
- it enforced the correct order of getting/releasing the reference count on
<dentry,vfsmount> pairs
- it prepares the VFS for stacking support since it is essential to have a
struct path in every place where the stack can be traversed
- it reduces the overall code size:
without patch series:
text data bss dec hex filename
5321639 858418 715768 6895825 6938d1 vmlinux
with patch series:
text data bss dec hex filename
5320026 858418 715768 6894212 693284 vmlinux
This patch:
Switch from nd->{dentry,mnt} to nd->path.{dentry,mnt} everywhere.
[[email protected]: coding-style fixes]
[[email protected]: fix cifs]
[[email protected]: fix smack]
Signed-off-by: Jan Blunck <[email protected]>
Signed-off-by: Andreas Gruenbacher <[email protected]>
Acked-by: Christoph Hellwig <[email protected]>
Cc: Al Viro <[email protected]>
Cc: Casey Schaufler <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
c5e725f33b
commit
4ac9137858
47 changed files with 431 additions and 402 deletions
13
fs/stat.c
13
fs/stat.c
|
|
@ -62,7 +62,7 @@ int vfs_stat_fd(int dfd, char __user *name, struct kstat *stat)
|
|||
|
||||
error = __user_walk_fd(dfd, name, LOOKUP_FOLLOW, &nd);
|
||||
if (!error) {
|
||||
error = vfs_getattr(nd.mnt, nd.dentry, stat);
|
||||
error = vfs_getattr(nd.path.mnt, nd.path.dentry, stat);
|
||||
path_release(&nd);
|
||||
}
|
||||
return error;
|
||||
|
|
@ -82,7 +82,7 @@ int vfs_lstat_fd(int dfd, char __user *name, struct kstat *stat)
|
|||
|
||||
error = __user_walk_fd(dfd, name, 0, &nd);
|
||||
if (!error) {
|
||||
error = vfs_getattr(nd.mnt, nd.dentry, stat);
|
||||
error = vfs_getattr(nd.path.mnt, nd.path.dentry, stat);
|
||||
path_release(&nd);
|
||||
}
|
||||
return error;
|
||||
|
|
@ -302,14 +302,15 @@ asmlinkage long sys_readlinkat(int dfd, const char __user *path,
|
|||
|
||||
error = __user_walk_fd(dfd, path, 0, &nd);
|
||||
if (!error) {
|
||||
struct inode * inode = nd.dentry->d_inode;
|
||||
struct inode *inode = nd.path.dentry->d_inode;
|
||||
|
||||
error = -EINVAL;
|
||||
if (inode->i_op && inode->i_op->readlink) {
|
||||
error = security_inode_readlink(nd.dentry);
|
||||
error = security_inode_readlink(nd.path.dentry);
|
||||
if (!error) {
|
||||
touch_atime(nd.mnt, nd.dentry);
|
||||
error = inode->i_op->readlink(nd.dentry, buf, bufsiz);
|
||||
touch_atime(nd.path.mnt, nd.path.dentry);
|
||||
error = inode->i_op->readlink(nd.path.dentry,
|
||||
buf, bufsiz);
|
||||
}
|
||||
}
|
||||
path_release(&nd);
|
||||
|
|
|
|||
Loading…
Reference in a new issue