nvme-fc: ensure association_id is cleared regardless of a Disconnect LS
authorJames Smart <jsmart2021@gmail.com>
Fri, 27 Sep 2019 21:27:22 +0000 (14:27 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 4 Nov 2019 17:56:40 +0000 (10:56 -0700)
Code today only clears the association_id if a Disconnect LS is transmit.

Remove ambiguity and unconditionally clear the association_id if the
association has been terminated.

Signed-off-by: James Smart <jsmart2021@gmail.com>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/nvme/host/fc.c

index 2284b7f9e8b9a3276ebb6c3db8a3004f15b9fe05..714a1c3aa0c5b820d113e55c3756eb939cf24eb2 100644 (file)
@@ -1462,9 +1462,6 @@ nvme_fc_xmt_disconnect_assoc(struct nvme_fc_ctrl *ctrl)
                                nvme_fc_disconnect_assoc_done);
        if (ret)
                kfree(lsop);
-
-       /* only meaningful part to terminating the association */
-       ctrl->association_id = 0;
 }
 
 
@@ -2743,6 +2740,7 @@ out_term_aen_ops:
 out_disconnect_admin_queue:
        /* send a Disconnect(association) LS to fc-nvme target */
        nvme_fc_xmt_disconnect_assoc(ctrl);
+       ctrl->association_id = 0;
 out_delete_hw_queue:
        __nvme_fc_delete_hw_queue(ctrl, &ctrl->queues[0], 0);
 out_free_queue:
@@ -2834,6 +2832,8 @@ nvme_fc_delete_association(struct nvme_fc_ctrl *ctrl)
        if (ctrl->association_id)
                nvme_fc_xmt_disconnect_assoc(ctrl);
 
+       ctrl->association_id = 0;
+
        if (ctrl->ctrl.tagset) {
                nvme_fc_delete_hw_io_queues(ctrl);
                nvme_fc_free_io_queues(ctrl);