Commit c5e27b1a authored by Daniel Wagner's avatar Daniel Wagner Committed by Keith Busch
Browse files

nvmet-fc: free queue and assoc directly



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: default avatarHannes Reinecke <hare@suse.de>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarDaniel Wagner <dwagner@suse.de>
Signed-off-by: default avatarKeith Busch <kbusch@kernel.org>
parent 4049dc96
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -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