dlm: fix socket shutdown
David Teigland
maintainerPATCH 1/1 dlm: fix socket shutdown
From: Patrick Caulfield <[email protected]>
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 <[email protected]>
Signed-off-by David Teigland <[email protected]>
fs/dlm/lowcomms.c +6 -3
@@ -260,7 +260,7 @@static void lowcomms_data_ready (struct sock *sk,int count_unused) {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); }
@@ -268,7 +268,7 @@ {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); }
@@ -1400,8 +1400,11 @@down (&connections_lock);for (i =0 ; i <= max_nodeid; i++) { con =__nodeid2con (i,0 ); -if (con) +if (con) { con->flags |=0xFF ; +if (con->sock) + con->sock->sk->sk_user_data =NULL ; + } }up (&connections_lock);
Hi,
Now applied to the -nmw git tree. Thanks,
Steve.
Quoted 44 lines · David Teigland
From: Patrick Caulfield <[email protected]>
This patch clears the
user_dataof 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 <[email protected]>Signed-off-by David Teigland <[email protected]>Index:
linux-quilt/fs/dlm/lowcomms.c
===================================================================fs/dlm/lowcomms.c +6
-3@@ -260,7 +260,7 @@static void lowcomms_data_ready (struct sock *sk,int count_unused) {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); }@@ -268,7 +268,7 @@ {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); }@@ -1400,8 +1400,11 @@down (&connections_lock);for (i =0 ; i <= max_nodeid; i++) { con =__nodeid2con (i,0 ); -if (con) +if (con) { con->flags |=0xFF ; +if (con->sock) + con->sock->sk->sk_user_data =NULL ; + } }up (&connections_lock);