diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2012-03-14 21:54:32 -0400 | 
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-03-20 21:29:41 -0400 | 
| commit | 40ffe67d2e89c7a475421d007becc11a2f88ea3d (patch) | |
| tree | 5373e71b18895b9ffd8370a88aec6c54438240a0 | |
| parent | 38eff2892628fa5c4fc8962a17b7296f42833ebe (diff) | |
| download | olio-linux-3.10-40ffe67d2e89c7a475421d007becc11a2f88ea3d.tar.xz olio-linux-3.10-40ffe67d2e89c7a475421d007becc11a2f88ea3d.zip  | |
switch unix_sock to struct path
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| -rw-r--r-- | include/net/af_unix.h | 3 | ||||
| -rw-r--r-- | net/unix/af_unix.c | 35 | ||||
| -rw-r--r-- | net/unix/diag.c | 2 | ||||
| -rw-r--r-- | security/lsm_audit.c | 8 | 
4 files changed, 19 insertions, 29 deletions
diff --git a/include/net/af_unix.h b/include/net/af_unix.h index 5a4e29b168c..ca68e2cef23 100644 --- a/include/net/af_unix.h +++ b/include/net/af_unix.h @@ -49,8 +49,7 @@ struct unix_sock {  	/* WARNING: sk has to be the first member */  	struct sock		sk;  	struct unix_address     *addr; -	struct dentry		*dentry; -	struct vfsmount		*mnt; +	struct path		path;  	struct mutex		readlock;  	struct sock		*peer;  	struct sock		*other; diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 85d3bb7490a..ef4b780ef63 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -293,7 +293,7 @@ static struct sock *unix_find_socket_byinode(struct inode *i)  	spin_lock(&unix_table_lock);  	sk_for_each(s, node,  		    &unix_socket_table[i->i_ino & (UNIX_HASH_SIZE - 1)]) { -		struct dentry *dentry = unix_sk(s)->dentry; +		struct dentry *dentry = unix_sk(s)->path.dentry;  		if (dentry && dentry->d_inode == i) {  			sock_hold(s); @@ -377,8 +377,7 @@ static void unix_sock_destructor(struct sock *sk)  static int unix_release_sock(struct sock *sk, int embrion)  {  	struct unix_sock *u = unix_sk(sk); -	struct dentry *dentry; -	struct vfsmount *mnt; +	struct path path;  	struct sock *skpair;  	struct sk_buff *skb;  	int state; @@ -389,10 +388,9 @@ static int unix_release_sock(struct sock *sk, int embrion)  	unix_state_lock(sk);  	sock_orphan(sk);  	sk->sk_shutdown = SHUTDOWN_MASK; -	dentry	     = u->dentry; -	u->dentry    = NULL; -	mnt	     = u->mnt; -	u->mnt	     = NULL; +	path	     = u->path; +	u->path.dentry = NULL; +	u->path.mnt = NULL;  	state = sk->sk_state;  	sk->sk_state = TCP_CLOSE;  	unix_state_unlock(sk); @@ -425,10 +423,8 @@ static int unix_release_sock(struct sock *sk, int embrion)  		kfree_skb(skb);  	} -	if (dentry) { -		dput(dentry); -		mntput(mnt); -	} +	if (path.dentry) +		path_put(&path);  	sock_put(sk); @@ -628,8 +624,8 @@ static struct sock *unix_create1(struct net *net, struct socket *sock)  	sk->sk_max_ack_backlog	= net->unx.sysctl_max_dgram_qlen;  	sk->sk_destruct		= unix_sock_destructor;  	u	  = unix_sk(sk); -	u->dentry = NULL; -	u->mnt	  = NULL; +	u->path.dentry = NULL; +	u->path.mnt = NULL;  	spin_lock_init(&u->lock);  	atomic_long_set(&u->inflight, 0);  	INIT_LIST_HEAD(&u->link); @@ -789,9 +785,9 @@ static struct sock *unix_find_other(struct net *net,  		u = unix_find_socket_byname(net, sunname, len, type, hash);  		if (u) {  			struct dentry *dentry; -			dentry = unix_sk(u)->dentry; +			dentry = unix_sk(u)->path.dentry;  			if (dentry) -				touch_atime(unix_sk(u)->mnt, dentry); +				touch_atime(unix_sk(u)->path.mnt, dentry);  		} else  			goto fail;  	} @@ -897,8 +893,7 @@ out_mknod_drop_write:  		list = &unix_socket_table[addr->hash];  	} else {  		list = &unix_socket_table[dentry->d_inode->i_ino & (UNIX_HASH_SIZE-1)]; -		u->dentry = path.dentry; -		u->mnt    = path.mnt; +		u->path = path;  	}  	err = 0; @@ -1180,9 +1175,9 @@ restart:  		atomic_inc(&otheru->addr->refcnt);  		newu->addr = otheru->addr;  	} -	if (otheru->dentry) { -		newu->dentry	= dget(otheru->dentry); -		newu->mnt	= mntget(otheru->mnt); +	if (otheru->path.dentry) { +		path_get(&otheru->path); +		newu->path = otheru->path;  	}  	/* Set credentials */ diff --git a/net/unix/diag.c b/net/unix/diag.c index 6b7697fd911..ffd86518e64 100644 --- a/net/unix/diag.c +++ b/net/unix/diag.c @@ -29,7 +29,7 @@ rtattr_failure:  static int sk_diag_dump_vfs(struct sock *sk, struct sk_buff *nlskb)  { -	struct dentry *dentry = unix_sk(sk)->dentry; +	struct dentry *dentry = unix_sk(sk)->path.dentry;  	struct unix_diag_vfs *uv;  	if (dentry) { diff --git a/security/lsm_audit.c b/security/lsm_audit.c index 293b8c45b1d..8b8f0902f6e 100644 --- a/security/lsm_audit.c +++ b/security/lsm_audit.c @@ -313,12 +313,8 @@ static void dump_common_audit_data(struct audit_buffer *ab,  			}  			case AF_UNIX:  				u = unix_sk(sk); -				if (u->dentry) { -					struct path path = { -						.dentry = u->dentry, -						.mnt = u->mnt -					}; -					audit_log_d_path(ab, " path=", &path); +				if (u->path.dentry) { +					audit_log_d_path(ab, " path=", &u->path);  					break;  				}  				if (!u->addr)  |