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

Commit aa395145 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

net: sk_sleep() helper



Define a new function to return the waitqueue of a "struct sock".

static inline wait_queue_head_t *sk_sleep(struct sock *sk)
{
	return sk->sk_sleep;
}

Change all read occurrences of sk_sleep by a call to this function.

Needed for a future RCU conversion. sk_sleep wont be a field directly
available.

Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ab930471
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -68,7 +68,7 @@ static int atmtcp_send_control(struct atm_vcc *vcc,int type,
	*(struct atm_vcc **) &new_msg->vcc = vcc;
	*(struct atm_vcc **) &new_msg->vcc = vcc;
	old_test = test_bit(flag,&vcc->flags);
	old_test = test_bit(flag,&vcc->flags);
	out_vcc->push(out_vcc,skb);
	out_vcc->push(out_vcc,skb);
	add_wait_queue(sk_atm(vcc)->sk_sleep, &wait);
	add_wait_queue(sk_sleep(sk_atm(vcc)), &wait);
	while (test_bit(flag,&vcc->flags) == old_test) {
	while (test_bit(flag,&vcc->flags) == old_test) {
		mb();
		mb();
		out_vcc = PRIV(vcc->dev) ? PRIV(vcc->dev)->vcc : NULL;
		out_vcc = PRIV(vcc->dev) ? PRIV(vcc->dev)->vcc : NULL;
@@ -80,7 +80,7 @@ static int atmtcp_send_control(struct atm_vcc *vcc,int type,
		schedule();
		schedule();
	}
	}
	set_current_state(TASK_RUNNING);
	set_current_state(TASK_RUNNING);
	remove_wait_queue(sk_atm(vcc)->sk_sleep, &wait);
	remove_wait_queue(sk_sleep(sk_atm(vcc)), &wait);
	return error;
	return error;
}
}


@@ -105,7 +105,7 @@ static int atmtcp_recv_control(const struct atmtcp_control *msg)
		    msg->type);
		    msg->type);
		return -EINVAL;
		return -EINVAL;
	}
	}
	wake_up(sk_atm(vcc)->sk_sleep);
	wake_up(sk_sleep(sk_atm(vcc)));
	return 0;
	return 0;
}
}


+2 −2
Original line number Original line Diff line number Diff line
@@ -246,8 +246,8 @@ static void macvtap_sock_write_space(struct sock *sk)
	    !test_and_clear_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags))
	    !test_and_clear_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags))
		return;
		return;


	if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
	if (sk_sleep(sk) && waitqueue_active(sk_sleep(sk)))
		wake_up_interruptible_poll(sk->sk_sleep, POLLOUT | POLLWRNORM | POLLWRBAND);
		wake_up_interruptible_poll(sk_sleep(sk), POLLOUT | POLLWRNORM | POLLWRBAND);
}
}


static int macvtap_open(struct inode *inode, struct file *file)
static int macvtap_open(struct inode *inode, struct file *file)
+2 −2
Original line number Original line Diff line number Diff line
@@ -868,8 +868,8 @@ static void tun_sock_write_space(struct sock *sk)
	if (!test_and_clear_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags))
	if (!test_and_clear_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags))
		return;
		return;


	if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
	if (sk_sleep(sk) && waitqueue_active(sk_sleep(sk)))
		wake_up_interruptible_sync_poll(sk->sk_sleep, POLLOUT |
		wake_up_interruptible_sync_poll(sk_sleep(sk), POLLOUT |
						POLLWRNORM | POLLWRBAND);
						POLLWRNORM | POLLWRBAND);


	tun = tun_sk(sk)->tun;
	tun = tun_sk(sk)->tun;
+2 −2
Original line number Original line Diff line number Diff line
@@ -599,9 +599,9 @@ static void iscsi_sw_tcp_conn_stop(struct iscsi_cls_conn *cls_conn, int flag)
	set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_rx);
	set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_rx);
	write_unlock_bh(&tcp_sw_conn->sock->sk->sk_callback_lock);
	write_unlock_bh(&tcp_sw_conn->sock->sk->sk_callback_lock);


	if (sock->sk->sk_sleep && waitqueue_active(sock->sk->sk_sleep)) {
	if (sk_sleep(sock->sk) && waitqueue_active(sk_sleep(sock->sk))) {
		sock->sk->sk_err = EIO;
		sock->sk->sk_err = EIO;
		wake_up_interruptible(sock->sk->sk_sleep);
		wake_up_interruptible(sk_sleep(sock->sk));
	}
	}


	iscsi_conn_stop(cls_conn, flag);
	iscsi_conn_stop(cls_conn, flag);
+7 −3
Original line number Original line Diff line number Diff line
@@ -1160,6 +1160,10 @@ static inline void sk_set_socket(struct sock *sk, struct socket *sock)
	sk->sk_socket = sock;
	sk->sk_socket = sock;
}
}


static inline wait_queue_head_t *sk_sleep(struct sock *sk)
{
	return sk->sk_sleep;
}
/* Detach socket from process context.
/* Detach socket from process context.
 * Announce socket dead, detach it from wait queue and inode.
 * Announce socket dead, detach it from wait queue and inode.
 * Note that parent inode held reference count on this struct sock,
 * Note that parent inode held reference count on this struct sock,
@@ -1346,8 +1350,8 @@ static inline int sk_has_allocations(const struct sock *sk)
 *   tp->rcv_nxt check   sock_def_readable
 *   tp->rcv_nxt check   sock_def_readable
 *   ...                 {
 *   ...                 {
 *   schedule               ...
 *   schedule               ...
 *                          if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
 *                          if (sk_sleep(sk) && waitqueue_active(sk_sleep(sk)))
 *                              wake_up_interruptible(sk->sk_sleep)
 *                              wake_up_interruptible(sk_sleep(sk))
 *                          ...
 *                          ...
 *                       }
 *                       }
 *
 *
@@ -1368,7 +1372,7 @@ static inline int sk_has_sleeper(struct sock *sk)
	 * This memory barrier is paired in the sock_poll_wait.
	 * This memory barrier is paired in the sock_poll_wait.
	 */
	 */
	smp_mb__after_lock();
	smp_mb__after_lock();
	return sk->sk_sleep && waitqueue_active(sk->sk_sleep);
	return sk_sleep(sk) && waitqueue_active(sk_sleep(sk));
}
}


/**
/**
Loading