[DLM] fix socket shutdown
This patch clears the user_data of active sockets as part of cleanup. This prevents any late-arriving data from trying to add jobs to the work queue while we are tidying up. Signed-Off-By: Patrick Caulfield <pcaulfie@redhat.com> Signed-Off-By: David Teigland <teigland@redhat.com> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
Родитель
89918647a4
Коммит
afb853fb4e
|
@ -260,7 +260,7 @@ static int nodeid_to_addr(int nodeid, struct sockaddr *retaddr)
|
||||||
static void lowcomms_data_ready(struct sock *sk, int count_unused)
|
static void lowcomms_data_ready(struct sock *sk, int count_unused)
|
||||||
{
|
{
|
||||||
struct connection *con = sock2con(sk);
|
struct connection *con = sock2con(sk);
|
||||||
if (!test_and_set_bit(CF_READ_PENDING, &con->flags))
|
if (con && !test_and_set_bit(CF_READ_PENDING, &con->flags))
|
||||||
queue_work(recv_workqueue, &con->rwork);
|
queue_work(recv_workqueue, &con->rwork);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,7 +268,7 @@ static void lowcomms_write_space(struct sock *sk)
|
||||||
{
|
{
|
||||||
struct connection *con = sock2con(sk);
|
struct connection *con = sock2con(sk);
|
||||||
|
|
||||||
if (!test_and_set_bit(CF_WRITE_PENDING, &con->flags))
|
if (con && !test_and_set_bit(CF_WRITE_PENDING, &con->flags))
|
||||||
queue_work(send_workqueue, &con->swork);
|
queue_work(send_workqueue, &con->swork);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1400,8 +1400,11 @@ void dlm_lowcomms_stop(void)
|
||||||
down(&connections_lock);
|
down(&connections_lock);
|
||||||
for (i = 0; i <= max_nodeid; i++) {
|
for (i = 0; i <= max_nodeid; i++) {
|
||||||
con = __nodeid2con(i, 0);
|
con = __nodeid2con(i, 0);
|
||||||
if (con)
|
if (con) {
|
||||||
con->flags |= 0xFF;
|
con->flags |= 0xFF;
|
||||||
|
if (con->sock)
|
||||||
|
con->sock->sk->sk_user_data = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
up(&connections_lock);
|
up(&connections_lock);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче