nvmet-fc: free queue and assoc directly
authorDaniel Wagner <dwagner@suse.de>
Wed, 31 Jan 2024 08:51:05 +0000 (09:51 +0100)
committerKeith Busch <kbusch@kernel.org>
Thu, 1 Feb 2024 15:44:51 +0000 (07:44 -0800)
Neither struct nvmet_fc_tgt_queue nor struct nvmet_fc_tgt_assoc are data
structure which are used in a RCU context. So there is no reason to
delay the free operation.

Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Daniel Wagner <dwagner@suse.de>
Signed-off-by: Keith Busch <kbusch@kernel.org>
drivers/nvme/target/fc.c

index 11ecfef41bd154551f4bbcc2f09142565fb2aa55..b44b99525c44646c182c941d4c7aa4c76e93cc2d 100644 (file)
@@ -145,7 +145,6 @@ struct nvmet_fc_tgt_queue {
        struct list_head                avail_defer_list;
        struct workqueue_struct         *work_q;
        struct kref                     ref;
-       struct rcu_head                 rcu;
        /* array of fcp_iods */
        struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
 } __aligned(sizeof(unsigned long long));
@@ -169,7 +168,6 @@ struct nvmet_fc_tgt_assoc {
        struct nvmet_fc_tgt_queue       *queues[NVMET_NR_QUEUES + 1];
        struct kref                     ref;
        struct work_struct              del_work;
-       struct rcu_head                 rcu;
 };
 
 
@@ -852,7 +850,7 @@ nvmet_fc_tgt_queue_free(struct kref *ref)
 
        destroy_workqueue(queue->work_q);
 
-       kfree_rcu(queue, rcu);
+       kfree(queue);
 }
 
 static void
@@ -1185,8 +1183,8 @@ nvmet_fc_target_assoc_free(struct kref *ref)
        dev_info(tgtport->dev,
                "{%d:%d} Association freed\n",
                tgtport->fc_target_port.port_num, assoc->a_id);
-       kfree_rcu(assoc, rcu);
        nvmet_fc_tgtport_put(tgtport);
+       kfree(assoc);
 }
 
 static void