From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D20A13D563 for ; Mon, 18 Dec 2023 15:35:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 35F5E1F37E; Mon, 18 Dec 2023 15:35:49 +0000 (UTC) Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id 2455E13BC8; Mon, 18 Dec 2023 15:35:49 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id unYoCNVmgGUTfQAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 15:35:49 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 01/16] nvmet: report ioccsz and iorcsz for disc ctrl Date: Mon, 18 Dec 2023 16:30:49 +0100 Message-ID: <20231218153105.12717-2-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Spam-Level: X-Spam-Flag: NO X-Spamd-Result: default: False [-4.00 / 50.00]; REPLY(-4.00)[] Authentication-Results: smtp-out2.suse.de; none X-Spam-Score: -4.00 X-Rspamd-Queue-Id: 35F5E1F37E Content-Type: text/plain; charset="utf-8" The host started to verify the ioccsz and iorcsz values. I/O controllers return valid values but not the discovery controllers. Use the same values as for I/O controllers. Fixes: 2fcd3ab39826 ("nvme-fabrics: check ioccsz and iorcsz") Signed-off-by: Daniel Wagner --- drivers/nvme/target/discovery.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/nvme/target/discovery.c b/drivers/nvme/target/discover= y.c index 668d257fa986..e3c4d247dd23 100644 --- a/drivers/nvme/target/discovery.c +++ b/drivers/nvme/target/discovery.c @@ -249,6 +249,7 @@ static void nvmet_execute_disc_identify(struct nvmet_re= q *req) { struct nvmet_ctrl *ctrl =3D req->sq->ctrl; struct nvme_id_ctrl *id; + u32 cmd_capsule_size; u16 status =3D 0; =20 if (!nvmet_check_transfer_len(req, NVME_IDENTIFY_DATA_SIZE)) @@ -294,6 +295,18 @@ static void nvmet_execute_disc_identify(struct nvmet_r= eq *req) =20 strscpy(id->subnqn, ctrl->subsys->subsysnqn, sizeof(id->subnqn)); =20 + /* + * Max command capsule size is sqe + in-capsule data size. + * Disable in-capsule data for Metadata capable controllers. + */ + cmd_capsule_size =3D sizeof(struct nvme_command); + if (!ctrl->pi_support) + cmd_capsule_size +=3D req->port->inline_data_size; + id->ioccsz =3D cpu_to_le32(cmd_capsule_size / 16); + + /* Max response capsule size is cqe */ + id->iorcsz =3D cpu_to_le32(sizeof(struct nvme_completion) / 16); + status =3D nvmet_copy_to_sgl(req, 0, id, sizeof(*id)); =20 kfree(id); --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 711395A84A for ; Mon, 18 Dec 2023 15:38:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="BImCcHWe"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="LozNsC1+"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="BImCcHWe"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="LozNsC1+" Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [10.150.64.98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 167DE1F37E; Mon, 18 Dec 2023 15:38:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702913884; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=frwg+Fv/Md0nePEz72ENwBzVnmZF61u9zbsIo6n5Yd0=; b=BImCcHWe6ul37PlrDid7FsfnhEKN8g9Zj740OF1fUEcjvGCEynQjHs+5RN/wfG7bINC+qN YDl6OBhF5HdgZsriUAYHyDPQOeVBnGDBCg4mgGRgEn5mkda7T1HpD/0KdmztxNHggRTVkA KQPecU/lPWGZw3bOu+hQ5uayjx1P2e8= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702913884; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=frwg+Fv/Md0nePEz72ENwBzVnmZF61u9zbsIo6n5Yd0=; b=LozNsC1+/s2Kyk6sJQCld43PHLM5pzF0qO+YhaIYuLxsyeBg6GUYcfwR9/tT5Puq3ZJnM3 8LlOPzIknls0o6CA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702913884; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=frwg+Fv/Md0nePEz72ENwBzVnmZF61u9zbsIo6n5Yd0=; b=BImCcHWe6ul37PlrDid7FsfnhEKN8g9Zj740OF1fUEcjvGCEynQjHs+5RN/wfG7bINC+qN YDl6OBhF5HdgZsriUAYHyDPQOeVBnGDBCg4mgGRgEn5mkda7T1HpD/0KdmztxNHggRTVkA KQPecU/lPWGZw3bOu+hQ5uayjx1P2e8= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702913884; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=frwg+Fv/Md0nePEz72ENwBzVnmZF61u9zbsIo6n5Yd0=; b=LozNsC1+/s2Kyk6sJQCld43PHLM5pzF0qO+YhaIYuLxsyeBg6GUYcfwR9/tT5Puq3ZJnM3 8LlOPzIknls0o6CA== Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id 027E913BC8; Mon, 18 Dec 2023 15:38:04 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id AT5RAFxngGWufQAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 15:38:03 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 02/16] nvmet-fc: remove unnecessary bracket Date: Mon, 18 Dec 2023 16:30:50 +0100 Message-ID: <20231218153105.12717-3-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Spam-Level: X-Spamd-Result: default: False [0.82 / 50.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; R_MISSING_CHARSET(2.50)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; REPLY(-4.00)[]; BROKEN_CONTENT_TYPE(1.50)[]; RCVD_COUNT_THREE(0.00)[3]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_SEVEN(0.00)[8]; MID_CONTAINS_FROM(1.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:email]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_ALL(0.00)[]; BAYES_HAM(-0.08)[63.42%] Authentication-Results: smtp-out2.suse.de; none X-Spam-Score: 0.82 X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" There is no need for the bracket around the identifier. Remove it. Signed-off-by: Daniel Wagner Reviewed-by: Christoph Hellwig Reviewed-by: Hannes Reinecke --- drivers/nvme/target/fc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c index bd59990b5250..bda7a3009e85 100644 --- a/drivers/nvme/target/fc.c +++ b/drivers/nvme/target/fc.c @@ -1031,7 +1031,7 @@ nvmet_fc_match_hostport(struct nvmet_fc_tgtport *tgtp= ort, void *hosthandle) list_for_each_entry(host, &tgtport->host_list, host_list) { if (host->hosthandle =3D=3D hosthandle && !host->invalid) { if (nvmet_fc_hostport_get(host)) - return (host); + return host; } } =20 --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 961D442378 for ; Mon, 18 Dec 2023 15:40:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id E234B21F89; Mon, 18 Dec 2023 15:40:22 +0000 (UTC) Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id D020513BC8; Mon, 18 Dec 2023 15:40:22 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id rfZ7MuZngGVBfgAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 15:40:22 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 03/16] nvmet-trace: avoid dereferencing pointer too early Date: Mon, 18 Dec 2023 16:30:51 +0100 Message-ID: <20231218153105.12717-4-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Spam-Level: X-Spam-Flag: NO X-Spamd-Result: default: False [-4.00 / 50.00]; REPLY(-4.00)[] Authentication-Results: smtp-out1.suse.de; none X-Spam-Score: -4.00 X-Rspamd-Queue-Id: E234B21F89 Content-Type: text/plain; charset="utf-8" The first command issued from the host to the target is the fabrics connect command. At this point, neither the target queue nor the controller have been allocated. But we already try to trace this command in nvmet_req_init. Reported by KASAN. Reviewed-by: Hannes Reinecke Signed-off-by: Daniel Wagner Reviewed-by: Christoph Hellwig --- drivers/nvme/target/trace.c | 6 +++--- drivers/nvme/target/trace.h | 28 +++++++++++++++++----------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/drivers/nvme/target/trace.c b/drivers/nvme/target/trace.c index bff454d46255..6ee1f3db81d0 100644 --- a/drivers/nvme/target/trace.c +++ b/drivers/nvme/target/trace.c @@ -211,7 +211,7 @@ const char *nvmet_trace_disk_name(struct trace_seq *p, = char *name) return ret; } =20 -const char *nvmet_trace_ctrl_name(struct trace_seq *p, struct nvmet_ctrl *= ctrl) +const char *nvmet_trace_ctrl_id(struct trace_seq *p, u16 ctrl_id) { const char *ret =3D trace_seq_buffer_ptr(p); =20 @@ -224,8 +224,8 @@ const char *nvmet_trace_ctrl_name(struct trace_seq *p, = struct nvmet_ctrl *ctrl) * If we can know the extra data of the connect command in this stage, * we can update this print statement later. */ - if (ctrl) - trace_seq_printf(p, "%d", ctrl->cntlid); + if (ctrl_id) + trace_seq_printf(p, "%d", ctrl_id); else trace_seq_printf(p, "_"); trace_seq_putc(p, 0); diff --git a/drivers/nvme/target/trace.h b/drivers/nvme/target/trace.h index 6109b3806b12..68f5317b1251 100644 --- a/drivers/nvme/target/trace.h +++ b/drivers/nvme/target/trace.h @@ -32,18 +32,24 @@ const char *nvmet_trace_parse_fabrics_cmd(struct trace_= seq *p, u8 fctype, nvmet_trace_parse_nvm_cmd(p, opcode, cdw10) : \ nvmet_trace_parse_admin_cmd(p, opcode, cdw10))) =20 -const char *nvmet_trace_ctrl_name(struct trace_seq *p, struct nvmet_ctrl *= ctrl); -#define __print_ctrl_name(ctrl) \ - nvmet_trace_ctrl_name(p, ctrl) +const char *nvmet_trace_ctrl_id(struct trace_seq *p, u16 ctrl_id); +#define __print_ctrl_id(ctrl_id) \ + nvmet_trace_ctrl_id(p, ctrl_id) =20 const char *nvmet_trace_disk_name(struct trace_seq *p, char *name); #define __print_disk_name(name) \ nvmet_trace_disk_name(p, name) =20 #ifndef TRACE_HEADER_MULTI_READ -static inline struct nvmet_ctrl *nvmet_req_to_ctrl(struct nvmet_req *req) +static inline u16 nvmet_req_to_ctrl_id(struct nvmet_req *req) { - return req->sq->ctrl; + /* + * The queue and controller pointer are not valid until an association + * has been established. + */ + if (!req->sq || !req->sq->ctrl) + return 0; + return req->sq->ctrl->cntlid; } =20 static inline void __assign_req_name(char *name, struct nvmet_req *req) @@ -63,7 +69,7 @@ TRACE_EVENT(nvmet_req_init, TP_ARGS(req, cmd), TP_STRUCT__entry( __field(struct nvme_command *, cmd) - __field(struct nvmet_ctrl *, ctrl) + __field(u16, ctrl_id) __array(char, disk, DISK_NAME_LEN) __field(int, qid) __field(u16, cid) @@ -76,7 +82,7 @@ TRACE_EVENT(nvmet_req_init, ), TP_fast_assign( __entry->cmd =3D cmd; - __entry->ctrl =3D nvmet_req_to_ctrl(req); + __entry->ctrl_id =3D nvmet_req_to_ctrl_id(req); __assign_req_name(__entry->disk, req); __entry->qid =3D req->sq->qid; __entry->cid =3D cmd->common.command_id; @@ -90,7 +96,7 @@ TRACE_EVENT(nvmet_req_init, ), TP_printk("nvmet%s: %sqid=3D%d, cmdid=3D%u, nsid=3D%u, flags=3D%#x, " "meta=3D%#llx, cmd=3D(%s, %s)", - __print_ctrl_name(__entry->ctrl), + __print_ctrl_id(__entry->ctrl_id), __print_disk_name(__entry->disk), __entry->qid, __entry->cid, __entry->nsid, __entry->flags, __entry->metadata, @@ -104,7 +110,7 @@ TRACE_EVENT(nvmet_req_complete, TP_PROTO(struct nvmet_req *req), TP_ARGS(req), TP_STRUCT__entry( - __field(struct nvmet_ctrl *, ctrl) + __field(u16, ctrl_id) __array(char, disk, DISK_NAME_LEN) __field(int, qid) __field(int, cid) @@ -112,7 +118,7 @@ TRACE_EVENT(nvmet_req_complete, __field(u16, status) ), TP_fast_assign( - __entry->ctrl =3D nvmet_req_to_ctrl(req); + __entry->ctrl_id =3D nvmet_req_to_ctrl_id(req); __entry->qid =3D req->cq->qid; __entry->cid =3D req->cqe->command_id; __entry->result =3D le64_to_cpu(req->cqe->result.u64); @@ -120,7 +126,7 @@ TRACE_EVENT(nvmet_req_complete, __assign_req_name(__entry->disk, req); ), TP_printk("nvmet%s: %sqid=3D%d, cmdid=3D%u, res=3D%#llx, status=3D%#x", - __print_ctrl_name(__entry->ctrl), + __print_ctrl_id(__entry->ctrl_id), __print_disk_name(__entry->disk), __entry->qid, __entry->cid, __entry->result, __entry->status) =20 --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E6B9E74E04 for ; Mon, 18 Dec 2023 15:42:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="L19Sc9vV"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="DqqX81U+"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="L19Sc9vV"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="DqqX81U+" Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [10.150.64.98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 154B71F37E; Mon, 18 Dec 2023 15:42:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702914157; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=v1dKZcA4ezXwEdxeSlAbqNEVQJZBbN3wkn2D2BYxnGI=; b=L19Sc9vVeoGzkuaT2qhVSvnG1e+bsLsIbDUptKVOlITXwsbz8oar6ZZiFL7/YNxqipOTqr /Nz3myfKu/2YrcLBQ5sEOOAO39HhKdsxqEgACVxrUl5wyRvzZGvuJf7GJvH8s4g5HN28pg SV4xV6TSZxp67M6sRZDmFOe0T4RRR+g= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702914157; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=v1dKZcA4ezXwEdxeSlAbqNEVQJZBbN3wkn2D2BYxnGI=; b=DqqX81U+go088EIo54twaH9n2d7KVeW8hu+UFLich8bj+0EIpHlQFpXv3AFSLrcDJipvhD E21TFtbKbh+D93AQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702914157; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=v1dKZcA4ezXwEdxeSlAbqNEVQJZBbN3wkn2D2BYxnGI=; b=L19Sc9vVeoGzkuaT2qhVSvnG1e+bsLsIbDUptKVOlITXwsbz8oar6ZZiFL7/YNxqipOTqr /Nz3myfKu/2YrcLBQ5sEOOAO39HhKdsxqEgACVxrUl5wyRvzZGvuJf7GJvH8s4g5HN28pg SV4xV6TSZxp67M6sRZDmFOe0T4RRR+g= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702914157; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=v1dKZcA4ezXwEdxeSlAbqNEVQJZBbN3wkn2D2BYxnGI=; b=DqqX81U+go088EIo54twaH9n2d7KVeW8hu+UFLich8bj+0EIpHlQFpXv3AFSLrcDJipvhD E21TFtbKbh+D93AQ== Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id 06A4213BC8; Mon, 18 Dec 2023 15:42:37 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id ea/SAG1ogGXOfgAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 15:42:37 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 04/16] nvmet-trace: null terminate device name string correctly Date: Mon, 18 Dec 2023 16:30:52 +0100 Message-ID: <20231218153105.12717-5-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Spam-Level: X-Spamd-Result: default: False [0.90 / 50.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; R_MISSING_CHARSET(2.50)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; REPLY(-4.00)[]; BROKEN_CONTENT_TYPE(1.50)[]; RCVD_COUNT_THREE(0.00)[3]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_SEVEN(0.00)[8]; MID_CONTAINS_FROM(1.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:email]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_ALL(0.00)[]; BAYES_HAM(-0.00)[44.81%] Authentication-Results: smtp-out2.suse.de; none X-Spam-Score: 0.90 X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" strlen returns the string length excluding the null byte ('\0'), thus we cut the last chars from the device name. While at it, switch snprintf to ensure we always have properly terminated string. Reviewed-by: Hannes Reinecke Signed-off-by: Daniel Wagner Reviewed-by: Christoph Hellwig --- drivers/nvme/target/trace.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/nvme/target/trace.h b/drivers/nvme/target/trace.h index 68f5317b1251..952e69f9737f 100644 --- a/drivers/nvme/target/trace.h +++ b/drivers/nvme/target/trace.h @@ -59,8 +59,9 @@ static inline void __assign_req_name(char *name, struct n= vmet_req *req) return; } =20 - strncpy(name, req->ns->device_path, - min_t(size_t, DISK_NAME_LEN, strlen(req->ns->device_path))); + snprintf(name, + min_t(size_t, DISK_NAME_LEN, strlen(req->ns->device_path) + 1), + "%s", req->ns->device_path); } #endif =20 --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C09C61D137 for ; Mon, 18 Dec 2023 15:44:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="bRdcAkZQ"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="wpY+fyfs"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="Z7Sht93I"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="uJTPrEe7" Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [10.150.64.98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id E189D21F89; Mon, 18 Dec 2023 15:44:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702914292; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Sb3ykHY0s0lUwPOEpTQTKX0dDN9JeufCaNGO/9uVytU=; b=bRdcAkZQuGRc4eQLw8ed49JvJ7Vz8idsz8j/Wbfj/yVy2XjvOLN5efe/lr/1nDGkP+1/kz LZENPBUvI4z+UmS6M4SAJWafIV0VkmYbeTsz99MTUSqfcyncTA/4dbZs/gYYGrAjO98CGy WL7ngNsoGrjHNiDdf47DJdPjF6K+vAk= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702914292; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Sb3ykHY0s0lUwPOEpTQTKX0dDN9JeufCaNGO/9uVytU=; b=wpY+fyfsAzV3vI0PMl2YLuPGwEFIpcNTLrOMAUMvhb8h81BjXgoCJzwMTJo6IePAH0qI3v wRmb+CQgp0vHTnBA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702914291; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Sb3ykHY0s0lUwPOEpTQTKX0dDN9JeufCaNGO/9uVytU=; b=Z7Sht93ICnE3oJDjxdA3ZdGBvvJE7nzAtpMfLo3kmbUoWuu1SGISjK3u23uQEG/rcuzDli kfp91NBUtdKE/Gtd2eCV6H0YFFK3/kDlBDITsvEUYb48kfTvdxUNScqRe/ypdLbnFO/nsx GHFCyGRkr5NxGJAK+NRTF//sc5jd19Y= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702914291; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Sb3ykHY0s0lUwPOEpTQTKX0dDN9JeufCaNGO/9uVytU=; b=uJTPrEe7Jte0p/vm4b2wzrm1nulDkFRFrtN3wQa+G3fQyMA/LsHG1w0Cl9V9dMC2A8VrqC Mi0CRnmHxZY68LAA== Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id D2B2113BC8; Mon, 18 Dec 2023 15:44:51 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id S4h/MvNogGXqfgAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 15:44:51 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 05/16] nvmet-fcloop: Remove remote port from list when unlinking Date: Mon, 18 Dec 2023 16:30:53 +0100 Message-ID: <20231218153105.12717-6-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Spam-Level: X-Spamd-Result: default: False [0.89 / 50.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; R_MISSING_CHARSET(2.50)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; REPLY(-4.00)[]; BROKEN_CONTENT_TYPE(1.50)[]; RCVD_COUNT_THREE(0.00)[3]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_SEVEN(0.00)[8]; MID_CONTAINS_FROM(1.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:email]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_ALL(0.00)[]; BAYES_HAM(-0.01)[49.98%] Authentication-Results: smtp-out1.suse.de; none X-Spam-Score: 0.89 X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" The remote port is removed too late from fcloop_nports list. Remove it when port is unregistered. This prevents a busy loop in fcloop_exit, because it is possible the remote port is found in the list and thus we will never progress. The kernel log will be spammed with nvme_fcloop: fcloop_exit: Failed deleting remote port nvme_fcloop: fcloop_exit: Failed deleting target port Signed-off-by: Daniel Wagner Reviewed-by: Christoph Hellwig Reviewed-by: Hannes Reinecke --- drivers/nvme/target/fcloop.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/nvme/target/fcloop.c b/drivers/nvme/target/fcloop.c index c65a73433c05..ead349af30f1 100644 --- a/drivers/nvme/target/fcloop.c +++ b/drivers/nvme/target/fcloop.c @@ -995,11 +995,6 @@ fcloop_nport_free(struct kref *ref) { struct fcloop_nport *nport =3D container_of(ref, struct fcloop_nport, ref); - unsigned long flags; - - spin_lock_irqsave(&fcloop_lock, flags); - list_del(&nport->nport_list); - spin_unlock_irqrestore(&fcloop_lock, flags); =20 kfree(nport); } @@ -1357,6 +1352,8 @@ __unlink_remote_port(struct fcloop_nport *nport) nport->tport->remoteport =3D NULL; nport->rport =3D NULL; =20 + list_del(&nport->nport_list); + return rport; } =20 --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E6073A1D0 for ; Mon, 18 Dec 2023 15:47:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id B729621F89; Mon, 18 Dec 2023 15:47:06 +0000 (UTC) Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id A811913BC8; Mon, 18 Dec 2023 15:47:06 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id NjsuKHppgGUXfwAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 15:47:06 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 06/16] nvme-fc: Do not wait in vain when unloading module Date: Mon, 18 Dec 2023 16:30:54 +0100 Message-ID: <20231218153105.12717-7-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Spam-Level: X-Spam-Flag: NO X-Spamd-Result: default: False [-4.00 / 50.00]; REPLY(-4.00)[] Authentication-Results: smtp-out1.suse.de; none X-Spam-Score: -4.00 X-Rspamd-Queue-Id: B729621F89 Content-Type: text/plain; charset="utf-8" The module unload code will wait for a controller to be delete even when there is no controller and we wait for completion forever to happen. Thus only wait for the completion when there is a controller which needs to be removed. Signed-off-by: Daniel Wagner Reviewed-by: Hannes Reinecke --- drivers/nvme/host/fc.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c index 15dc9dfe88a9..69f7943c5056 100644 --- a/drivers/nvme/host/fc.c +++ b/drivers/nvme/host/fc.c @@ -3947,10 +3947,11 @@ static int __init nvme_fc_init_module(void) return ret; } =20 -static void +static bool nvme_fc_delete_controllers(struct nvme_fc_rport *rport) { struct nvme_fc_ctrl *ctrl; + bool cleanup =3D false; =20 spin_lock(&rport->lock); list_for_each_entry(ctrl, &rport->ctrl_list, ctrl_list) { @@ -3958,21 +3959,28 @@ nvme_fc_delete_controllers(struct nvme_fc_rport *rp= ort) "NVME-FC{%d}: transport unloading: deleting ctrl\n", ctrl->cnum); nvme_delete_ctrl(&ctrl->ctrl); + cleanup =3D true; } spin_unlock(&rport->lock); + + return cleanup; } =20 -static void +static bool nvme_fc_cleanup_for_unload(void) { struct nvme_fc_lport *lport; struct nvme_fc_rport *rport; + bool cleanup =3D false; =20 list_for_each_entry(lport, &nvme_fc_lport_list, port_list) { list_for_each_entry(rport, &lport->endp_list, endp_list) { - nvme_fc_delete_controllers(rport); + if (nvme_fc_delete_controllers(rport)) + cleanup =3D true; } } + + return cleanup; } =20 static void __exit nvme_fc_exit_module(void) @@ -3982,10 +3990,8 @@ static void __exit nvme_fc_exit_module(void) =20 spin_lock_irqsave(&nvme_fc_lock, flags); nvme_fc_waiting_to_unload =3D true; - if (!list_empty(&nvme_fc_lport_list)) { - need_cleanup =3D true; - nvme_fc_cleanup_for_unload(); - } + if (!list_empty(&nvme_fc_lport_list)) + need_cleanup =3D nvme_fc_cleanup_for_unload(); spin_unlock_irqrestore(&nvme_fc_lock, flags); if (need_cleanup) { pr_info("%s: waiting for ctlr deletes\n", __func__); --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4685B5A84D for ; Mon, 18 Dec 2023 15:49:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="I1WW/2Yi"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="WVXkYC6f"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="I1WW/2Yi"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="WVXkYC6f" Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [10.150.64.98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 88D411FD48; Mon, 18 Dec 2023 15:49:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702914561; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jEDhLc4jQdXXTJgtSxhlyCdpiTkBcsIA12np3rAsa8Y=; b=I1WW/2YiqJ8hfTQulgEFb5CoSJKSeekBRCgLecy5L/P68I/YNUgiUCTAv24YVZ6BWy15Dw xPd2asIL8jWv6E1fs/PxgtInhi9WqYDkk+zZf6ogvsH7f1nJYxe2Lx9zL2hqxGF3EZ/Ceh AMz4upviPFh8SDeAWjGTvU5mIQEj7kQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702914561; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jEDhLc4jQdXXTJgtSxhlyCdpiTkBcsIA12np3rAsa8Y=; b=WVXkYC6fLXCf+XlHomWRGhXfGDDfHIc0zid4fUcE4NM/ePwwQgFtjou79jbj1eB+Hpe9uQ OfST+GZYumbPFlCA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702914561; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jEDhLc4jQdXXTJgtSxhlyCdpiTkBcsIA12np3rAsa8Y=; b=I1WW/2YiqJ8hfTQulgEFb5CoSJKSeekBRCgLecy5L/P68I/YNUgiUCTAv24YVZ6BWy15Dw xPd2asIL8jWv6E1fs/PxgtInhi9WqYDkk+zZf6ogvsH7f1nJYxe2Lx9zL2hqxGF3EZ/Ceh AMz4upviPFh8SDeAWjGTvU5mIQEj7kQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702914561; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jEDhLc4jQdXXTJgtSxhlyCdpiTkBcsIA12np3rAsa8Y=; b=WVXkYC6fLXCf+XlHomWRGhXfGDDfHIc0zid4fUcE4NM/ePwwQgFtjou79jbj1eB+Hpe9uQ OfST+GZYumbPFlCA== Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id 7B06C13BC8; Mon, 18 Dec 2023 15:49:21 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id Xw4QHQFqgGWSfwAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 15:49:21 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 07/16] nvmet-fc: Release reference on target port Date: Mon, 18 Dec 2023 16:30:55 +0100 Message-ID: <20231218153105.12717-8-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Spam-Level: X-Spamd-Result: default: False [0.79 / 50.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; R_MISSING_CHARSET(2.50)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; REPLY(-4.00)[]; BROKEN_CONTENT_TYPE(1.50)[]; RCVD_COUNT_THREE(0.00)[3]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_SEVEN(0.00)[8]; MID_CONTAINS_FROM(1.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:email]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_ALL(0.00)[]; BAYES_HAM(-0.11)[66.19%] Authentication-Results: smtp-out2.suse.de; none X-Spam-Score: 0.79 X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" In case we return early out of __nvmet_fc_finish_ls_req() we still have to release the reference on the target port. Signed-off-by: Daniel Wagner Reviewed-by: Hannes Reinecke --- drivers/nvme/target/fc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c index bda7a3009e85..28e432e62361 100644 --- a/drivers/nvme/target/fc.c +++ b/drivers/nvme/target/fc.c @@ -360,6 +360,7 @@ __nvmet_fc_finish_ls_req(struct nvmet_fc_ls_req_op *lso= p) =20 if (!lsop->req_queued) { spin_unlock_irqrestore(&tgtport->lock, flags); + nvmet_fc_tgtport_put(tgtport); return; } =20 --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 333F315485 for ; Mon, 18 Dec 2023 15:51:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="Yyw+GZ3f"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="q2zNUTsA"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="Yyw+GZ3f"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="q2zNUTsA" Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [10.150.64.98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 5E4FB1F445; Mon, 18 Dec 2023 15:51:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702914696; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=YqGuPFrtbrN2FWZZjxVD7mfXJAhGmfEeq9rtj6/wYaA=; b=Yyw+GZ3fwz+aWhW3vC8lhHRmquNamtckqmYvfeAOZ7crpeXoXUrQH6Pc9a3mxatbHEFS4F UFSmOHzfOPyaopfNaPEUkvHLoFmjaeNMZOVZepDFbO4gW9nQX1vZ4kygVhgnXCgXlB6DKS gCCdfuqu0XmXczhEuXMrspIiDdiEujI= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702914696; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=YqGuPFrtbrN2FWZZjxVD7mfXJAhGmfEeq9rtj6/wYaA=; b=q2zNUTsA7Mv4kL3rzEaASJ72ZwNG3Ex04giS+QEKaPRqDvWu5JXsrSDFWs8dijWY6I1G4t zlW2VGzLkQrmFbBA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702914696; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=YqGuPFrtbrN2FWZZjxVD7mfXJAhGmfEeq9rtj6/wYaA=; b=Yyw+GZ3fwz+aWhW3vC8lhHRmquNamtckqmYvfeAOZ7crpeXoXUrQH6Pc9a3mxatbHEFS4F UFSmOHzfOPyaopfNaPEUkvHLoFmjaeNMZOVZepDFbO4gW9nQX1vZ4kygVhgnXCgXlB6DKS gCCdfuqu0XmXczhEuXMrspIiDdiEujI= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702914696; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=YqGuPFrtbrN2FWZZjxVD7mfXJAhGmfEeq9rtj6/wYaA=; b=q2zNUTsA7Mv4kL3rzEaASJ72ZwNG3Ex04giS+QEKaPRqDvWu5JXsrSDFWs8dijWY6I1G4t zlW2VGzLkQrmFbBA== Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id 4F15913BC8; Mon, 18 Dec 2023 15:51:36 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id LPZdEohqgGWLAQAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 15:51:36 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 08/16] nvmet-fc: untangle cross refcounting objects Date: Mon, 18 Dec 2023 16:30:56 +0100 Message-ID: <20231218153105.12717-9-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Spam-Level: X-Spamd-Result: default: False [-2.10 / 50.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; R_MISSING_CHARSET(2.50)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; REPLY(-4.00)[]; BROKEN_CONTENT_TYPE(1.50)[]; RCVD_COUNT_THREE(0.00)[3]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_SEVEN(0.00)[8]; MID_CONTAINS_FROM(1.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:email]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_ALL(0.00)[]; BAYES_HAM(-3.00)[100.00%] Authentication-Results: smtp-out2.suse.de; none X-Spam-Score: -2.10 X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" Associations take a refcount on queues, queues take a refcount on associations. The existing code lead to the situation that the target executes a disconnect and the host triggers a reconnect immediately. The reconnect command still finds an existing association and uses this. Though the reconnect crashes later on because nvmet_fc_delete_target_assoc() blindly goes ahead and removes resources while the reconnect code wants to use it. The problem is that nvmet_fc_find_target_assoc() is able to lookup an association which is being removed. So the first thing to address nvmet_fc_find_target_queue() is to remove the association out of the list and wait a RCU cycle and free resources in the free function callback of the kref_put(). The live time of the queues are strictly bound to the lifetime of an association. Thus we don't need to take reverse refcounts (queue -> association). Furthermore, streamline the cleanup code by using the workqueue for delete the association in nvmet_fc_ls_disconnect. This ensures, that we run through the same shutdown path in all non error cases. Reproducer: nvme/003 Signed-off-by: Daniel Wagner --- drivers/nvme/target/fc.c | 83 +++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 43 deletions(-) diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c index 28e432e62361..db992df13c73 100644 --- a/drivers/nvme/target/fc.c +++ b/drivers/nvme/target/fc.c @@ -166,6 +166,7 @@ struct nvmet_fc_tgt_assoc { struct nvmet_fc_hostport *hostport; struct nvmet_fc_ls_iod *rcv_disconn; struct list_head a_list; + struct nvmet_fc_tgt_queue *_queues[NVMET_NR_QUEUES + 1]; struct nvmet_fc_tgt_queue __rcu *queues[NVMET_NR_QUEUES + 1]; struct kref ref; struct work_struct del_work; @@ -803,14 +804,11 @@ nvmet_fc_alloc_target_queue(struct nvmet_fc_tgt_assoc= *assoc, if (!queue) return NULL; =20 - if (!nvmet_fc_tgt_a_get(assoc)) - goto out_free_queue; - queue->work_q =3D alloc_workqueue("ntfc%d.%d.%d", 0, 0, assoc->tgtport->fc_target_port.port_num, assoc->a_id, qid); if (!queue->work_q) - goto out_a_put; + goto out_free_queue; =20 queue->qid =3D qid; queue->sqsize =3D sqsize; @@ -831,7 +829,8 @@ nvmet_fc_alloc_target_queue(struct nvmet_fc_tgt_assoc *= assoc, if (ret) goto out_fail_iodlist; =20 - WARN_ON(assoc->queues[qid]); + WARN_ON(assoc->_queues[qid]); + assoc->_queues[qid] =3D queue; rcu_assign_pointer(assoc->queues[qid], queue); =20 return queue; @@ -839,8 +838,6 @@ nvmet_fc_alloc_target_queue(struct nvmet_fc_tgt_assoc *= assoc, out_fail_iodlist: nvmet_fc_destroy_fcp_iodlist(assoc->tgtport, queue); destroy_workqueue(queue->work_q); -out_a_put: - nvmet_fc_tgt_a_put(assoc); out_free_queue: kfree(queue); return NULL; @@ -853,12 +850,8 @@ nvmet_fc_tgt_queue_free(struct kref *ref) struct nvmet_fc_tgt_queue *queue =3D container_of(ref, struct nvmet_fc_tgt_queue, ref); =20 - rcu_assign_pointer(queue->assoc->queues[queue->qid], NULL); - nvmet_fc_destroy_fcp_iodlist(queue->assoc->tgtport, queue); =20 - nvmet_fc_tgt_a_put(queue->assoc); - destroy_workqueue(queue->work_q); =20 kfree_rcu(queue, rcu); @@ -1173,13 +1166,18 @@ nvmet_fc_target_assoc_free(struct kref *ref) struct nvmet_fc_tgtport *tgtport =3D assoc->tgtport; struct nvmet_fc_ls_iod *oldls; unsigned long flags; + int i; + + for (i =3D NVMET_NR_QUEUES; i >=3D 0; i--) { + if (assoc->_queues[i]) + nvmet_fc_delete_target_queue(assoc->_queues[i]); + } =20 /* Send Disconnect now that all i/o has completed */ nvmet_fc_xmt_disconnect_assoc(assoc); =20 nvmet_fc_free_hostport(assoc->hostport); spin_lock_irqsave(&tgtport->lock, flags); - list_del_rcu(&assoc->a_list); oldls =3D assoc->rcv_disconn; spin_unlock_irqrestore(&tgtport->lock, flags); /* if pending Rcv Disconnect Association LS, send rsp now */ @@ -1209,7 +1207,7 @@ static void nvmet_fc_delete_target_assoc(struct nvmet_fc_tgt_assoc *assoc) { struct nvmet_fc_tgtport *tgtport =3D assoc->tgtport; - struct nvmet_fc_tgt_queue *queue; + unsigned long flags; int i, terminating; =20 terminating =3D atomic_xchg(&assoc->terminating, 1); @@ -1218,29 +1216,25 @@ nvmet_fc_delete_target_assoc(struct nvmet_fc_tgt_as= soc *assoc) if (terminating) return; =20 + /* prevent new I/Os entering the queues */ + for (i =3D NVMET_NR_QUEUES; i >=3D 0; i--) + rcu_assign_pointer(assoc->queues[i], NULL); =20 - for (i =3D NVMET_NR_QUEUES; i >=3D 0; i--) { - rcu_read_lock(); - queue =3D rcu_dereference(assoc->queues[i]); - if (!queue) { - rcu_read_unlock(); - continue; - } + spin_lock_irqsave(&tgtport->lock, flags); + list_del_rcu(&assoc->a_list); + spin_unlock_irqrestore(&tgtport->lock, flags); =20 - if (!nvmet_fc_tgt_q_get(queue)) { - rcu_read_unlock(); - continue; - } - rcu_read_unlock(); - nvmet_fc_delete_target_queue(queue); - nvmet_fc_tgt_q_put(queue); + synchronize_rcu(); + + /* ensure all in-flight I/Os have been processed */ + for (i =3D NVMET_NR_QUEUES; i >=3D 0; i--) { + if (assoc->_queues[i]) + flush_workqueue(assoc->_queues[i]->work_q); } =20 dev_info(tgtport->dev, "{%d:%d} Association deleted\n", tgtport->fc_target_port.port_num, assoc->a_id); - - nvmet_fc_tgt_a_put(assoc); } =20 static struct nvmet_fc_tgt_assoc * @@ -1493,9 +1487,8 @@ __nvmet_fc_free_assocs(struct nvmet_fc_tgtport *tgtpo= rt) list_for_each_entry_rcu(assoc, &tgtport->assoc_list, a_list) { if (!nvmet_fc_tgt_a_get(assoc)) continue; - if (!queue_work(nvmet_wq, &assoc->del_work)) - /* already deleting - release local reference */ - nvmet_fc_tgt_a_put(assoc); + queue_work(nvmet_wq, &assoc->del_work); + nvmet_fc_tgt_a_put(assoc); } rcu_read_unlock(); } @@ -1548,9 +1541,8 @@ nvmet_fc_invalidate_host(struct nvmet_fc_target_port = *target_port, continue; assoc->hostport->invalid =3D 1; noassoc =3D false; - if (!queue_work(nvmet_wq, &assoc->del_work)) - /* already deleting - release local reference */ - nvmet_fc_tgt_a_put(assoc); + queue_work(nvmet_wq, &assoc->del_work); + nvmet_fc_tgt_a_put(assoc); } spin_unlock_irqrestore(&tgtport->lock, flags); =20 @@ -1594,9 +1586,8 @@ nvmet_fc_delete_ctrl(struct nvmet_ctrl *ctrl) nvmet_fc_tgtport_put(tgtport); =20 if (found_ctrl) { - if (!queue_work(nvmet_wq, &assoc->del_work)) - /* already deleting - release local reference */ - nvmet_fc_tgt_a_put(assoc); + queue_work(nvmet_wq, &assoc->del_work); + nvmet_fc_tgt_a_put(assoc); return; } =20 @@ -1626,6 +1617,8 @@ nvmet_fc_unregister_targetport(struct nvmet_fc_target= _port *target_port) /* terminate any outstanding associations */ __nvmet_fc_free_assocs(tgtport); =20 + flush_workqueue(nvmet_wq); + /* * should terminate LS's as well. However, LS's will be generated * at the tail end of association termination, so they likely don't @@ -1871,9 +1864,6 @@ nvmet_fc_ls_disconnect(struct nvmet_fc_tgtport *tgtpo= rt, sizeof(struct fcnvme_ls_disconnect_assoc_acc)), FCNVME_LS_DISCONNECT_ASSOC); =20 - /* release get taken in nvmet_fc_find_target_assoc */ - nvmet_fc_tgt_a_put(assoc); - /* * The rules for LS response says the response cannot * go back until ABTS's have been sent for all outstanding @@ -1888,8 +1878,6 @@ nvmet_fc_ls_disconnect(struct nvmet_fc_tgtport *tgtpo= rt, assoc->rcv_disconn =3D iod; spin_unlock_irqrestore(&tgtport->lock, flags); =20 - nvmet_fc_delete_target_assoc(assoc); - if (oldls) { dev_info(tgtport->dev, "{%d:%d} Multiple Disconnect Association LS's " @@ -1905,6 +1893,9 @@ nvmet_fc_ls_disconnect(struct nvmet_fc_tgtport *tgtpo= rt, nvmet_fc_xmt_ls_rsp(tgtport, oldls); } =20 + queue_work(nvmet_wq, &assoc->del_work); + nvmet_fc_tgt_a_put(assoc); + return false; } =20 @@ -2903,6 +2894,9 @@ nvmet_fc_remove_port(struct nvmet_port *port) =20 nvmet_fc_portentry_unbind(pe); =20 + /* terminate any outstanding associations */ + __nvmet_fc_free_assocs(pe->tgtport); + kfree(pe); } =20 @@ -2934,6 +2928,9 @@ static int __init nvmet_fc_init_module(void) =20 static void __exit nvmet_fc_exit_module(void) { + /* ensure any shutdown operation, e.g. delete ctrls have finished */ + flush_workqueue(nvmet_wq); + /* sanity check - all lports should be removed */ if (!list_empty(&nvmet_fc_target_list)) pr_warn("%s: targetport list not empty\n", __func__); --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1E1393A1D4 for ; Mon, 18 Dec 2023 15:53:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 575EE1F445; Mon, 18 Dec 2023 15:53:51 +0000 (UTC) Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id 4271D13BC8; Mon, 18 Dec 2023 15:53:51 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id 6iebDg9rgGXCAQAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 15:53:51 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 09/16] nvmet-fc: free queue and assoc directly Date: Mon, 18 Dec 2023 16:30:57 +0100 Message-ID: <20231218153105.12717-10-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Spam-Level: Authentication-Results: smtp-out2.suse.de; none X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Spamd-Result: default: False [-4.00 / 50.00]; REPLY(-4.00)[] X-Spam-Score: -4.00 X-Rspamd-Queue-Id: 575EE1F445 X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Daniel Wagner Reviewed-by: Hannes Reinecke --- drivers/nvme/target/fc.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c index db992df13c73..0adf65154e27 100644 --- a/drivers/nvme/target/fc.c +++ b/drivers/nvme/target/fc.c @@ -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)); @@ -170,7 +169,6 @@ struct nvmet_fc_tgt_assoc { struct nvmet_fc_tgt_queue __rcu *queues[NVMET_NR_QUEUES + 1]; struct kref ref; struct work_struct del_work; - struct rcu_head rcu; }; =20 =20 @@ -854,7 +852,7 @@ nvmet_fc_tgt_queue_free(struct kref *ref) =20 destroy_workqueue(queue->work_q); =20 - kfree_rcu(queue, rcu); + kfree(queue); } =20 static void @@ -1187,8 +1185,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); } =20 static void --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E338C1EA71 for ; Mon, 18 Dec 2023 15:56:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="IvMCQetk"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="lDuwQufK"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="IvMCQetk"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="lDuwQufK" Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [10.150.64.98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 1B3C71FD49; Mon, 18 Dec 2023 15:56:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702914966; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=MJ9W11dpS2QdHFN8Mkp+AZQ70TUdu4la3PZucmekhPg=; b=IvMCQetkPEO5Dzkze/zc4aOeAn6Dhn/CB0+bTm2N7DAq0YHW5eYbmw4QohuYp7d8m4WlwT ZTcCFzRLkrFi4PVjKxN9o1V7fjA+plcDZu+S/sc4od2mI1ij8UeF1ONeuEe9amZb5ApZmE O1FlSxZN6H4yJUKs0iBbbrsYTKVGcJA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702914966; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=MJ9W11dpS2QdHFN8Mkp+AZQ70TUdu4la3PZucmekhPg=; b=lDuwQufKhNUx5cp6whAEwIvUvrqo9olKG3fcGEx/kmLETuO5egagr+66pCmauXwr4LuNtb KoNxH7JrdVVqExDw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702914966; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=MJ9W11dpS2QdHFN8Mkp+AZQ70TUdu4la3PZucmekhPg=; b=IvMCQetkPEO5Dzkze/zc4aOeAn6Dhn/CB0+bTm2N7DAq0YHW5eYbmw4QohuYp7d8m4WlwT ZTcCFzRLkrFi4PVjKxN9o1V7fjA+plcDZu+S/sc4od2mI1ij8UeF1ONeuEe9amZb5ApZmE O1FlSxZN6H4yJUKs0iBbbrsYTKVGcJA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702914966; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=MJ9W11dpS2QdHFN8Mkp+AZQ70TUdu4la3PZucmekhPg=; b=lDuwQufKhNUx5cp6whAEwIvUvrqo9olKG3fcGEx/kmLETuO5egagr+66pCmauXwr4LuNtb KoNxH7JrdVVqExDw== Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id 09D4F13BC8; Mon, 18 Dec 2023 15:56:06 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id PlYvAZZrgGVXAgAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 15:56:06 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 10/16] nvmet-fc: hold reference on hostport match Date: Mon, 18 Dec 2023 16:30:58 +0100 Message-ID: <20231218153105.12717-11-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Spam-Level: X-Spamd-Result: default: False [0.90 / 50.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; R_MISSING_CHARSET(2.50)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; REPLY(-4.00)[]; BROKEN_CONTENT_TYPE(1.50)[]; RCVD_COUNT_THREE(0.00)[3]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_SEVEN(0.00)[8]; MID_CONTAINS_FROM(1.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:email]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_ALL(0.00)[]; BAYES_HAM(-0.00)[26.58%] Authentication-Results: smtp-out2.suse.de; none X-Spam-Score: 0.90 X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" The hostport data structure is shared between the association, this why we keep track of the users via a refcount. So we should not decrement the refcount on a match and free the hostport several times. Reported by KASAN. Signed-off-by: Daniel Wagner Reviewed-by: Hannes Reinecke --- drivers/nvme/target/fc.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c index 0adf65154e27..fa7a6d2edd88 100644 --- a/drivers/nvme/target/fc.c +++ b/drivers/nvme/target/fc.c @@ -1070,8 +1070,6 @@ nvmet_fc_alloc_hostport(struct nvmet_fc_tgtport *tgtp= ort, void *hosthandle) /* new allocation not needed */ kfree(newhost); newhost =3D match; - /* no new allocation - release reference */ - nvmet_fc_tgtport_put(tgtport); } else { newhost->tgtport =3D tgtport; newhost->hosthandle =3D hosthandle; --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 97FE549897 for ; Mon, 18 Dec 2023 15:58:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id DFFD321FA4; Mon, 18 Dec 2023 15:58:20 +0000 (UTC) Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id CD8EE13BD5; Mon, 18 Dec 2023 15:58:20 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id KWP4MBxsgGX5AgAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 15:58:20 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 11/16] nvmet-fc: remove null hostport pointer check Date: Mon, 18 Dec 2023 16:30:59 +0100 Message-ID: <20231218153105.12717-12-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Spam-Level: X-Spam-Flag: NO X-Spamd-Result: default: False [-4.00 / 50.00]; REPLY(-4.00)[] Authentication-Results: smtp-out1.suse.de; none X-Spam-Score: -4.00 X-Rspamd-Queue-Id: DFFD321FA4 Content-Type: text/plain; charset="utf-8" An association has always a valid hostport pointer. Remove useless null pointer check. Signed-off-by: Daniel Wagner Reviewed-by: Hannes Reinecke --- drivers/nvme/target/fc.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c index fa7a6d2edd88..c243085d6f42 100644 --- a/drivers/nvme/target/fc.c +++ b/drivers/nvme/target/fc.c @@ -489,8 +489,7 @@ nvmet_fc_xmt_disconnect_assoc(struct nvmet_fc_tgt_assoc= *assoc) * message is normal. Otherwise, send unless the hostport has * already been invalidated by the lldd. */ - if (!tgtport->ops->ls_req || !assoc->hostport || - assoc->hostport->invalid) + if (!tgtport->ops->ls_req || assoc->hostport->invalid) return; =20 lsop =3D kzalloc((sizeof(*lsop) + @@ -1530,8 +1529,7 @@ nvmet_fc_invalidate_host(struct nvmet_fc_target_port = *target_port, spin_lock_irqsave(&tgtport->lock, flags); list_for_each_entry_safe(assoc, next, &tgtport->assoc_list, a_list) { - if (!assoc->hostport || - assoc->hostport->hosthandle !=3D hosthandle) + if (assoc->hostport->hosthandle !=3D hosthandle) continue; if (!nvmet_fc_tgt_a_get(assoc)) continue; --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F2863D57B for ; Mon, 18 Dec 2023 16:00:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id C824421FC5; Mon, 18 Dec 2023 16:00:35 +0000 (UTC) Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id B426E13BC8; Mon, 18 Dec 2023 16:00:35 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id Gld1KqNsgGWzAwAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 16:00:35 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 12/16] nvmet-fc: do not tack refs on tgtports from assoc Date: Mon, 18 Dec 2023 16:31:00 +0100 Message-ID: <20231218153105.12717-13-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Spam-Level: Authentication-Results: smtp-out1.suse.de; none X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Spamd-Result: default: False [-4.00 / 50.00]; REPLY(-4.00)[] X-Spam-Score: -4.00 X-Rspamd-Queue-Id: C824421FC5 X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" The association life time is tight to the life time of the target port. That means we do not take extra a refcount when creating a association. Signed-off-by: Daniel Wagner Reviewed-by: Hannes Reinecke --- drivers/nvme/target/fc.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c index c243085d6f42..47cecc8c72b2 100644 --- a/drivers/nvme/target/fc.c +++ b/drivers/nvme/target/fc.c @@ -1109,12 +1109,9 @@ nvmet_fc_alloc_target_assoc(struct nvmet_fc_tgtport = *tgtport, void *hosthandle) if (idx < 0) goto out_free_assoc; =20 - if (!nvmet_fc_tgtport_get(tgtport)) - goto out_ida; - assoc->hostport =3D nvmet_fc_alloc_hostport(tgtport, hosthandle); if (IS_ERR(assoc->hostport)) - goto out_put; + goto out_ida; =20 assoc->tgtport =3D tgtport; assoc->a_id =3D idx; @@ -1144,8 +1141,6 @@ nvmet_fc_alloc_target_assoc(struct nvmet_fc_tgtport *= tgtport, void *hosthandle) =20 return assoc; =20 -out_put: - nvmet_fc_tgtport_put(tgtport); out_ida: ida_free(&tgtport->assoc_cnt, idx); out_free_assoc: @@ -1182,7 +1177,6 @@ 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); - nvmet_fc_tgtport_put(tgtport); kfree(assoc); } =20 --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 425DF49897 for ; Mon, 18 Dec 2023 16:02:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 8145E1FD4D; Mon, 18 Dec 2023 16:02:50 +0000 (UTC) Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id 7349013BC8; Mon, 18 Dec 2023 16:02:50 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id WUMpGyptgGUABAAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 16:02:50 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 13/16] nvmet-fc: abort command if when there is binding Date: Mon, 18 Dec 2023 16:31:01 +0100 Message-ID: <20231218153105.12717-14-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Spam-Level: X-Spam-Flag: NO X-Spamd-Result: default: False [-4.00 / 50.00]; REPLY(-4.00)[] Authentication-Results: smtp-out2.suse.de; none X-Spam-Score: -4.00 X-Rspamd-Queue-Id: 8145E1FD4D Content-Type: text/plain; charset="utf-8" WHen the target port has not active port binding, there is no point in trying to process the command as it has to fail anyway. Instead adding checks to all commands abort the command early. Signed-off-by: Daniel Wagner Reviewed-by: Hannes Reinecke --- drivers/nvme/target/fc.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c index 47cecc8c72b2..663c51c9fe53 100644 --- a/drivers/nvme/target/fc.c +++ b/drivers/nvme/target/fc.c @@ -1101,6 +1101,9 @@ nvmet_fc_alloc_target_assoc(struct nvmet_fc_tgtport *= tgtport, void *hosthandle) int idx; bool needrandom =3D true; =20 + if (!tgtport->pe) + return NULL; + assoc =3D kzalloc(sizeof(*assoc), GFP_KERNEL); if (!assoc) return NULL; @@ -2520,8 +2523,9 @@ nvmet_fc_handle_fcp_rqst(struct nvmet_fc_tgtport *tgt= port, =20 fod->req.cmd =3D &fod->cmdiubuf.sqe; fod->req.cqe =3D &fod->rspiubuf.cqe; - if (tgtport->pe) - fod->req.port =3D tgtport->pe->port; + if (!tgtport->pe) + goto transport_error; + fod->req.port =3D tgtport->pe->port; =20 /* clear any response payload */ memset(&fod->rspiubuf, 0, sizeof(fod->rspiubuf)); --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2F95F4FF98 for ; Mon, 18 Dec 2023 16:05:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 6C8831F445; Mon, 18 Dec 2023 16:05:05 +0000 (UTC) Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id 5AE7C13BD5; Mon, 18 Dec 2023 16:05:05 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id LMq+FLFtgGUtBAAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 16:05:05 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 14/16] nvmet-fc: free hostport after release reference to tgtport Date: Mon, 18 Dec 2023 16:31:02 +0100 Message-ID: <20231218153105.12717-15-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Spam-Level: Authentication-Results: smtp-out2.suse.de; none X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Spamd-Result: default: False [-4.00 / 50.00]; REPLY(-4.00)[] X-Spam-Score: -4.00 X-Rspamd-Queue-Id: 6C8831F445 X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" Give the ref back before destroying the hostport object to prevent a potential UAF. Signed-off-by: Daniel Wagner --- drivers/nvme/target/fc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c index 663c51c9fe53..23d8779dc221 100644 --- a/drivers/nvme/target/fc.c +++ b/drivers/nvme/target/fc.c @@ -986,8 +986,8 @@ nvmet_fc_hostport_free(struct kref *ref) spin_unlock_irqrestore(&tgtport->lock, flags); if (tgtport->ops->host_release && hostport->invalid) tgtport->ops->host_release(hostport->hosthandle); - kfree(hostport); nvmet_fc_tgtport_put(tgtport); + kfree(hostport); } =20 static void --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4A6025A84C for ; Mon, 18 Dec 2023 16:07:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="G1v6op6O"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="cS5EfduT"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="G1v6op6O"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="cS5EfduT" Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [10.150.64.98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 6538121FDD; Mon, 18 Dec 2023 16:07:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702915640; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=yK/Hr2YVEMCcXE4FG2IGAGx0ZBAT/0fwQl0qaqUb0zc=; b=G1v6op6ObibyZR/C0rZ28xAdfORhVbzUByAxvkvgs3dQ/32JZ6nXo6j4WkrGfU+XrOyLO5 PuifE0PrxHlh5UPnMko3qpBhplWb+6z5wVJ93Wlnem2ttO2LTjX9Sn/URtMoWENQDbAtdC ZN5xib6UQxzl4+L/ZMjLGpfU7ovJTu0= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702915640; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=yK/Hr2YVEMCcXE4FG2IGAGx0ZBAT/0fwQl0qaqUb0zc=; b=cS5EfduT2suNMErc3P2c4ho5D3m2AxJAY1ovUmq63jD5Nl/xloZj3qMBT8OJFtwpFPPqb1 2a8arXTTU0wmlUAQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702915640; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=yK/Hr2YVEMCcXE4FG2IGAGx0ZBAT/0fwQl0qaqUb0zc=; b=G1v6op6ObibyZR/C0rZ28xAdfORhVbzUByAxvkvgs3dQ/32JZ6nXo6j4WkrGfU+XrOyLO5 PuifE0PrxHlh5UPnMko3qpBhplWb+6z5wVJ93Wlnem2ttO2LTjX9Sn/URtMoWENQDbAtdC ZN5xib6UQxzl4+L/ZMjLGpfU7ovJTu0= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702915640; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=yK/Hr2YVEMCcXE4FG2IGAGx0ZBAT/0fwQl0qaqUb0zc=; b=cS5EfduT2suNMErc3P2c4ho5D3m2AxJAY1ovUmq63jD5Nl/xloZj3qMBT8OJFtwpFPPqb1 2a8arXTTU0wmlUAQ== Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id 4EAA713BD5; Mon, 18 Dec 2023 16:07:20 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id vYlJEThugGVcBAAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 16:07:20 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 15/16] nvmet-fc: avoid deadlock on delete association path Date: Mon, 18 Dec 2023 16:31:03 +0100 Message-ID: <20231218153105.12717-16-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Authentication-Results: smtp-out1.suse.de; none X-Spam-Level: ** X-Spam-Score: 2.21 X-Spamd-Result: default: False [2.21 / 50.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; R_MISSING_CHARSET(2.50)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; NEURAL_SPAM_SHORT(2.37)[0.789]; REPLY(-4.00)[]; BROKEN_CONTENT_TYPE(1.50)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; RCVD_COUNT_THREE(0.00)[3]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_SEVEN(0.00)[8]; MID_CONTAINS_FROM(1.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:email]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_ALL(0.00)[]; BAYES_HAM(-0.06)[60.96%] X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" When deleting an association the shutdown path is deadlocking because we try to flush the nvmet_wq nested. Avoid this by deadlock by deferring the put work into its own work item. Signed-off-by: Daniel Wagner Reviewed-by: Hannes Reinecke --- drivers/nvme/target/fc.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c index 23d8779dc221..30ba4ede333f 100644 --- a/drivers/nvme/target/fc.c +++ b/drivers/nvme/target/fc.c @@ -111,6 +111,8 @@ struct nvmet_fc_tgtport { struct nvmet_fc_port_entry *pe; struct kref ref; u32 max_sg_cnt; + + struct work_struct put_work; }; =20 struct nvmet_fc_port_entry { @@ -243,6 +245,13 @@ static LIST_HEAD(nvmet_fc_portentry_list); =20 static void nvmet_fc_handle_ls_rqst_work(struct work_struct *work); static void nvmet_fc_fcp_rqst_op_defer_work(struct work_struct *work); +static void nvmet_fc_put_tgtport_work(struct work_struct *work) +{ + struct nvmet_fc_tgtport *tgtport =3D + container_of(work, struct nvmet_fc_tgtport, put_work); + + nvmet_fc_tgtport_put(tgtport); +} static void nvmet_fc_tgt_a_put(struct nvmet_fc_tgt_assoc *assoc); static int nvmet_fc_tgt_a_get(struct nvmet_fc_tgt_assoc *assoc); static void nvmet_fc_tgt_q_put(struct nvmet_fc_tgt_queue *queue); @@ -359,7 +368,7 @@ __nvmet_fc_finish_ls_req(struct nvmet_fc_ls_req_op *lso= p) =20 if (!lsop->req_queued) { spin_unlock_irqrestore(&tgtport->lock, flags); - nvmet_fc_tgtport_put(tgtport); + queue_work(nvmet_wq, &tgtport->put_work); return; } =20 @@ -373,7 +382,7 @@ __nvmet_fc_finish_ls_req(struct nvmet_fc_ls_req_op *lso= p) (lsreq->rqstlen + lsreq->rsplen), DMA_BIDIRECTIONAL); =20 - nvmet_fc_tgtport_put(tgtport); + queue_work(nvmet_wq, &tgtport->put_work); } =20 static int @@ -1402,6 +1411,7 @@ nvmet_fc_register_targetport(struct nvmet_fc_port_inf= o *pinfo, kref_init(&newrec->ref); ida_init(&newrec->assoc_cnt); newrec->max_sg_cnt =3D template->max_sgl_segments; + INIT_WORK(&newrec->put_work, nvmet_fc_put_tgtport_work); =20 ret =3D nvmet_fc_alloc_ls_iodlist(newrec); if (ret) { --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 622E44FF7D for ; Mon, 18 Dec 2023 16:09:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="ImVs09QW"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="ZcUJmiE4"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="ImVs09QW"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="ZcUJmiE4" Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [10.150.64.98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 497601FD48; Mon, 18 Dec 2023 16:09:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702915775; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pT1da3yYKXyrC7sy+ZTSZeuGrK+DTVOGLpaUNBqQiAI=; b=ImVs09QWr+H5axHHqzsCSVZgrRo1wpONoUbGbLKn22emcN2DmK6RgxkqBojHlJwzKGiooR uM2ZqggbdV4evnTi6LwJrH3HwirHKzkeormRDNZPdTPHMTAJSimM4Bbytfuo4o8e59jClH LIm0WUOcUnO87dpAJ4nsxuK2mp44tuE= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702915775; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pT1da3yYKXyrC7sy+ZTSZeuGrK+DTVOGLpaUNBqQiAI=; b=ZcUJmiE4ulqboLe1YEFNrEmJ+MiR1Mnwj0xVeJUZmpjtsg1mlvgnpWCyv2fIK4oAIvajku SD1vUzh2o6JWlzAg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702915775; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pT1da3yYKXyrC7sy+ZTSZeuGrK+DTVOGLpaUNBqQiAI=; b=ImVs09QWr+H5axHHqzsCSVZgrRo1wpONoUbGbLKn22emcN2DmK6RgxkqBojHlJwzKGiooR uM2ZqggbdV4evnTi6LwJrH3HwirHKzkeormRDNZPdTPHMTAJSimM4Bbytfuo4o8e59jClH LIm0WUOcUnO87dpAJ4nsxuK2mp44tuE= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702915775; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pT1da3yYKXyrC7sy+ZTSZeuGrK+DTVOGLpaUNBqQiAI=; b=ZcUJmiE4ulqboLe1YEFNrEmJ+MiR1Mnwj0xVeJUZmpjtsg1mlvgnpWCyv2fIK4oAIvajku SD1vUzh2o6JWlzAg== Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id 2F60613BD5; Mon, 18 Dec 2023 16:09:35 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id NeRiCb9ugGVzBAAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 16:09:35 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 16/16] nvmet-fc: take ref count on tgtport before delete assoc Date: Mon, 18 Dec 2023 16:31:04 +0100 Message-ID: <20231218153105.12717-17-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Spam-Level: X-Spamd-Result: default: False [0.90 / 50.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; R_MISSING_CHARSET(2.50)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; REPLY(-4.00)[]; BROKEN_CONTENT_TYPE(1.50)[]; RCVD_COUNT_THREE(0.00)[3]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_SEVEN(0.00)[8]; MID_CONTAINS_FROM(1.00)[]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_ALL(0.00)[]; BAYES_HAM(-0.00)[32.84%] Authentication-Results: smtp-out2.suse.de; none X-Spam-Score: 0.90 X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" We have to ensure that the tgtport is not going away before be have remove all the associations. Signed-off-by: Daniel Wagner --- drivers/nvme/target/fc.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c index 30ba4ede333f..455d35ef97eb 100644 --- a/drivers/nvme/target/fc.c +++ b/drivers/nvme/target/fc.c @@ -1092,13 +1092,28 @@ nvmet_fc_alloc_hostport(struct nvmet_fc_tgtport *tg= tport, void *hosthandle) } =20 static void -nvmet_fc_delete_assoc(struct work_struct *work) +nvmet_fc_delete_assoc(struct nvmet_fc_tgt_assoc *assoc) +{ + nvmet_fc_delete_target_assoc(assoc); + nvmet_fc_tgt_a_put(assoc); +} + +static void +nvmet_fc_delete_assoc_work(struct work_struct *work) { struct nvmet_fc_tgt_assoc *assoc =3D container_of(work, struct nvmet_fc_tgt_assoc, del_work); + struct nvmet_fc_tgtport *tgtport =3D assoc->tgtport; =20 - nvmet_fc_delete_target_assoc(assoc); - nvmet_fc_tgt_a_put(assoc); + nvmet_fc_delete_assoc(assoc); + nvmet_fc_tgtport_put(tgtport); +} + +static void +nvmet_fc_schedule_delete_assoc(struct nvmet_fc_tgt_assoc *assoc) +{ + nvmet_fc_tgtport_get(assoc->tgtport); + queue_work(nvmet_wq, &assoc->del_work); } =20 static struct nvmet_fc_tgt_assoc * @@ -1129,7 +1144,7 @@ nvmet_fc_alloc_target_assoc(struct nvmet_fc_tgtport *= tgtport, void *hosthandle) assoc->a_id =3D idx; INIT_LIST_HEAD(&assoc->a_list); kref_init(&assoc->ref); - INIT_WORK(&assoc->del_work, nvmet_fc_delete_assoc); + INIT_WORK(&assoc->del_work, nvmet_fc_delete_assoc_work); atomic_set(&assoc->terminating, 0); =20 while (needrandom) { @@ -1489,7 +1504,7 @@ __nvmet_fc_free_assocs(struct nvmet_fc_tgtport *tgtpo= rt) list_for_each_entry_rcu(assoc, &tgtport->assoc_list, a_list) { if (!nvmet_fc_tgt_a_get(assoc)) continue; - queue_work(nvmet_wq, &assoc->del_work); + nvmet_fc_schedule_delete_assoc(assoc); nvmet_fc_tgt_a_put(assoc); } rcu_read_unlock(); @@ -1542,7 +1557,7 @@ nvmet_fc_invalidate_host(struct nvmet_fc_target_port = *target_port, continue; assoc->hostport->invalid =3D 1; noassoc =3D false; - queue_work(nvmet_wq, &assoc->del_work); + nvmet_fc_schedule_delete_assoc(assoc); nvmet_fc_tgt_a_put(assoc); } spin_unlock_irqrestore(&tgtport->lock, flags); @@ -1587,7 +1602,7 @@ nvmet_fc_delete_ctrl(struct nvmet_ctrl *ctrl) nvmet_fc_tgtport_put(tgtport); =20 if (found_ctrl) { - queue_work(nvmet_wq, &assoc->del_work); + nvmet_fc_schedule_delete_assoc(assoc); nvmet_fc_tgt_a_put(assoc); return; } @@ -1894,7 +1909,7 @@ nvmet_fc_ls_disconnect(struct nvmet_fc_tgtport *tgtpo= rt, nvmet_fc_xmt_ls_rsp(tgtport, oldls); } =20 - queue_work(nvmet_wq, &assoc->del_work); + nvmet_fc_schedule_delete_assoc(assoc); nvmet_fc_tgt_a_put(assoc); =20 return false; --=20 2.43.0 From nobody Fri Dec 19 09:44:51 2025 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DE95B3D56F for ; Mon, 18 Dec 2023 16:11:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 0AA5C21FDE; Mon, 18 Dec 2023 16:11:50 +0000 (UTC) Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id E839C13BD5; Mon, 18 Dec 2023 16:11:49 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id 7/GGNkVvgGUVBQAAn2gu4w (envelope-from ); Mon, 18 Dec 2023 16:11:49 +0000 From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Keith Busch , James Smart , Hannes Reinecke , Daniel Wagner Subject: [PATCH v3 17/17] nvmet-fc: add extensive debug logging Date: Mon, 18 Dec 2023 16:31:05 +0100 Message-ID: <20231218153105.12717-18-dwagner@suse.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218153105.12717-1-dwagner@suse.de> References: <20231218153105.12717-1-dwagner@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Level: X-Spam-Level: Authentication-Results: smtp-out1.suse.de; none X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Spamd-Result: default: False [-4.00 / 50.00]; REPLY(-4.00)[] X-Spam-Score: -4.00 X-Rspamd-Queue-Id: 0AA5C21FDE X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" Signed-off-by: Daniel Wagner --- drivers/nvme/target/configfs.c | 4 + drivers/nvme/target/core.c | 13 ++++ drivers/nvme/target/fc.c | 132 +++++++++++++++++++++++++++++---- 3 files changed, 135 insertions(+), 14 deletions(-) diff --git a/drivers/nvme/target/configfs.c b/drivers/nvme/target/configfs.c index e307a044b1a1..ea05e8c62d4b 100644 --- a/drivers/nvme/target/configfs.c +++ b/drivers/nvme/target/configfs.c @@ -965,6 +965,7 @@ static int nvmet_port_subsys_allow_link(struct config_i= tem *parent, goto out_free_link; } =20 + pr_info("%s: %s\n", __func__, subsys->subsysnqn); if (list_empty(&port->subsystems)) { ret =3D nvmet_enable_port(port); if (ret) @@ -1050,6 +1051,7 @@ static int nvmet_allowed_hosts_allow_link(struct conf= ig_item *parent, if (!strcmp(nvmet_host_name(p->host), nvmet_host_name(host))) goto out_free_link; } + pr_info("%s: adding hostnqn %s\n", __func__, nvmet_host_name(host)); list_add_tail(&link->entry, &subsys->hosts); nvmet_subsys_disc_changed(subsys, host); =20 @@ -1879,6 +1881,8 @@ static struct config_group *nvmet_ports_make(struct c= onfig_group *group, u16 portid; u32 i; =20 + pr_info("%s\n", __func__); + if (kstrtou16(name, 0, &portid)) return ERR_PTR(-EINVAL); =20 diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c index 3935165048e7..4d5a9e4fcc9d 100644 --- a/drivers/nvme/target/core.c +++ b/drivers/nvme/target/core.c @@ -308,8 +308,11 @@ void nvmet_port_del_ctrls(struct nvmet_port *port, str= uct nvmet_subsys *subsys) { struct nvmet_ctrl *ctrl; =20 + pr_info("%s: subsys %s port %p\n", __func__, subsys->subsysnqn, port); + mutex_lock(&subsys->lock); list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) { + pr_info("%s: ctrl %p ctrl->port %p\n", __func__, ctrl, ctrl->port); if (ctrl->port =3D=3D port) ctrl->ops->delete_ctrl(ctrl); } @@ -1458,6 +1461,8 @@ u16 nvmet_alloc_ctrl(const char *subsysnqn, const cha= r *hostnqn, mutex_unlock(&subsys->lock); =20 *ctrlp =3D ctrl; + + pr_info("%s: ctrl %p, subsysnqn %s hostnqn %s\n", __func__, ctrl, subsysn= qn, hostnqn); return 0; =20 out_free_sqs: @@ -1477,6 +1482,8 @@ static void nvmet_ctrl_free(struct kref *ref) struct nvmet_ctrl *ctrl =3D container_of(ref, struct nvmet_ctrl, ref); struct nvmet_subsys *subsys =3D ctrl->subsys; =20 + pr_info("%s: ctrl %p %s\n", __func__, ctrl, ctrl->subsysnqn); + mutex_lock(&subsys->lock); nvmet_release_p2p_ns_map(ctrl); list_del(&ctrl->subsys_entry); @@ -1550,6 +1557,8 @@ struct nvmet_subsys *nvmet_subsys_alloc(const char *s= ubsysnqn, char serial[NVMET_SN_MAX_SIZE / 2]; int ret; =20 + pr_info("%s\n", __func__); + subsys =3D kzalloc(sizeof(*subsys), GFP_KERNEL); if (!subsys) return ERR_PTR(-ENOMEM); @@ -1620,6 +1629,8 @@ static void nvmet_subsys_free(struct kref *ref) =20 WARN_ON_ONCE(!xa_empty(&subsys->namespaces)); =20 + pr_info("%s\n", __func__); + xa_destroy(&subsys->namespaces); nvmet_passthru_subsys_free(subsys); =20 @@ -1633,6 +1644,8 @@ void nvmet_subsys_del_ctrls(struct nvmet_subsys *subs= ys) { struct nvmet_ctrl *ctrl; =20 + pr_info("%s\n", __func__); + mutex_lock(&subsys->lock); list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) ctrl->ops->delete_ctrl(ctrl); diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c index 455d35ef97eb..d50ff29697fc 100644 --- a/drivers/nvme/target/fc.c +++ b/drivers/nvme/target/fc.c @@ -242,6 +242,31 @@ static LIST_HEAD(nvmet_fc_target_list); static DEFINE_IDA(nvmet_fc_tgtport_cnt); static LIST_HEAD(nvmet_fc_portentry_list); =20 +static void __nvmet_fc_tgtport_put(struct nvmet_fc_tgtport *tgtport); +static int __nvmet_fc_tgtport_get(struct nvmet_fc_tgtport *tgtport); + +#if 1 +#define nvmet_fc_tgtport_put(p) \ +({ \ + pr_info("nvmet_fc_tgtport_put: %p %d %s:%d\n", \ + p, atomic_read(&p->ref.refcount.refs), \ + __func__, __LINE__); \ + __nvmet_fc_tgtport_put(p); \ +}) + +#define nvmet_fc_tgtport_get(p) \ +({ \ + int ___r =3D __nvmet_fc_tgtport_get(p); \ + \ + pr_info("nvmet_fc_tgtport_get: %p %d %s:%d\n", \ + p, atomic_read(&p->ref.refcount.refs), \ + __func__, __LINE__); \ + ___r; \ +}) +#else +#define nvmet_fc_tgtport_put(p) __nvmet_fc_tgtport_put(p) +#define nvmet_fc_tgtport_get(p) __nvmet_fc_tgtport_get(p) +#endif =20 static void nvmet_fc_handle_ls_rqst_work(struct work_struct *work); static void nvmet_fc_fcp_rqst_op_defer_work(struct work_struct *work); @@ -252,12 +277,84 @@ static void nvmet_fc_put_tgtport_work(struct work_str= uct *work) =20 nvmet_fc_tgtport_put(tgtport); } -static void nvmet_fc_tgt_a_put(struct nvmet_fc_tgt_assoc *assoc); -static int nvmet_fc_tgt_a_get(struct nvmet_fc_tgt_assoc *assoc); -static void nvmet_fc_tgt_q_put(struct nvmet_fc_tgt_queue *queue); -static int nvmet_fc_tgt_q_get(struct nvmet_fc_tgt_queue *queue); -static void nvmet_fc_tgtport_put(struct nvmet_fc_tgtport *tgtport); -static int nvmet_fc_tgtport_get(struct nvmet_fc_tgtport *tgtport); +static void __nvmet_fc_tgt_a_put(struct nvmet_fc_tgt_assoc *assoc); +static int __nvmet_fc_tgt_a_get(struct nvmet_fc_tgt_assoc *assoc); + +#if 1 +#define nvmet_fc_tgt_a_put(a) \ +({ \ + pr_info("nvmet_fc_tgt_a_put: %d %d %s:%d \n", \ + a->a_id, atomic_read(&a->ref.refcount.refs), \ + __func__, __LINE__); \ + __nvmet_fc_tgt_a_put(a); \ +}) + +#define nvmet_fc_tgt_a_get(a) \ +({ \ + int ___r =3D __nvmet_fc_tgt_a_get(a); \ + \ + pr_info("nvmet_fc_tgt_a_get: %d %d %s:%d\n", \ + a->a_id, atomic_read(&a->ref.refcount.refs), \ + __func__, __LINE__); \ + ___r; \ +}) +#else +#define nvmet_fc_tgt_a_put(a) __nvmet_fc_tgt_a_put(a) +#define nvmet_fc_tgt_a_get(a) __nvmet_fc_tgt_a_get(a) +#endif + +static void __nvmet_fc_hostport_put(struct nvmet_fc_hostport *hostport); +static int __nvmet_fc_hostport_get(struct nvmet_fc_hostport *hostport); + +#if 0 +#define nvmet_fc_hostport_put(p) \ +({ \ + pr_info("nvmet_fc_hostport_put: %p %d %s:%d\n", \ + p, atomic_read(&p->ref.refcount.refs), \ + __func__, __LINE__); \ + __nvmet_fc_hostport_put(p); \ +}) + +#define nvmet_fc_hostport_get(p) \ +({ \ + int ___r =3D __nvmet_fc_hostport_get(p); \ + \ + pr_info("nvmet_fc_hostport_get: %p %d %s:%d\n", \ + p, atomic_read(&p->ref.refcount.refs), \ + __func__, __LINE__); \ + ___r; \ +}) +#else +#define nvmet_fc_hostport_put(p) __nvmet_fc_hostport_put(p) +#define nvmet_fc_hostport_get(p) __nvmet_fc_hostport_get(p) +#endif + +static void __nvmet_fc_tgt_q_put(struct nvmet_fc_tgt_queue *queue); +static int __nvmet_fc_tgt_q_get(struct nvmet_fc_tgt_queue *queue); + +#if 0 +#define nvmet_fc_tgt_q_put(q) \ +({ \ + pr_info("nvmet_fc_tgt_q_put: %p %d %s:%d\n", \ + q, atomic_read(&q->ref.refcount.refs), \ + __func__, __LINE__); \ + __nvmet_fc_tgt_q_put(q); \ +}) + +#define nvmet_fc_tgt_q_get(q) \ +({ \ + int ___r =3D __nvmet_fc_tgt_q_get(q); \ + \ + pr_info("nvmet_fc_tgt_q_get: %p %d %s:%d\n", \ + q, atomic_read(&q->ref.refcount.refs), \ + __func__, __LINE__); \ + ___r; \ +}) +#else +#define nvmet_fc_tgt_q_put(q) __nvmet_fc_tgt_q_put(q) +#define nvmet_fc_tgt_q_get(q) __nvmet_fc_tgt_q_get(q) +#endif + static void nvmet_fc_handle_fcp_rqst(struct nvmet_fc_tgtport *tgtport, struct nvmet_fc_fcp_iod *fod); static void nvmet_fc_delete_target_assoc(struct nvmet_fc_tgt_assoc *assoc); @@ -864,13 +961,13 @@ nvmet_fc_tgt_queue_free(struct kref *ref) } =20 static void -nvmet_fc_tgt_q_put(struct nvmet_fc_tgt_queue *queue) +__nvmet_fc_tgt_q_put(struct nvmet_fc_tgt_queue *queue) { kref_put(&queue->ref, nvmet_fc_tgt_queue_free); } =20 static int -nvmet_fc_tgt_q_get(struct nvmet_fc_tgt_queue *queue) +__nvmet_fc_tgt_q_get(struct nvmet_fc_tgt_queue *queue) { return kref_get_unless_zero(&queue->ref); } @@ -1000,13 +1097,13 @@ nvmet_fc_hostport_free(struct kref *ref) } =20 static void -nvmet_fc_hostport_put(struct nvmet_fc_hostport *hostport) +__nvmet_fc_hostport_put(struct nvmet_fc_hostport *hostport) { kref_put(&hostport->ref, nvmet_fc_hostport_free); } =20 static int -nvmet_fc_hostport_get(struct nvmet_fc_hostport *hostport) +__nvmet_fc_hostport_get(struct nvmet_fc_hostport *hostport) { return kref_get_unless_zero(&hostport->ref); } @@ -1208,13 +1305,13 @@ nvmet_fc_target_assoc_free(struct kref *ref) } =20 static void -nvmet_fc_tgt_a_put(struct nvmet_fc_tgt_assoc *assoc) +__nvmet_fc_tgt_a_put(struct nvmet_fc_tgt_assoc *assoc) { kref_put(&assoc->ref, nvmet_fc_target_assoc_free); } =20 static int -nvmet_fc_tgt_a_get(struct nvmet_fc_tgt_assoc *assoc) +__nvmet_fc_tgt_a_get(struct nvmet_fc_tgt_assoc *assoc) { return kref_get_unless_zero(&assoc->ref); } @@ -1441,6 +1538,7 @@ nvmet_fc_register_targetport(struct nvmet_fc_port_inf= o *pinfo, spin_unlock_irqrestore(&nvmet_fc_tgtlock, flags); =20 *portptr =3D &newrec->fc_target_port; + pr_info("%s: targetport %p\n", __func__, newrec); return 0; =20 out_free_newrec: @@ -1484,13 +1582,13 @@ nvmet_fc_free_tgtport(struct kref *ref) } =20 static void -nvmet_fc_tgtport_put(struct nvmet_fc_tgtport *tgtport) +__nvmet_fc_tgtport_put(struct nvmet_fc_tgtport *tgtport) { kref_put(&tgtport->ref, nvmet_fc_free_tgtport); } =20 static int -nvmet_fc_tgtport_get(struct nvmet_fc_tgtport *tgtport) +__nvmet_fc_tgtport_get(struct nvmet_fc_tgtport *tgtport) { return kref_get_unless_zero(&tgtport->ref); } @@ -1580,6 +1678,8 @@ nvmet_fc_delete_ctrl(struct nvmet_ctrl *ctrl) unsigned long flags; bool found_ctrl =3D false; =20 + pr_info("%s: ctrl %p\n", __func__, ctrl); + /* this is a bit ugly, but don't want to make locks layered */ spin_lock_irqsave(&nvmet_fc_tgtlock, flags); list_for_each_entry_safe(tgtport, next, &nvmet_fc_target_list, @@ -1591,6 +1691,8 @@ nvmet_fc_delete_ctrl(struct nvmet_ctrl *ctrl) rcu_read_lock(); list_for_each_entry_rcu(assoc, &tgtport->assoc_list, a_list) { queue =3D rcu_dereference(assoc->queues[0]); + pr_info("%s: queue %p nvme_sq.ctrl %p\n", + __func__, queue, queue ? queue->nvme_sq.ctrl : NULL); if (queue && queue->nvme_sq.ctrl =3D=3D ctrl) { if (nvmet_fc_tgt_a_get(assoc)) found_ctrl =3D true; @@ -1628,6 +1730,8 @@ nvmet_fc_unregister_targetport(struct nvmet_fc_target= _port *target_port) { struct nvmet_fc_tgtport *tgtport =3D targetport_to_tgtport(target_port); =20 + pr_info("%s\n", __func__); + nvmet_fc_portentry_unbind_tgt(tgtport); =20 /* terminate any outstanding associations */ --=20 2.43.0