OSDN Git Service

net/smc: move code to clear the conn->lgr field
authorKarsten Graul <kgraul@linux.ibm.com>
Thu, 7 Feb 2019 14:56:19 +0000 (15:56 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 8 Feb 2019 02:06:19 +0000 (18:06 -0800)
The lgr field of an smc_connection is set in smc_conn_create() and
should be cleared in smc_conn_free() for consistency reasons, so move
the responsible code.

Signed-off-by: Karsten Graul <kgraul@linux.ibm.com>
Signed-off-by: Ursula Braun <ubraun@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/smc/smc_core.c

index 35c1cdc..a1a6d35 100644 (file)
@@ -118,7 +118,6 @@ static void __smc_lgr_unregister_conn(struct smc_connection *conn)
        rb_erase(&conn->alert_node, &lgr->conns_all);
        lgr->conns_num--;
        conn->alert_token_local = 0;
-       conn->lgr = NULL;
        sock_put(&smc->sk); /* sock_hold in smc_lgr_register_conn() */
 }
 
@@ -331,8 +330,9 @@ void smc_conn_free(struct smc_connection *conn)
        } else {
                smc_cdc_tx_dismiss_slots(conn);
        }
-       smc_lgr_unregister_conn(conn);          /* unsets conn->lgr */
+       smc_lgr_unregister_conn(conn);
        smc_buf_unuse(conn, lgr);               /* allow buffer reuse */
+       conn->lgr = NULL;
 
        if (!lgr->conns_num)
                smc_lgr_schedule_free_work(lgr);
@@ -462,6 +462,7 @@ static void __smc_lgr_terminate(struct smc_link_group *lgr)
                sock_hold(&smc->sk); /* sock_put in close work */
                conn->local_tx_ctrl.conn_state_flags.peer_conn_abort = 1;
                __smc_lgr_unregister_conn(conn);
+               conn->lgr = NULL;
                write_unlock_bh(&lgr->conns_lock);
                if (!schedule_work(&conn->close_work))
                        sock_put(&smc->sk);