Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 40ffe67d authored by Al Viro's avatar Al Viro
Browse files

switch unix_sock to struct path



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 38eff289
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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;
+15 −20
Original line number Diff line number Diff line
@@ -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 */
+1 −1
Original line number Diff line number Diff line
@@ -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) {
+2 −6
Original line number Diff line number Diff line
@@ -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)