diff options
author | Jan Blunck <jblunck@suse.de> | 2008-02-14 22:34:32 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-15 00:13:33 -0500 |
commit | 4ac9137858e08a19f29feac4e1f4df7c268b0ba5 (patch) | |
tree | f5b5d84fd12fcc2b0ba0e7ce1a79ff381ad8f5dd /net | |
parent | c5e725f33b733a77de622e91b6ba5645fcf070be (diff) |
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.
[akpm@linux-foundation.org: coding-style fixes]
[akpm@linux-foundation.org: fix cifs]
[akpm@linux-foundation.org: fix smack]
Signed-off-by: Jan Blunck <jblunck@suse.de>
Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
Acked-by: Christoph Hellwig <hch@lst.de>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Casey Schaufler <casey@schaufler-ca.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'net')
-rw-r--r-- | net/sunrpc/rpc_pipe.c | 5 | ||||
-rw-r--r-- | net/unix/af_unix.c | 20 |
2 files changed, 13 insertions, 12 deletions
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c index 0e3ead7e11b9..6bc3babf6175 100644 --- a/net/sunrpc/rpc_pipe.c +++ b/net/sunrpc/rpc_pipe.c | |||
@@ -668,7 +668,8 @@ rpc_lookup_negative(char *path, struct nameidata *nd) | |||
668 | 668 | ||
669 | if ((error = rpc_lookup_parent(path, nd)) != 0) | 669 | if ((error = rpc_lookup_parent(path, nd)) != 0) |
670 | return ERR_PTR(error); | 670 | return ERR_PTR(error); |
671 | dentry = rpc_lookup_create(nd->dentry, nd->last.name, nd->last.len, 1); | 671 | dentry = rpc_lookup_create(nd->path.dentry, nd->last.name, nd->last.len, |
672 | 1); | ||
672 | if (IS_ERR(dentry)) | 673 | if (IS_ERR(dentry)) |
673 | rpc_release_path(nd); | 674 | rpc_release_path(nd); |
674 | return dentry; | 675 | return dentry; |
@@ -695,7 +696,7 @@ rpc_mkdir(char *path, struct rpc_clnt *rpc_client) | |||
695 | dentry = rpc_lookup_negative(path, &nd); | 696 | dentry = rpc_lookup_negative(path, &nd); |
696 | if (IS_ERR(dentry)) | 697 | if (IS_ERR(dentry)) |
697 | return dentry; | 698 | return dentry; |
698 | dir = nd.dentry->d_inode; | 699 | dir = nd.path.dentry->d_inode; |
699 | if ((error = __rpc_mkdir(dir, dentry)) != 0) | 700 | if ((error = __rpc_mkdir(dir, dentry)) != 0) |
700 | goto err_dput; | 701 | goto err_dput; |
701 | RPC_I(dentry->d_inode)->private = rpc_client; | 702 | RPC_I(dentry->d_inode)->private = rpc_client; |
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index eea75888805e..7c3323e8827b 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
@@ -718,14 +718,14 @@ static struct sock *unix_find_other(struct net *net, | |||
718 | goto put_fail; | 718 | goto put_fail; |
719 | 719 | ||
720 | err = -ECONNREFUSED; | 720 | err = -ECONNREFUSED; |
721 | if (!S_ISSOCK(nd.dentry->d_inode->i_mode)) | 721 | if (!S_ISSOCK(nd.path.dentry->d_inode->i_mode)) |
722 | goto put_fail; | 722 | goto put_fail; |
723 | u=unix_find_socket_byinode(net, nd.dentry->d_inode); | 723 | u = unix_find_socket_byinode(net, nd.path.dentry->d_inode); |
724 | if (!u) | 724 | if (!u) |
725 | goto put_fail; | 725 | goto put_fail; |
726 | 726 | ||
727 | if (u->sk_type == type) | 727 | if (u->sk_type == type) |
728 | touch_atime(nd.mnt, nd.dentry); | 728 | touch_atime(nd.path.mnt, nd.path.dentry); |
729 | 729 | ||
730 | path_release(&nd); | 730 | path_release(&nd); |
731 | 731 | ||
@@ -819,12 +819,12 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | |||
819 | */ | 819 | */ |
820 | mode = S_IFSOCK | | 820 | mode = S_IFSOCK | |
821 | (SOCK_INODE(sock)->i_mode & ~current->fs->umask); | 821 | (SOCK_INODE(sock)->i_mode & ~current->fs->umask); |
822 | err = vfs_mknod(nd.dentry->d_inode, dentry, mode, 0); | 822 | err = vfs_mknod(nd.path.dentry->d_inode, dentry, mode, 0); |
823 | if (err) | 823 | if (err) |
824 | goto out_mknod_dput; | 824 | goto out_mknod_dput; |
825 | mutex_unlock(&nd.dentry->d_inode->i_mutex); | 825 | mutex_unlock(&nd.path.dentry->d_inode->i_mutex); |
826 | dput(nd.dentry); | 826 | dput(nd.path.dentry); |
827 | nd.dentry = dentry; | 827 | nd.path.dentry = dentry; |
828 | 828 | ||
829 | addr->hash = UNIX_HASH_SIZE; | 829 | addr->hash = UNIX_HASH_SIZE; |
830 | } | 830 | } |
@@ -842,8 +842,8 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | |||
842 | list = &unix_socket_table[addr->hash]; | 842 | list = &unix_socket_table[addr->hash]; |
843 | } else { | 843 | } else { |
844 | list = &unix_socket_table[dentry->d_inode->i_ino & (UNIX_HASH_SIZE-1)]; | 844 | list = &unix_socket_table[dentry->d_inode->i_ino & (UNIX_HASH_SIZE-1)]; |
845 | u->dentry = nd.dentry; | 845 | u->dentry = nd.path.dentry; |
846 | u->mnt = nd.mnt; | 846 | u->mnt = nd.path.mnt; |
847 | } | 847 | } |
848 | 848 | ||
849 | err = 0; | 849 | err = 0; |
@@ -861,7 +861,7 @@ out: | |||
861 | out_mknod_dput: | 861 | out_mknod_dput: |
862 | dput(dentry); | 862 | dput(dentry); |
863 | out_mknod_unlock: | 863 | out_mknod_unlock: |
864 | mutex_unlock(&nd.dentry->d_inode->i_mutex); | 864 | mutex_unlock(&nd.path.dentry->d_inode->i_mutex); |
865 | path_release(&nd); | 865 | path_release(&nd); |
866 | out_mknod_parent: | 866 | out_mknod_parent: |
867 | if (err==-EEXIST) | 867 | if (err==-EEXIST) |