From nobody Sat Sep 26 19:37:18 2026 Received: from smtpbgsg2.qq.com (smtpbgsg2.qq.com [54.254.200.128]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C3843229B12 for ; Mon, 31 Aug 2026 07:12:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.254.200.128 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788160330; cv=none; b=M9O8U9qJxmWQORV1jmGA4hnk/TIBilsQnu4e1OJc3RA2J+BVcvi2KoLuYKG+ipHVtGwhCxpQatgbcQjlrJRO8t59RpCJ+InbjI+coXCQtZCGr2An04tBi7OLLF02zD7OA0nOCx07Qwf2SPnRnD/hvojHN7G/StFkHyZ7eeyOXF8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788160330; c=relaxed/simple; bh=OjWkSyLnoRyPXzsTbnK2oW/RArHFcp+ecewmmo8ATQ8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IGIRJj1C1ftrn4TfeFfDLCZRzcImFreNCoky9EoHMqc/7sIf+4GJsi0t70YQu2o+wiMZHmcsWXlOmrGxpXl8etW5X1Y1VsOOtJIekhRlSfGj//OQHwL+/KENUgcNcd2PKtEbHIbDYSvCFgrEZ1CDVOqHlmWruC9pDJ0p7iZ/guE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com; spf=pass smtp.mailfrom=uniontech.com; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b=VDOp5hm4; arc=none smtp.client-ip=54.254.200.128 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=uniontech.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b="VDOp5hm4" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uniontech.com; s=onoh2408; t=1788160272; bh=m2C6iY+uu0tPZzhXdnPEQUIgtzuD2N/br4GdpKmMyFg=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=VDOp5hm4fTt5VNkfR0Vq6QJkyPJxA3UYxWKwFV+DhxLiDvOVn83mzHm9DNybLK9GY LNCzsDYmO4TF+QQjiLjiF2QUtoTG6b83c3D5wiKmoBmcHuDDKDSK2IlfWHlexTdBHh QDYPIPGWp8VM+DfUQTZkBAIHyeQtGuH5S27Njly4= X-QQ-mid: esmtpsz16t1788160254t808e05e5 X-QQ-Originating-IP: 2ePWxfxItYJfnyvk1iKRgQ8bRqgDbU+9Hh256R00M6A= Received: from PEN202512010004 ( [113.57.152.160]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 31 Aug 2026 15:10:52 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 1 X-BIZMAIL-ID: 15215064244287525615 EX-QQ-RecipientCnt: 7 From: raoxu To: raoxu@uniontech.com Cc: axboe@kernel.dk, hch@lst.de, kbusch@kernel.org, linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org, sagi@grimberg.me Subject: [PATCH nvme-7.3 v3 1/4] nvme-fabrics: separate option tokenizer pointer Date: Mon, 31 Aug 2026 15:10:50 +0800 Message-ID: <67C2BD21B4A592D4+20260831071050.637726-1-raoxu@uniontech.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: References: 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-QQ-SENDSIZE: 520 Feedback-ID: esmtpsz:uniontech.com:qybglogicsvrgz:qybglogicsvrgz6b-0 X-QQ-XMAILINFO: MD5lytsRYqTqSwcRsMIAS+4i85X8qyoUwhZwQlwXC/mAarma/44KGNXI ZCYlpezMUTaDUJYXyn0cjl+v3uvyEpBBNjB6Ih+xsDG7z0dh2WXRWioTeiUktTRWlq04b6w OYt2fr6USt237UMq5JUjmRZ5tkCwD7PQW0vi0gXaPm5Lt3XLvufA1WCiheYys4wLJztvmAn P2ykhtlAwcJZinkGWf6Xtp8WBD6cRNvhsMs7fYTCFvctZPobF7j1pRmTIFYta6DAzmYmBN9 trqqcMwIe2RZ3JDT8mG7PcQsMh/Dtx9d8E9gY8+ZhTHUrQFjP9O59+ggfSuuXNt0wwAQTYZ 1kTR7iZZonSi5qad8kgMgJMqUMkbuqXEA2V65MqByJsS/U5IEMWUAzIvY6dQWrv8ZHhUjgo o3GJNzHaqBzu+ibYiAgS1e7bemWMFJfdPV0AVz1b6jzU4pE1WdacUchOR5AJSCj6tPZtz2P rldkFGSsvDpP/1s4ktdDPBkvgBGXdxg44tQ8a5WTrHDHlZ7+vW0/gHhLVr5PaNp9EOa80ts sq5WEuI648LbpsZOWfRbDnFJkSj6wXHo8Cv5bznULnHWBSurv8PifHfIXTjEPuCNYrl/dWJ LudEacz0tLdzwpHWm7BmbO1u8Rz/juKginypKY90vxInuoQpYvYEIAJDGwFb8Dr6WwNGOvn vcgpqiWklVPr8uRm/yXk93IKTa9zUO1AvrRjrTLkn/3krhO1tiTlyMOAh+GPIbJiVZ7eEM2 EO7JtgAqxzNgj1bqoYc5fBB1PZ0Fyw2KwMtRqc555jgt3rGB9KnFLkSzO5ObS1oiBqlDObL rvgqDkWTc3Z3HXhwRW4wnvHEiQsO1XvUMdv7VdkGcRXOEz3I+p4C7Nu+N7CCFikLEHvACU6 F8MneK9JYo2y+KiKTxMkCT2GMt1Gu3V0aQBmtaA8czByqzgbX8yOXV6iKSmqpWXOYikAWuO EWvd8+wPZyEdp+/Fhu6FdauoOTtNIHOR9kQztY8MBCrs9Awkt+dbHyo59gc/7AgqKBhlwQI u5B8/B+wMAhloWzhHTKrr7/ihjQQdpvoXt8SHQWcqf2Lw7PKyTI4DiXTQPfVrGPh+1BFkIf sjlwg+kKv6w X-QQ-XMRINFO: M/715EihBoGS47X28/vv4NpnfpeBLnr4Qg== X-QQ-RECHKSPAM: 0 Content-Type: text/plain; charset="utf-8" From: Xu Rao nvmf_parse_options() currently uses p both for the option returned by strsep() and for strings allocated by match_strdup(). The former points into the temporary options buffer while the latter owns a separate allocation, so the same variable represents two different lifetimes. Introduce option for the current string token passed to match_token(). Leave p for temporary strings returned by match_strdup(), giving option tokenization and allocated string storage distinct variables without changing the parsing logic. The name option is intentional: options remains the backing buffer for the full request, option is one comma/newline-delimited entry, and token names the integer result returned by match_token(). This is a mechanical preparation with no functional change. Suggested-by: Christoph Hellwig Reviewed-by: Sagi Grimberg Signed-off-by: Xu Rao Reviewed-by: Christoph Hellwig --- drivers/nvme/host/fabrics.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c index 59f823dfbbcc..1ec6da49167d 100644 --- a/drivers/nvme/host/fabrics.c +++ b/drivers/nvme/host/fabrics.c @@ -716,7 +716,7 @@ static int nvmf_parse_options(struct nvmf_ctrl_options = *opts, const char *buf) { substring_t args[MAX_OPT_ARGS]; - char *options, *o, *p; + char *options, *o, *option, *p; int token, ret =3D 0; size_t nqnlen =3D 0; int ctrl_loss_tmo =3D NVMF_DEF_CTRL_LOSS_TMO, key_id; @@ -747,11 +747,11 @@ static int nvmf_parse_options(struct nvmf_ctrl_option= s *opts, uuid_copy(&hostid, &nvmf_default_host->id); strscpy(hostnqn, nvmf_default_host->nqn, NVMF_NQN_SIZE); =20 - while ((p =3D strsep(&o, ",\n")) !=3D NULL) { - if (!*p) + while ((option =3D strsep(&o, ",\n")) !=3D NULL) { + if (!*option) continue; =20 - token =3D match_token(p, opt_tokens, args); + token =3D match_token(option, opt_tokens, args); opts->mask |=3D token; switch (token) { case NVMF_OPT_TRANSPORT: @@ -1068,7 +1068,7 @@ static int nvmf_parse_options(struct nvmf_ctrl_option= s *opts, break; default: pr_warn("unknown parameter or missing value '%s' in ctrl creation reque= st\n", - p); + option); ret =3D -EINVAL; goto out; } --=20 2.50.1 From nobody Sat Sep 26 19:37:18 2026 Received: from bg5.exmail.qq.com (bg5.exmail.qq.com [43.154.197.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 351193AB26C for ; Mon, 31 Aug 2026 07:12:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=43.154.197.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788160360; cv=none; b=ryULVDsajg2CvnptWBVbBa3c4HeWNUI2uA0P7ynbNgFL0Xnw+M+Duslw5tkdxXGwj6PmwjNlbXjlaDzGUQevBMgRFALai2T3F7h8fgGUMtftSsh/JM03gv9NYehuzs9r8KQoW+1dcO+arAkL7/fP0knRM6n04GSF4vo/EJFj5pQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788160360; c=relaxed/simple; bh=U3oUhCeFlm8VHw10BhaQEjChiC9PpUD3nBM7wDVO22k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=teuFI0awFfpZLGmn7TBuMmKTjChEsTgQAFIMSQ45y/HCGgvVS6W78v+6XT+GZ7h/E7fJRP0UXGVAJ2LZQU5LIYiJd0R3XD41DJZP/0Z0ZWc5t5/gafSVN8m17I1qZ2teU30kv17lGlEQnbVN8kfXhv0RNqTM6yF29x0MwfNNiS4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com; spf=pass smtp.mailfrom=uniontech.com; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b=nuiD1pJA; arc=none smtp.client-ip=43.154.197.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=uniontech.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b="nuiD1pJA" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uniontech.com; s=onoh2408; t=1788160285; bh=DudSYiu0l51smEG9rCcrUuSsdx8R0ivwHpjL+SnU4yU=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=nuiD1pJAM8ojjnbqB33xFTcwQ1S12lACAJYXnj1Uc6cvBQxbot+RtxrW/PmQB7jBj 0ecUTWTvZTbDxvfy9eZNPHvbSek2BeV2IZ76YEL1pPjmMCqaSojna0v35+oGB4wQjy AeOSfFi5ZFlRBXK8jvmwXfRkgH7iDJMU5XvnAiAM= X-QQ-mid: zesmtpgz7t1788160268t89cf4e0f X-QQ-Originating-IP: Fh5PH39AwLrLan57aQHZ2A7JReatCG/JrHg1/GeKfsU= Received: from PEN202512010004 ( [113.57.152.160]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 31 Aug 2026 15:11:06 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 1 X-BIZMAIL-ID: 13442412379462899091 EX-QQ-RecipientCnt: 7 From: raoxu To: raoxu@uniontech.com Cc: axboe@kernel.dk, hch@lst.de, kbusch@kernel.org, linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org, sagi@grimberg.me Subject: [PATCH nvme-7.3 v3 2/4] nvme-fabrics: add helper for owned string options Date: Mon, 31 Aug 2026 15:11:05 +0800 Message-ID: <9910C0FE65DE86BB+20260831071105.638107-1-raoxu@uniontech.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: References: 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-QQ-SENDSIZE: 520 Feedback-ID: zesmtpgz:uniontech.com:qybglogicsvrgz:qybglogicsvrgz6b-0 X-QQ-XMAILINFO: N7zE+17nr98Tuu8NN7U6OByhwVKSYd/ZoPys7iwpQb0uDMhKb9ncm0tU HV+SnbonUYM/aiyhRNwtP8sliUJsnDF7/s1lnsFESD16onu0O9skeuXY/kGF2t4HPfw9tRN nL2+LpjmYEDJ26AhjNjNirq+lX5LSu0tbAb5fBhX6YueYkzzBec8WGsmtWV3Asniec5iaRX OsZMgB5Cq7UeKefhXLV4boKTF2ZQUxemRXahj/NEJWBEXU4nwnk6m9UaYQ1RJYG8jF6xtvj lyuGl+P0lkFv33EL1NdUMx5LsixzSVBD2xC1/g3d11vDBUVzgJpsDZ601SjM1mZ6oo+Vq0P 1geALBXP7V65FcAaPhzdWS1xCkqKpP7B/RoO2dRHE4oygDDo4yGZj8P77smoUjCuZeQ3Qz9 0R++ewHUhAH6/du+mCl2tWtsFAVrYrXUjFKdmojKPaNO1hHIMssD5OetY2maBsCN0yUuGcV UAryNxuTbxWC6Ve8SN3i00zxOLb+PhJHs7XWn6JQrN/SsbcleQDkhOWF1KuKosGqWF0arcM vDbyz4OS5//KCqCvPM9CiTF2TNKTQB7gjI14QRkijwS3SAHm7HKmQmEeepHBiQe7rw1m6Jj aX2yULnHdxD8OXjxd8ra5XdqUYd3zOE54J1sEuh1zK+G9GUPxKihFTRfKyvcokyXEBJgYHN u+yda4dGh2U4tYTIJ6SkJoGtRkKeuQRVOHsaGq/T3v59jxX3fWyK76K1ReFXdFYXDndD+pw nrRHhYVEuFkhobgX/Z+Q9Q8K5khUdPJnS9lQpl51POX2VE5NvJNQVLbvmWANerJQ2NlTafG fnyJwOxLCR1AcVi9Goyy9O8HUDtm00PmObrs6FG2/Qp4AtZ5yrfXpD0kB5S6v6FRWRY98kq vGFkcTweL7OfrT/R04njWVPVkPJ5zMMJ2/RyTub4nMQmTfeYVceCPE3rhINIZCiMqLwuG27 GDVdoyiNo5+nDXcwLp9t1mr08o4/sD3DEOUTPgGY9rDoIMYxLtwDJOAXdbrdYdnOyFvlEqk g10CSnZWtFmA/91R7N7degoct14pSlt8WAlkULBhK/AGLbd0IsooqkLyQmfzvFS84VNvLUP 4pPYcKKfy3zKgdqt2AeWtKRaEYwXLzTSg== X-QQ-XMRINFO: NS+P29fieYNwqS3WCnRCOn9D1NpZuCnCRA== X-QQ-RECHKSPAM: 0 Content-Type: text/plain; charset="utf-8" From: Xu Rao Five string options -- transport, traddr, trsvcid, host_traddr and host_iface -- have exactly the same parsing and ownership rule: duplicate the matched value, free the previously stored string, and transfer the new allocation to the corresponding struct nvmf_ctrl_options field. Add nvmf_parse_string_option() for that common operation. The helper owns the match_strdup() result until it either fails or stores the new pointer in the destination field, keeping this simple allocation lifetime in one scope and removing five copies of the same sequence from nvmf_parse_options(). The helper is intentionally limited to direct string replacement and does not absorb option-specific validation, conversion, or sensitive cleanup. No functional change is intended. Suggested-by: Christoph Hellwig Reviewed-by: Sagi Grimberg Signed-off-by: Xu Rao Reviewed-by: Christoph Hellwig --- drivers/nvme/host/fabrics.c | 53 ++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 30 deletions(-) diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c index 1ec6da49167d..aab3fd279d0e 100644 --- a/drivers/nvme/host/fabrics.c +++ b/drivers/nvme/host/fabrics.c @@ -712,6 +712,19 @@ static const match_table_t opt_tokens =3D { { NVMF_OPT_ERR, NULL } }; =20 +static int nvmf_parse_string_option(substring_t *args, char **dst) +{ + char *value; + + value =3D match_strdup(args); + if (!value) + return -ENOMEM; + + kfree(*dst); + *dst =3D value; + return 0; +} + static int nvmf_parse_options(struct nvmf_ctrl_options *opts, const char *buf) { @@ -755,13 +768,9 @@ static int nvmf_parse_options(struct nvmf_ctrl_options= *opts, opts->mask |=3D token; switch (token) { case NVMF_OPT_TRANSPORT: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; + ret =3D nvmf_parse_string_option(args, &opts->transport); + if (ret) goto out; - } - kfree(opts->transport); - opts->transport =3D p; break; case NVMF_OPT_NQN: p =3D match_strdup(args); @@ -783,22 +792,14 @@ static int nvmf_parse_options(struct nvmf_ctrl_option= s *opts, NVME_DISC_SUBSYS_NAME)); break; case NVMF_OPT_TRADDR: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; + ret =3D nvmf_parse_string_option(args, &opts->traddr); + if (ret) goto out; - } - kfree(opts->traddr); - opts->traddr =3D p; break; case NVMF_OPT_TRSVCID: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; + ret =3D nvmf_parse_string_option(args, &opts->trsvcid); + if (ret) goto out; - } - kfree(opts->trsvcid); - opts->trsvcid =3D p; break; case NVMF_OPT_QUEUE_SIZE: if (match_int(args, &token)) { @@ -907,22 +908,14 @@ static int nvmf_parse_options(struct nvmf_ctrl_option= s *opts, opts->reconnect_delay =3D token; break; case NVMF_OPT_HOST_TRADDR: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; + ret =3D nvmf_parse_string_option(args, &opts->host_traddr); + if (ret) goto out; - } - kfree(opts->host_traddr); - opts->host_traddr =3D p; break; case NVMF_OPT_HOST_IFACE: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; + ret =3D nvmf_parse_string_option(args, &opts->host_iface); + if (ret) goto out; - } - kfree(opts->host_iface); - opts->host_iface =3D p; break; case NVMF_OPT_HOST_ID: p =3D match_strdup(args); --=20 2.50.1 From nobody Sat Sep 26 19:37:18 2026 Received: from smtpbgbr2.qq.com (smtpbgbr2.qq.com [54.207.22.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DDC00287510 for ; Mon, 31 Aug 2026 07:12:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.207.22.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788160352; cv=none; b=Z/n9g8TSgCx9MKnk9O9hYcQWaozfeCRh+QN9HeC1xfLz4+OvQGQzc6BoDoErN1lx3bGxw8FDEo9v8zL+xUcWQSG8UerPitf0xiWziikdpvKkh9eX3S19rYbkDF5VPbXTZywiDEpYNqRRKFijQjCoXXjQ3yeP5YHoMFffNG3eZyA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788160352; c=relaxed/simple; bh=75zpDxz3fcvYGQmBJRYnba3Ei7Njd/5H7f9o16ZZTtM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=W6qCY4+CX2halDckxs9YP/HpJaSk1GxwUSiAIrq0fTAtFhGBaWDdh7FlPHkP2u44MS16/OXqk2VnO1oo1q86+IoHKSnNSt6vSjA6xZA4sBJIXCUYo9pU9T5Vr3veQ1JQBdGwzxefBsokqQQ0U82ENyxN0eZO/GDyF1M1VFG5fSk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com; spf=pass smtp.mailfrom=uniontech.com; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b=ChQaPjtw; arc=none smtp.client-ip=54.207.22.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=uniontech.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b="ChQaPjtw" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uniontech.com; s=onoh2408; t=1788160303; bh=GNUOYDPt61vaxXUbZr9IM7CvwCmMyj37FRBTp9CvSG0=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=ChQaPjtwFWh2TlbFyP4ijCsFp27PMQygWnUtIsfr/Wk2785OXE/3ouOHdIPYPj8hv n7hlqAXoLC+CaDm2205wbzLCZEWDjnjwQp2EfRf6G5J+qENiqyXe9EsZEyvIu+geKJ uS6Fl6b/Q9jgeTZqHU4ESqu9ohWCegzn8OmLzZGw= X-QQ-mid: esmtpsz18t1788160286t12ae2ff9 X-QQ-Originating-IP: /DNoQEQZBErUbZ+nn4f0QYgSknwCoEqN8vvAz7018ww= Received: from PEN202512010004 ( [113.57.152.160]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 31 Aug 2026 15:11:24 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 1 X-BIZMAIL-ID: 18264328242113777515 EX-QQ-RecipientCnt: 7 From: raoxu To: raoxu@uniontech.com Cc: axboe@kernel.dk, hch@lst.de, kbusch@kernel.org, linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org, sagi@grimberg.me Subject: [PATCH nvme-7.3 v3 3/4] nvme-fabrics: reuse string helper for subsystem NQN Date: Mon, 31 Aug 2026 15:11:22 +0800 Message-ID: <090DFCAF26D6ECA1+20260831071122.638486-1-raoxu@uniontech.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: References: 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-QQ-SENDSIZE: 520 Feedback-ID: esmtpsz:uniontech.com:qybglogicsvrgz:qybglogicsvrgz6b-0 X-QQ-XMAILINFO: OLustoS+DIJrdL0qqtdYHm2bJkT0kzxcSjf6n/Is5xMuFslcD21l4KWF YiRGpNbMw8U0q/jBSnOaPBF/bdAOHO3gOS20tcVFL7NAFgvZ+5TuqrXwvRVzY/AvC8vM+MA By2474E8vbfFSLUVzFlSHTS1xUDvUvsEQvyKyiAH+2vzgEXrU8uPnleV6AqDgCH6daRKxWP KCDMgsZZDUWjMOLhUyza83sIfiYQi/1oXyWoXQEqXTkfs0JxrkJCD12NZD5RHWP3A+Js9n0 XDmQwoY3uCtQYCx7ccPaBgMFxiGRzoY/tWT33sF8BCjdtN7x6WYe2s4xZRJwIZdmHeMunvW UAEauTHvXLEOYSyBAeRMgBtPAV1nwB8GWWt5jLxxga5U6flpKZ4LMOfHILikIaY+ncx/2xJ pZQ09hUsSPq5Q0hYmqa2wG3F+h4ovn94HMBScgdZPakpoclN2ZeZTgQjPyqVGG/P7DPeqPb qDLn7at7ngVEUwnMDlnMZoCiI3mGZ5OjbKdSGrLpHGP4C1r+L1fizZLqz//61BMVJNZQ9ZY fhfc+8DY0Beq2caxwr9V2eLL7xl0KXGHKhecYG9o2c+2nooR8iFANdChE1rLMBwvME1iPvY a8D+J92AtQvCiaBzBvAd4YyTNhSnZK06o8ov5TzEqoEdU5LollKQRRd9hbo8UEuFC02tdoY N5j1rIghtbRrNNdsUBu47bSriqNfffaBiiZeK0FBXrDReY1zTBa9EUVMf0uN3G3LN08seOD uF8eGBPFUsF2Gj44teUAy+Tx5m4wLgGWHbCZPtif0ezgPIoguiMr90irlEsZ/4Og+utGbCC edruo4lKm01N5IpuLCIm4DEfLS8NVlliLrC5M4XoaRs4+Dl8ZiZFtciJyqWne2xAUIracls LTCYLW39JPWMaYvHtO6gWWT5U2feWT6Js9CW6UKZBEhKiLCqm3z6TNSpVJLk9bZP88veB6H D03n9oEcEhr/kS7FyZThzZxfDSYTbcu0rOrQeOyyWF/pyK2MmT9Bc+XmlQeeFF2WJW0XSez YBk6LIuDrKhwg71Y2m5s1AZ5wmMhjcxQNTSffoE0PuPy5GuBkjX766Z0TeCRA= X-QQ-XMRINFO: M/715EihBoGS47X28/vv4NpnfpeBLnr4Qg== X-QQ-RECHKSPAM: 0 Content-Type: text/plain; charset="utf-8" From: Xu Rao The subsystem NQN starts with the same owned-string replacement sequence as the direct string options handled by nvmf_parse_string_option(): duplicate the matched value, free the previously stored string, and transfer ownership of the new allocation. Reuse nvmf_parse_string_option() for that replacement only. Leave the existing NQN length validation and discovery-NQN update unchanged. The hostnqn and hostid parsing paths are also left untouched. This removes another copy of the match_strdup(), free and ownership-transfer sequence without introducing a dedicated helper or changing option-specific logic. No functional change is intended. Suggested-by: Christoph Hellwig Reviewed-by: Sagi Grimberg Signed-off-by: Xu Rao --- drivers/nvme/host/fabrics.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c index aab3fd279d0e..24385e777307 100644 --- a/drivers/nvme/host/fabrics.c +++ b/drivers/nvme/host/fabrics.c @@ -773,13 +773,9 @@ static int nvmf_parse_options(struct nvmf_ctrl_options= *opts, goto out; break; case NVMF_OPT_NQN: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; + ret =3D nvmf_parse_string_option(args, &opts->subsysnqn); + if (ret) goto out; - } - kfree(opts->subsysnqn); - opts->subsysnqn =3D p; nqnlen =3D strlen(opts->subsysnqn); if (nqnlen >=3D NVMF_NQN_SIZE) { pr_err("%s needs to be < %d bytes\n", --=20 2.50.1 From nobody Sat Sep 26 19:37:18 2026 Received: from smtpbgeu1.qq.com (smtpbgeu1.qq.com [52.59.177.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A2E013B47C4 for ; Mon, 31 Aug 2026 07:12:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=52.59.177.22 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788160372; cv=none; b=C2V2BvaANYncy5qpPXlfhcLAATBiR/GTWvnYcztx8DF7NiBGxqsu4wla9UWvzgbevgUsnK75HEJ/i6SgrTvrKtP+VWHSIi0SFY1zbKGuzq0VMh6PV+Zc2nD9ZEhBrxSMO+fIhPDH4XiOfKeKXwQ50wxXYfxjQHNtTJkXh/KZ7Us= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788160372; c=relaxed/simple; bh=4CRDX1LWJpVWaFDqfWK7eMRv/MyXu8h5n/dReVzx75I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=L3DBQq9W62p9HoYS7bPI222oT6DMMMREZ3KhajD/PDp6GZcY4JetOsqGQTPkupgaArhH1TVEgGsPnwqwI7N5DPltH6FX3ghXgwyENB3er2X0riqr1gXPD6Ld0u+OaX4c4J8I3Ocs2clpXE2u5sLdwQZ1dx4dfwmIEzIzdq73nuE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com; spf=pass smtp.mailfrom=uniontech.com; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b=Dj++rs6p; arc=none smtp.client-ip=52.59.177.22 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=uniontech.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b="Dj++rs6p" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uniontech.com; s=onoh2408; t=1788160318; bh=PcaU8lb3oJj5WuAfj6w4L5H3SWpj2dSt7KUf4MB3SiQ=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=Dj++rs6pzbvsQNmG3xWg5R3x+CDom0l6GJjuxPhmouw6yjTypRFgY4srETzHcuMa7 aYeOAmaOQRcULpj4Rd0feXbK5+JWh2VWCZNzoBVCA3CBCuOlALqrAaj+iMNM5SDtc7 am9akZR/ihaQZ1NzfrfgQr8AdhHLAc1wjJ62XslU= X-QQ-mid: zesmtpgz6t1788160300t215cf119 X-QQ-Originating-IP: mimRkE15pwQbL131ohYG4c/XYUQeUbxmUBZI45Khlhc= Received: from PEN202512010004 ( [113.57.152.160]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 31 Aug 2026 15:11:39 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 1 X-BIZMAIL-ID: 9551787566103979334 EX-QQ-RecipientCnt: 7 From: raoxu To: raoxu@uniontech.com Cc: axboe@kernel.dk, hch@lst.de, kbusch@kernel.org, linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org, sagi@grimberg.me Subject: [PATCH nvme-7.3 v3 4/4] nvme-fabrics: add helper for DH-CHAP secret options Date: Mon, 31 Aug 2026 15:11:36 +0800 Message-ID: <1E3563FE22B8A343+20260831071136.638787-1-raoxu@uniontech.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: References: 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-QQ-SENDSIZE: 520 Feedback-ID: zesmtpgz:uniontech.com:qybglogicsvrgz:qybglogicsvrgz6b-0 X-QQ-XMAILINFO: MTGYztYhR5ET5H/R20ph7EtmGyJY00Ph6krl3NhEgcygu5UtHbuul/V7 W8s3nmH3zv/Oj2lqSsyDlk23t6lE3L70Q8UFgcUkmEvv/byMjRfenaB5JhumfVXDKI2tDec Cmn9eAySh823EpJguLwgnL88IrlwS7Meh/tE3DI+xATrAVeUQwTFk3uHDysz+pk+atWMMl0 1079NYGnnhheUTnbH/X/nJg29NmiY9VVB9H/JNDBh5Fez6ZKLpP1JdFmhfjrHtnlOCJ0Bdv dqKlyq24afXthR6N0wf5oOtVNmnwuxsU0AB7fmzOAQb7YbUfPlJIJrwnFWtloQQWttUKsZd 5JlDDnRbqMtj7vIKalh57AMUVQbfsV0jkkJ3+w921SZgh/xJL6Axud3YymyFEMuWJoLBsB7 ANkHfUsGISbgvZPZpneIwTtMKbdabLxaVK8vz70nqXZFDFoWxYerdPFJtGFUJ9mXLlqsVND Ngk61vcZ4xcyuQN45RdGs4ci4/rBWHg9G/8R9OKEegPdwx7dHGrAsqL9C1hZArkjJr0TLJq kl5/gA0ew6xxELMLuWfa8R6PtvUA8yprO5C6qi6978n+0tTy+dalXjLaMHa3y2pCa238MSl pDr4mEQ517cVmYJ9bJeUobH9qJHwh1mwuHzLrYZXdw1LyD0DQPJWZeOIpFyhXBW9dKMcAvw 9ly21nL58piximwsdxUBFd/ioXzXZ2lneqwe2MwqOi85g5HJqfGjhFlRtDEzAW4AAwCQ4f5 h+8gqOpagdqnf7PSps1sSEYloirAXnly17XJEADZeoxeDdRpUPFk2BKsm+pkvU52mGf2Jy7 EqdqIASy8f8a6bEqtBh7oAVynGOvjNInCyiAXUM1VA6CO7OeoXRf49d4c3w0acF3vANgaGr gr9O/WQzZiVP65sbVkKhrz3I433bgBtDre5oDb6ccC2/bRXuVpT+49WSlq+n8Gnk+QZLK3B HdO1hVdMHxIG6fKAHAOSfYjDkddXecDosNQcYvub3Mc0ityCMRfnuHftM0zIPcOWzekoE73 fIzHDmbjJlxQPn6uPglAsV1ulU5U/8LiCQiNAR2RgOizmf33a44jNFRfn7e0NT3WnAdsp5N Q== X-QQ-XMRINFO: OWPUhxQsoeAVwkVaQIEGSKwwgKCxK/fD5g== X-QQ-RECHKSPAM: 0 Content-Type: text/plain; charset="utf-8" From: Xu Rao The dhchap_secret and dhchap_ctrl_secret options share the same string replacement and DHHC-1 validation rules. The replacement step can reuse nvmf_parse_string_option(), leaving only the DH-CHAP-specific validation in a dedicated helper. Add nvmf_parse_dhchap_secret() to reuse nvmf_parse_string_option() for the common allocation and ownership handling, then perform the DH-CHAP-specific validation. If validation fails, discard the installed value with kfree_sensitive() and clear the field so the normal options cleanup can safely run after nvmf_parse_options() returns an error. Both secret options share this helper because their parsing and validation rules are identical. Suggested-by: Christoph Hellwig Signed-off-by: Xu Rao --- drivers/nvme/host/fabrics.c | 47 ++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c index 24385e777307..207b05ade022 100644 --- a/drivers/nvme/host/fabrics.c +++ b/drivers/nvme/host/fabrics.c @@ -725,6 +725,24 @@ static int nvmf_parse_string_option(substring_t *args,= char **dst) return 0; } =20 +static int nvmf_parse_dhchap_secret(substring_t *args, char **secret) +{ + int ret; + + ret =3D nvmf_parse_string_option(args, secret); + if (ret) + return ret; + + if (strlen(*secret) < 11 || strncmp(*secret, "DHHC-1:", 7)) { + pr_err("Invalid DH-CHAP secret %s\n", *secret); + kfree_sensitive(*secret); + *secret =3D NULL; + return -EINVAL; + } + + return 0; +} + static int nvmf_parse_options(struct nvmf_ctrl_options *opts, const char *buf) { @@ -1010,34 +1028,15 @@ static int nvmf_parse_options(struct nvmf_ctrl_opti= ons *opts, opts->discovery_nqn =3D true; break; case NVMF_OPT_DHCHAP_SECRET: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; - goto out; - } - if (strlen(p) < 11 || strncmp(p, "DHHC-1:", 7)) { - pr_err("Invalid DH-CHAP secret %s\n", p); - kfree_sensitive(p); - ret =3D -EINVAL; + ret =3D nvmf_parse_dhchap_secret(args, &opts->dhchap_secret); + if (ret) goto out; - } - kfree(opts->dhchap_secret); - opts->dhchap_secret =3D p; break; case NVMF_OPT_DHCHAP_CTRL_SECRET: - p =3D match_strdup(args); - if (!p) { - ret =3D -ENOMEM; - goto out; - } - if (strlen(p) < 11 || strncmp(p, "DHHC-1:", 7)) { - pr_err("Invalid DH-CHAP secret %s\n", p); - kfree_sensitive(p); - ret =3D -EINVAL; + ret =3D nvmf_parse_dhchap_secret(args, + &opts->dhchap_ctrl_secret); + if (ret) goto out; - } - kfree(opts->dhchap_ctrl_secret); - opts->dhchap_ctrl_secret =3D p; break; case NVMF_OPT_TLS: if (!IS_ENABLED(CONFIG_NVME_TCP_TLS)) { --=20 2.50.1