* [PATCH V2 0/4] nvmet-auth: auth send / receive cleanup
@ 2023-06-05 6:44 Chaitanya Kulkarni
2023-06-05 6:44 ` [PATCH V2 1/4] nvmet-auth: use common helper to check secp/spsp Chaitanya Kulkarni
` (3 more replies)
0 siblings, 4 replies; 12+ messages in thread
From: Chaitanya Kulkarni @ 2023-06-05 6:44 UTC (permalink / raw)
To: hare; +Cc: hch, sagi, linux-nvme, kbusch, Chaitanya Kulkarni
Hi,
nvmet_execute_auth_send() and nvmet_exeucte_auth_receive() share a lot
of common functionality such as :-
1. Checking secp/spsp values and its error handling.
2. Initializing transfer buffer len and its error handling.
2. Allocating transfer buffer and its error handling.
This code is repeated in both the functions.
Add common helpers with very small restructring of code to remove
duplication of above functionality in the nvmet_exeucte_auth_receive()
and nvmet_execute_auth_send(), it also makes code easy to read as both
the functions are doing substantial work.
Please note that this series is generated on the top of this :-
commit 01cff945c026f1e245ba6401f7df2336ddbae11d (origin/nvme-6.5)
Author: Chaitanya Kulkarni <kch@nvidia.com>
Date: Fri May 19 02:40:52 2023 -0700
nvme-fcloop: no need to return from void function
Remove return at the end of void function.
-ck
- Changes in V2:-
* add reviewe tags
* remove use of conditional operators in 3rd patch
* add a patch to fix the nvmet_sq->dhchap_step type fix from int -> u16
Chaitanya Kulkarni (4):
nvmet-auth: use common helper to check secp/spsp
nvmet_auth: use common helper for buffer alloc
nvmet-auth: use helper for auth send/recv cmd prep
nvmet-auth: use correct type for status variable
drivers/nvme/target/fabrics-cmd-auth.c | 108 +++++++++++--------------
drivers/nvme/target/nvmet.h | 2 +-
2 files changed, 48 insertions(+), 62 deletions(-)
nvme (nvme-6.5) # gitlog -4
6692f4da1048 (HEAD -> nvme-6.5) nvmet-auth: use correct type for status variable
16cb863ed3b1 nvmet-auth: use helper for auth send/recv cmd prep
d980c9183a99 nvmet_auth: use common helper for buffer alloc
104b23f8d911 nvmet-auth: use common helper to check secp/spsp
nvme (nvme-6.5) # git reset HEAD~4 --hard
HEAD is now at 01cff945c026 nvme-fcloop: no need to return from void function
nvme (nvme-6.5) # git am p/nvmet-auth-code-cleanup/*patch; git am --skip
Patch is empty.
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To record the empty patch as an empty commit, run "git am --allow-empty".
To restore the original branch and stop patching, run "git am --abort".
Applying: nvmet-auth: use common helper to check secp/spsp
Applying: nvmet_auth: use common helper for buffer alloc
Applying: nvmet-auth: use helper for auth send/recv cmd prep
Applying: nvmet-auth: use correct type for status variable
nvme (nvme-6.5) # ./compile_nvme.sh
+ modprobe -r nvme-fabrics
+ modprobe -r nvme_loop
+ modprobe -r nvmet
+ modprobe -r nvme
+ sleep 1
+ modprobe -r nvme-core
+ lsmod
+ grep nvme
+ sleep 1
+ git diff
++ nproc
+ make -j 48 M=drivers/nvme/ modules
CC [M] drivers/nvme/target/core.o
CC [M] drivers/nvme/target/configfs.o
CC [M] drivers/nvme/target/admin-cmd.o
CC [M] drivers/nvme/target/fabrics-cmd.o
CC [M] drivers/nvme/target/discovery.o
CC [M] drivers/nvme/target/io-cmd-file.o
CC [M] drivers/nvme/target/io-cmd-bdev.o
CC [M] drivers/nvme/target/passthru.o
CC [M] drivers/nvme/target/zns.o
CC [M] drivers/nvme/target/fabrics-cmd-auth.o
CC [M] drivers/nvme/target/auth.o
CC [M] drivers/nvme/target/trace.o
CC [M] drivers/nvme/target/loop.o
CC [M] drivers/nvme/target/rdma.o
CC [M] drivers/nvme/target/fc.o
CC [M] drivers/nvme/target/fcloop.o
CC [M] drivers/nvme/target/tcp.o
LD [M] drivers/nvme/target/nvme-loop.o
LD [M] drivers/nvme/target/nvme-fcloop.o
LD [M] drivers/nvme/target/nvmet.o
LD [M] drivers/nvme/target/nvmet-fc.o
LD [M] drivers/nvme/target/nvmet-tcp.o
LD [M] drivers/nvme/target/nvmet-rdma.o
MODPOST drivers/nvme/Module.symvers
LD [M] drivers/nvme/target/nvmet.ko
LD [M] drivers/nvme/target/nvme-loop.ko
LD [M] drivers/nvme/target/nvmet-rdma.ko
LD [M] drivers/nvme/target/nvmet-fc.ko
LD [M] drivers/nvme/target/nvme-fcloop.ko
LD [M] drivers/nvme/target/nvmet-tcp.ko
+ HOST=drivers/nvme/host
+ TARGET=drivers/nvme/target
++ uname -r
+ HOST_DEST=/lib/modules/6.4.0-rc2nvme+/kernel/drivers/nvme/host/
++ uname -r
+ TARGET_DEST=/lib/modules/6.4.0-rc2nvme+/kernel/drivers/nvme/target/
+ cp drivers/nvme/host/nvme-core.ko drivers/nvme/host/nvme-fabrics.ko drivers/nvme/host/nvme-fc.ko drivers/nvme/host/nvme.ko drivers/nvme/host/nvme-rdma.ko drivers/nvme/host/nvme-tcp.ko /lib/modules/6.4.0-rc2nvme+/kernel/drivers/nvme/host//
+ cp drivers/nvme/target/nvme-fcloop.ko drivers/nvme/target/nvme-loop.ko drivers/nvme/target/nvmet-fc.ko drivers/nvme/target/nvmet.ko drivers/nvme/target/nvmet-rdma.ko drivers/nvme/target/nvmet-tcp.ko /lib/modules/6.4.0-rc2nvme+/kernel/drivers/nvme/target//
+ ls -lrth /lib/modules/6.4.0-rc2nvme+/kernel/drivers/nvme/host/ /lib/modules/6.4.0-rc2nvme+/kernel/drivers/nvme/target//
/lib/modules/6.4.0-rc2nvme+/kernel/drivers/nvme/host/:
total 7.8M
-rw-r--r--. 1 root root 3.8M Jun 4 23:21 nvme-core.ko
-rw-r--r--. 1 root root 493K Jun 4 23:21 nvme-fabrics.ko
-rw-r--r--. 1 root root 981K Jun 4 23:21 nvme-fc.ko
-rw-r--r--. 1 root root 785K Jun 4 23:21 nvme.ko
-rw-r--r--. 1 root root 929K Jun 4 23:21 nvme-rdma.ko
-rw-r--r--. 1 root root 906K Jun 4 23:21 nvme-tcp.ko
/lib/modules/6.4.0-rc2nvme+/kernel/drivers/nvme/target//:
total 7.4M
-rw-r--r--. 1 root root 537K Jun 4 23:21 nvme-fcloop.ko
-rw-r--r--. 1 root root 476K Jun 4 23:21 nvme-loop.ko
-rw-r--r--. 1 root root 805K Jun 4 23:21 nvmet-fc.ko
-rw-r--r--. 1 root root 4.0M Jun 4 23:21 nvmet.ko
-rw-r--r--. 1 root root 899K Jun 4 23:21 nvmet-rdma.ko
-rw-r--r--. 1 root root 761K Jun 4 23:21 nvmet-tcp.ko
+ sync
+ sync
+ sync
+ modprobe nvme
+ echo 'Press enter to continue ...'
Press enter to continue ...
################nvme_trtype=loop############
nvme/002 (create many subsystems and test discovery) [passed]
runtime 20.311s ... 20.535s
nvme/003 (test if we're sending keep-alives to a discovery controller) [passed]
runtime 10.080s ... 10.080s
nvme/004 (test nvme and nvmet UUID NS descriptors) [passed]
runtime 1.465s ... 1.470s
nvme/005 (reset local loopback target) [passed]
runtime 1.797s ... 1.784s
nvme/006 (create an NVMeOF target with a block device-backed ns) [passed]
runtime 0.060s ... 0.061s
nvme/007 (create an NVMeOF target with a file-backed ns) [passed]
runtime 0.034s ... 0.035s
nvme/008 (create an NVMeOF host with a block device-backed ns) [passed]
runtime 1.468s ... 1.468s
nvme/009 (create an NVMeOF host with a file-backed ns) [passed]
runtime 1.441s ... 1.436s
nvme/010 (run data verification fio job on NVMeOF block device-backed ns) [passed]
runtime 94.861s ... 86.838s
nvme/011 (run data verification fio job on NVMeOF file-backed ns) [passed]
runtime 81.316s ... 71.517s
nvme/012 (run mkfs and data verification fio job on NVMeOF block device-backed ns) [passed]
runtime ... 77.886s
nvme/013 (run mkfs and data verification fio job on NVMeOF file-backed ns) [passed]
runtime 70.922s ... 77.348s
nvme/014 (flush a NVMeOF block device-backed ns) [passed]
runtime 4.239s ... 4.570s
nvme/015 (unit test for NVMe flush for file backed ns) [passed]
runtime 3.763s ... 3.792s
nvme/016 (create/delete many NVMeOF block device-backed ns and test discovery) [passed]
runtime 12.382s ... 12.757s
nvme/017 (create/delete many file-ns and test discovery) [passed]
runtime 12.338s ... 12.283s
nvme/018 (unit test NVMe-oF out of range access on a file backend) [passed]
runtime 1.440s ... 1.434s
nvme/019 (test NVMe DSM Discard command on NVMeOF block-device ns) [passed]
runtime 1.451s ... 1.445s
nvme/020 (test NVMe DSM Discard command on NVMeOF file-backed ns) [passed]
runtime 1.430s ... 1.421s
nvme/021 (test NVMe list command on NVMeOF file-backed ns) [passed]
runtime 1.434s ... 1.434s
nvme/022 (test NVMe reset command on NVMeOF file-backed ns) [passed]
runtime 1.756s ... 1.756s
nvme/023 (test NVMe smart-log command on NVMeOF block-device ns) [passed]
runtime 1.449s ... 1.453s
nvme/024 (test NVMe smart-log command on NVMeOF file-backed ns) [passed]
runtime 1.414s ... 1.435s
nvme/025 (test NVMe effects-log command on NVMeOF file-backed ns) [passed]
runtime 1.431s ... 1.426s
nvme/026 (test NVMe ns-descs command on NVMeOF file-backed ns) [passed]
runtime 1.435s ... 1.417s
nvme/027 (test NVMe ns-rescan command on NVMeOF file-backed ns) [passed]
runtime 1.438s ... 1.438s
nvme/028 (test NVMe list-subsys command on NVMeOF file-backed ns) [passed]
runtime 1.433s ... 1.429s
nvme/029 (test userspace IO via nvme-cli read/write interface) [passed]
runtime 1.579s ... 1.561s
nvme/030 (ensure the discovery generation counter is updated appropriately) [passed]
runtime 0.211s ... 0.209s
nvme/031 (test deletion of NVMeOF controllers immediately after setup) [passed]
runtime 3.968s ... 3.925s
nvme/038 (test deletion of NVMeOF subsystem without enabling) [passed]
runtime 0.013s ... 0.013s
nvme/040 (test nvme fabrics controller reset/disconnect operation during I/O) [passed]
runtime 7.909s ... 7.858s
nvme/041 (Create authenticated connections) [passed]
runtime 0.741s ... 0.766s
nvme/042 (Test dhchap key types for authenticated connections) [passed]
runtime 4.897s ... 4.920s
nvme/043 (Test hash and DH group variations for authenticated connections) [passed]
runtime 3.126s ... 6.955s
nvme/044 (Test bi-directional authentication) [passed]
runtime 1.854s ... 1.797s
nvme/045 (Test re-authentication) [passed]
runtime 4.087s ... 4.039s
nvme/047 (test different queue types for fabric transports) [not run]
nvme_trtype=loop is not supported in this test
nvme/048 (Test queue count changes on reconnect) [not run]
nvme_trtype=loop is not supported in this test
################nvme_trtype=tcp############
nvme/002 (create many subsystems and test discovery) [not run]
runtime 20.535s ...
nvme_trtype=tcp is not supported in this test
nvme/003 (test if we're sending keep-alives to a discovery controller) [passed]
runtime 10.080s ... 10.096s
nvme/004 (test nvme and nvmet UUID NS descriptors) [passed]
runtime 1.470s ... 1.150s
nvme/005 (reset local loopback target) [passed]
runtime 1.784s ... 1.193s
nvme/006 (create an NVMeOF target with a block device-backed ns) [passed]
runtime 0.061s ... 0.060s
nvme/007 (create an NVMeOF target with a file-backed ns) [passed]
runtime 0.035s ... 0.035s
nvme/008 (create an NVMeOF host with a block device-backed ns) [passed]
runtime 1.468s ... 1.153s
nvme/009 (create an NVMeOF host with a file-backed ns) [passed]
runtime 1.436s ... 1.133s
nvme/010 (run data verification fio job on NVMeOF block device-backed ns) [passed]
runtime 86.838s ... 94.475s
nvme/011 (run data verification fio job on NVMeOF file-backed ns) [passed]
runtime 71.517s ... 65.550s
nvme/012 (run mkfs and data verification fio job on NVMeOF block device-backed ns) [passed]
runtime 77.886s ... 88.897s
nvme/013 (run mkfs and data verification fio job on NVMeOF file-backed ns) [passed]
runtime 77.348s ... 62.977s
nvme/014 (flush a NVMeOF block device-backed ns) [passed]
runtime 4.570s ... 4.069s
nvme/015 (unit test for NVMe flush for file backed ns) [passed]
runtime 3.792s ... 3.540s
nvme/016 (create/delete many NVMeOF block device-backed ns and test discovery) [not run]
runtime 12.757s ...
nvme_trtype=tcp is not supported in this test
nvme/017 (create/delete many file-ns and test discovery) [not run]
runtime 12.283s ...
nvme_trtype=tcp is not supported in this test
nvme/018 (unit test NVMe-oF out of range access on a file backend) [passed]
runtime 1.434s ... 1.134s
nvme/019 (test NVMe DSM Discard command on NVMeOF block-device ns) [passed]
runtime 1.445s ... 1.158s
nvme/020 (test NVMe DSM Discard command on NVMeOF file-backed ns) [passed]
runtime 1.421s ... 1.116s
nvme/021 (test NVMe list command on NVMeOF file-backed ns) [passed]
runtime 1.434s ... 1.136s
nvme/022 (test NVMe reset command on NVMeOF file-backed ns) [passed]
runtime 1.756s ... 1.171s
nvme/023 (test NVMe smart-log command on NVMeOF block-device ns) [passed]
runtime 1.453s ... 1.142s
nvme/024 (test NVMe smart-log command on NVMeOF file-backed ns) [passed]
runtime 1.435s ... 1.138s
nvme/025 (test NVMe effects-log command on NVMeOF file-backed ns) [passed]
runtime 1.426s ... 1.123s
nvme/026 (test NVMe ns-descs command on NVMeOF file-backed ns) [passed]
runtime 1.417s ... 1.117s
nvme/027 (test NVMe ns-rescan command on NVMeOF file-backed ns) [passed]
runtime 1.438s ... 1.147s
nvme/028 (test NVMe list-subsys command on NVMeOF file-backed ns) [passed]
runtime 1.429s ... 1.121s
nvme/029 (test userspace IO via nvme-cli read/write interface) [passed]
runtime 1.561s ... 1.259s
nvme/030 (ensure the discovery generation counter is updated appropriately) [passed]
runtime 0.209s ... 0.121s
nvme/031 (test deletion of NVMeOF controllers immediately after setup) [passed]
runtime 3.925s ... 0.815s
nvme/038 (test deletion of NVMeOF subsystem without enabling) [passed]
runtime 0.013s ... 0.017s
nvme/040 (test nvme fabrics controller reset/disconnect operation during I/O) [passed]
runtime 7.858s ... 7.171s
nvme/041 (Create authenticated connections) [passed]
runtime 0.766s ... 0.452s
nvme/042 (Test dhchap key types for authenticated connections) [passed]
runtime 4.920s ... 2.822s
nvme/043 (Test hash and DH group variations for authenticated connections) [passed]
runtime 6.955s ... 0.691s
nvme/044 (Test bi-directional authentication) [passed]
runtime 1.797s ... 1.216s
nvme/045 (Test re-authentication) [passed]
runtime 4.039s ... 3.810s
nvme/047 (test different queue types for fabric transports) [passed]
runtime ... 1.832s
nvme/048 (Test queue count changes on reconnect) [passed]
runtime ... 5.251s
blktests (master) #
--
2.40.0
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH V2 1/4] nvmet-auth: use common helper to check secp/spsp
2023-06-05 6:44 [PATCH V2 0/4] nvmet-auth: auth send / receive cleanup Chaitanya Kulkarni
@ 2023-06-05 6:44 ` Chaitanya Kulkarni
2023-06-05 7:42 ` Hannes Reinecke
2023-06-05 6:44 ` [PATCH V2 2/4] nvmet_auth: use common helper for buffer alloc Chaitanya Kulkarni
` (2 subsequent siblings)
3 siblings, 1 reply; 12+ messages in thread
From: Chaitanya Kulkarni @ 2023-06-05 6:44 UTC (permalink / raw)
To: hare; +Cc: hch, sagi, linux-nvme, kbusch, Chaitanya Kulkarni
Add a common helper to factor out secp/spsp values check in
nvmet_execute_auth_send() and nvmet_execute_auth_receive().
No functional change in this patch.
Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
---
drivers/nvme/target/fabrics-cmd-auth.c | 60 +++++++++++---------------
1 file changed, 24 insertions(+), 36 deletions(-)
diff --git a/drivers/nvme/target/fabrics-cmd-auth.c b/drivers/nvme/target/fabrics-cmd-auth.c
index 586458f765f1..42594e086de7 100644
--- a/drivers/nvme/target/fabrics-cmd-auth.c
+++ b/drivers/nvme/target/fabrics-cmd-auth.c
@@ -12,6 +12,23 @@
#include <crypto/kpp.h>
#include "nvmet.h"
+static u16 nvmet_auth_check_secp_spsp(struct nvmet_req *req)
+{
+ if (req->cmd->auth_send.secp != NVME_AUTH_DHCHAP_PROTOCOL_IDENTIFIER) {
+ req->error_loc = offsetof(struct nvmf_auth_send_command, secp);
+ return NVME_SC_INVALID_FIELD | NVME_SC_DNR;
+ }
+ if (req->cmd->auth_send.spsp0 != 0x01) {
+ req->error_loc = offsetof(struct nvmf_auth_send_command, spsp0);
+ return NVME_SC_INVALID_FIELD | NVME_SC_DNR;
+ }
+ if (req->cmd->auth_send.spsp1 != 0x01) {
+ req->error_loc = offsetof(struct nvmf_auth_send_command, spsp1);
+ return NVME_SC_INVALID_FIELD | NVME_SC_DNR;
+ }
+ return NVME_SC_SUCCESS;
+}
+
static void nvmet_auth_expired_work(struct work_struct *work)
{
struct nvmet_sq *sq = container_of(to_delayed_work(work),
@@ -185,26 +202,12 @@ void nvmet_execute_auth_send(struct nvmet_req *req)
struct nvmf_auth_dhchap_success2_data *data;
void *d;
u32 tl;
- u16 status = 0;
+ u16 status;
- if (req->cmd->auth_send.secp != NVME_AUTH_DHCHAP_PROTOCOL_IDENTIFIER) {
- status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
- req->error_loc =
- offsetof(struct nvmf_auth_send_command, secp);
- goto done;
- }
- if (req->cmd->auth_send.spsp0 != 0x01) {
- status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
- req->error_loc =
- offsetof(struct nvmf_auth_send_command, spsp0);
- goto done;
- }
- if (req->cmd->auth_send.spsp1 != 0x01) {
- status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
- req->error_loc =
- offsetof(struct nvmf_auth_send_command, spsp1);
+ status = nvmet_auth_check_secp_spsp(req);
+ if (status)
goto done;
- }
+
tl = le32_to_cpu(req->cmd->auth_send.tl);
if (!tl) {
status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
@@ -432,26 +435,11 @@ void nvmet_execute_auth_receive(struct nvmet_req *req)
struct nvmet_ctrl *ctrl = req->sq->ctrl;
void *d;
u32 al;
- u16 status = 0;
+ u16 status;
- if (req->cmd->auth_receive.secp != NVME_AUTH_DHCHAP_PROTOCOL_IDENTIFIER) {
- status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
- req->error_loc =
- offsetof(struct nvmf_auth_receive_command, secp);
- goto done;
- }
- if (req->cmd->auth_receive.spsp0 != 0x01) {
- status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
- req->error_loc =
- offsetof(struct nvmf_auth_receive_command, spsp0);
- goto done;
- }
- if (req->cmd->auth_receive.spsp1 != 0x01) {
- status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
- req->error_loc =
- offsetof(struct nvmf_auth_receive_command, spsp1);
+ status = nvmet_auth_check_secp_spsp(req);
+ if (status)
goto done;
- }
al = le32_to_cpu(req->cmd->auth_receive.al);
if (!al) {
status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
--
2.40.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH V2 2/4] nvmet_auth: use common helper for buffer alloc
2023-06-05 6:44 [PATCH V2 0/4] nvmet-auth: auth send / receive cleanup Chaitanya Kulkarni
2023-06-05 6:44 ` [PATCH V2 1/4] nvmet-auth: use common helper to check secp/spsp Chaitanya Kulkarni
@ 2023-06-05 6:44 ` Chaitanya Kulkarni
2023-06-05 7:45 ` Hannes Reinecke
2023-06-05 6:44 ` [PATCH V2 3/4] nvmet-auth: use helper for auth send/recv cmd prep Chaitanya Kulkarni
2023-06-05 6:44 ` [PATCH V2 4/4] nvmet-auth: use correct type for status variable Chaitanya Kulkarni
3 siblings, 1 reply; 12+ messages in thread
From: Chaitanya Kulkarni @ 2023-06-05 6:44 UTC (permalink / raw)
To: hare; +Cc: hch, sagi, linux-nvme, kbusch, Chaitanya Kulkarni
Add a common helper to factor out buffer allocation in
nvmet_execute_auth_send() and nvmet_execute_auth_receive().
Only functional change in this patch is transfer buffer allocation is
moved before nvmet_check_transfer_len() and it is freed if when
nvmet_check_transfer_len() fails. But similar allocation and free is
used in error unwind path in nvme code and it is not in fast path, so
it shuold be fine.
Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
---
drivers/nvme/target/fabrics-cmd-auth.c | 43 ++++++++++++--------------
1 file changed, 19 insertions(+), 24 deletions(-)
diff --git a/drivers/nvme/target/fabrics-cmd-auth.c b/drivers/nvme/target/fabrics-cmd-auth.c
index 42594e086de7..778961e231a3 100644
--- a/drivers/nvme/target/fabrics-cmd-auth.c
+++ b/drivers/nvme/target/fabrics-cmd-auth.c
@@ -29,6 +29,18 @@ static u16 nvmet_auth_check_secp_spsp(struct nvmet_req *req)
return NVME_SC_SUCCESS;
}
+static u16 nvmet_auth_alloc_transfer_buffer(struct nvmet_req *req, void **buf,
+ u32 *len)
+{
+ *len = le32_to_cpu(req->cmd->auth_receive.al);
+ if (!*len) {
+ req->error_loc = offsetof(struct nvmf_auth_receive_command, al);
+ return NVME_SC_INVALID_FIELD | NVME_SC_DNR;
+ }
+ *buf = kmalloc(*len, GFP_KERNEL);
+ return *buf ? NVME_SC_SUCCESS : NVME_SC_INTERNAL;
+}
+
static void nvmet_auth_expired_work(struct work_struct *work)
{
struct nvmet_sq *sq = container_of(to_delayed_work(work),
@@ -207,25 +219,16 @@ void nvmet_execute_auth_send(struct nvmet_req *req)
status = nvmet_auth_check_secp_spsp(req);
if (status)
goto done;
-
- tl = le32_to_cpu(req->cmd->auth_send.tl);
- if (!tl) {
- status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
- req->error_loc =
- offsetof(struct nvmf_auth_send_command, tl);
+ status = nvmet_auth_alloc_transfer_buffer(req, &d, &tl);
+ if (status)
goto done;
- }
+
if (!nvmet_check_transfer_len(req, tl)) {
pr_debug("%s: transfer length mismatch (%u)\n", __func__, tl);
+ kfree(d);
return;
}
- d = kmalloc(tl, GFP_KERNEL);
- if (!d) {
- status = NVME_SC_INTERNAL;
- goto done;
- }
-
status = nvmet_copy_from_sgl(req, 0, d, tl);
if (status)
goto done_kfree;
@@ -440,23 +443,15 @@ void nvmet_execute_auth_receive(struct nvmet_req *req)
status = nvmet_auth_check_secp_spsp(req);
if (status)
goto done;
- al = le32_to_cpu(req->cmd->auth_receive.al);
- if (!al) {
- status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
- req->error_loc =
- offsetof(struct nvmf_auth_receive_command, al);
+ status = nvmet_auth_alloc_transfer_buffer(req, &d, &al);
+ if (status)
goto done;
- }
if (!nvmet_check_transfer_len(req, al)) {
pr_debug("%s: transfer length mismatch (%u)\n", __func__, al);
+ kfree(d);
return;
}
- d = kmalloc(al, GFP_KERNEL);
- if (!d) {
- status = NVME_SC_INTERNAL;
- goto done;
- }
pr_debug("%s: ctrl %d qid %d step %x\n", __func__,
ctrl->cntlid, req->sq->qid, req->sq->dhchap_step);
switch (req->sq->dhchap_step) {
--
2.40.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH V2 3/4] nvmet-auth: use helper for auth send/recv cmd prep
2023-06-05 6:44 [PATCH V2 0/4] nvmet-auth: auth send / receive cleanup Chaitanya Kulkarni
2023-06-05 6:44 ` [PATCH V2 1/4] nvmet-auth: use common helper to check secp/spsp Chaitanya Kulkarni
2023-06-05 6:44 ` [PATCH V2 2/4] nvmet_auth: use common helper for buffer alloc Chaitanya Kulkarni
@ 2023-06-05 6:44 ` Chaitanya Kulkarni
2023-06-05 7:46 ` Hannes Reinecke
2023-06-07 4:57 ` Christoph Hellwig
2023-06-05 6:44 ` [PATCH V2 4/4] nvmet-auth: use correct type for status variable Chaitanya Kulkarni
3 siblings, 2 replies; 12+ messages in thread
From: Chaitanya Kulkarni @ 2023-06-05 6:44 UTC (permalink / raw)
To: hare; +Cc: hch, sagi, linux-nvme, kbusch, Chaitanya Kulkarni
Add a common helper to factor out secp/spsp values check and transfer
buffer allocation in nvmet_execute_auth_send() and
nvmet_execute_auth_receive().
Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
---
drivers/nvme/target/fabrics-cmd-auth.c | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/drivers/nvme/target/fabrics-cmd-auth.c b/drivers/nvme/target/fabrics-cmd-auth.c
index 778961e231a3..d331c22ed26e 100644
--- a/drivers/nvme/target/fabrics-cmd-auth.c
+++ b/drivers/nvme/target/fabrics-cmd-auth.c
@@ -41,6 +41,15 @@ static u16 nvmet_auth_alloc_transfer_buffer(struct nvmet_req *req, void **buf,
return *buf ? NVME_SC_SUCCESS : NVME_SC_INTERNAL;
}
+static u16 nvmet_auth_common_prep(struct nvmet_req *req, void **buf, u32 *len)
+{
+ u16 status = nvmet_auth_check_secp_spsp(req);
+
+ if (status)
+ return status;
+ return nvmet_auth_alloc_transfer_buffer(req, buf, len);
+}
+
static void nvmet_auth_expired_work(struct work_struct *work)
{
struct nvmet_sq *sq = container_of(to_delayed_work(work),
@@ -216,10 +225,7 @@ void nvmet_execute_auth_send(struct nvmet_req *req)
u32 tl;
u16 status;
- status = nvmet_auth_check_secp_spsp(req);
- if (status)
- goto done;
- status = nvmet_auth_alloc_transfer_buffer(req, &d, &tl);
+ status = nvmet_auth_common_prep(req, &d, &tl);
if (status)
goto done;
@@ -440,10 +446,7 @@ void nvmet_execute_auth_receive(struct nvmet_req *req)
u32 al;
u16 status;
- status = nvmet_auth_check_secp_spsp(req);
- if (status)
- goto done;
- status = nvmet_auth_alloc_transfer_buffer(req, &d, &al);
+ status = nvmet_auth_common_prep(req, &d, &al);
if (status)
goto done;
if (!nvmet_check_transfer_len(req, al)) {
--
2.40.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH V2 4/4] nvmet-auth: use correct type for status variable
2023-06-05 6:44 [PATCH V2 0/4] nvmet-auth: auth send / receive cleanup Chaitanya Kulkarni
` (2 preceding siblings ...)
2023-06-05 6:44 ` [PATCH V2 3/4] nvmet-auth: use helper for auth send/recv cmd prep Chaitanya Kulkarni
@ 2023-06-05 6:44 ` Chaitanya Kulkarni
2023-06-05 7:49 ` Hannes Reinecke
2023-06-07 4:58 ` Christoph Hellwig
3 siblings, 2 replies; 12+ messages in thread
From: Chaitanya Kulkarni @ 2023-06-05 6:44 UTC (permalink / raw)
To: hare; +Cc: hch, sagi, linux-nvme, kbusch, Chaitanya Kulkarni
In structructure nvmet_sq dhchap_step member is responsible to hold
following values :-
NVME_AUTH_DHCHAP_FAILURE_FAILED = 0x01,
NVME_AUTH_DHCHAP_FAILURE_NOT_USABLE = 0x02,
NVME_AUTH_DHCHAP_FAILURE_CONCAT_MISMATCH = 0x03,
NVME_AUTH_DHCHAP_FAILURE_HASH_UNUSABLE = 0x04,
NVME_AUTH_DHCHAP_FAILURE_DHGROUP_UNUSABLE = 0x05,
NVME_AUTH_DHCHAP_FAILURE_INCORRECT_PAYLOAD = 0x06,
NVME_AUTH_DHCHAP_FAILURE_INCORRECT_MESSAGE = 0x07,
These values can never be negative, hence change int type of
dhchap_step to u16 in the nvmet_sq declaration.
Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
---
drivers/nvme/target/nvmet.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/nvme/target/nvmet.h b/drivers/nvme/target/nvmet.h
index 6cf723bc664e..66d8673c3ebf 100644
--- a/drivers/nvme/target/nvmet.h
+++ b/drivers/nvme/target/nvmet.h
@@ -113,7 +113,7 @@ struct nvmet_sq {
struct delayed_work auth_expired_work;
u16 dhchap_tid;
u16 dhchap_status;
- int dhchap_step;
+ u16 dhchap_step;
u8 *dhchap_c1;
u8 *dhchap_c2;
u32 dhchap_s1;
--
2.40.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH V2 1/4] nvmet-auth: use common helper to check secp/spsp
2023-06-05 6:44 ` [PATCH V2 1/4] nvmet-auth: use common helper to check secp/spsp Chaitanya Kulkarni
@ 2023-06-05 7:42 ` Hannes Reinecke
0 siblings, 0 replies; 12+ messages in thread
From: Hannes Reinecke @ 2023-06-05 7:42 UTC (permalink / raw)
To: Chaitanya Kulkarni; +Cc: hch, sagi, linux-nvme, kbusch
On 6/5/23 08:44, Chaitanya Kulkarni wrote:
> Add a common helper to factor out secp/spsp values check in
> nvmet_execute_auth_send() and nvmet_execute_auth_receive().
>
> No functional change in this patch.
>
> Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
> ---
> drivers/nvme/target/fabrics-cmd-auth.c | 60 +++++++++++---------------
> 1 file changed, 24 insertions(+), 36 deletions(-)
>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Cheers,
Hannes
--
Dr. Hannes Reinecke Kernel Storage Architect
hare@suse.de +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Ivo Totev, Andrew
Myers, Andrew McDonald, Martje Boudien Moerman
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V2 2/4] nvmet_auth: use common helper for buffer alloc
2023-06-05 6:44 ` [PATCH V2 2/4] nvmet_auth: use common helper for buffer alloc Chaitanya Kulkarni
@ 2023-06-05 7:45 ` Hannes Reinecke
0 siblings, 0 replies; 12+ messages in thread
From: Hannes Reinecke @ 2023-06-05 7:45 UTC (permalink / raw)
To: Chaitanya Kulkarni; +Cc: hch, sagi, linux-nvme, kbusch
On 6/5/23 08:44, Chaitanya Kulkarni wrote:
> Add a common helper to factor out buffer allocation in
> nvmet_execute_auth_send() and nvmet_execute_auth_receive().
>
> Only functional change in this patch is transfer buffer allocation is
> moved before nvmet_check_transfer_len() and it is freed if when
> nvmet_check_transfer_len() fails. But similar allocation and free is
> used in error unwind path in nvme code and it is not in fast path, so
> it shuold be fine.
>
> Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
> ---
> drivers/nvme/target/fabrics-cmd-auth.c | 43 ++++++++++++--------------
> 1 file changed, 19 insertions(+), 24 deletions(-)
>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Cheers,
Hannes
--
Dr. Hannes Reinecke Kernel Storage Architect
hare@suse.de +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Ivo Totev, Andrew
Myers, Andrew McDonald, Martje Boudien Moerman
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V2 3/4] nvmet-auth: use helper for auth send/recv cmd prep
2023-06-05 6:44 ` [PATCH V2 3/4] nvmet-auth: use helper for auth send/recv cmd prep Chaitanya Kulkarni
@ 2023-06-05 7:46 ` Hannes Reinecke
2023-06-05 8:41 ` Chaitanya Kulkarni
2023-06-07 4:57 ` Christoph Hellwig
1 sibling, 1 reply; 12+ messages in thread
From: Hannes Reinecke @ 2023-06-05 7:46 UTC (permalink / raw)
To: Chaitanya Kulkarni; +Cc: hch, sagi, linux-nvme, kbusch
On 6/5/23 08:44, Chaitanya Kulkarni wrote:
> Add a common helper to factor out secp/spsp values check and transfer
> buffer allocation in nvmet_execute_auth_send() and
> nvmet_execute_auth_receive().
>
> Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
> ---
> drivers/nvme/target/fabrics-cmd-auth.c | 19 +++++++++++--------
> 1 file changed, 11 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/nvme/target/fabrics-cmd-auth.c b/drivers/nvme/target/fabrics-cmd-auth.c
> index 778961e231a3..d331c22ed26e 100644
> --- a/drivers/nvme/target/fabrics-cmd-auth.c
> +++ b/drivers/nvme/target/fabrics-cmd-auth.c
> @@ -41,6 +41,15 @@ static u16 nvmet_auth_alloc_transfer_buffer(struct nvmet_req *req, void **buf,
> return *buf ? NVME_SC_SUCCESS : NVME_SC_INTERNAL;
> }
>
> +static u16 nvmet_auth_common_prep(struct nvmet_req *req, void **buf, u32 *len)
> +{
> + u16 status = nvmet_auth_check_secp_spsp(req);
> +
> + if (status)
> + return status;
> + return nvmet_auth_alloc_transfer_buffer(req, buf, len);
> +}
> +
A wrapper for a wrapper?
Please move nvmet_auch_check_secp_spsp() tion
nvmet_auth_alloc_tranfer_buffer().
Cheers,
Hannes
--
Dr. Hannes Reinecke Kernel Storage Architect
hare@suse.de +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Ivo Totev, Andrew
Myers, Andrew McDonald, Martje Boudien Moerman
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V2 4/4] nvmet-auth: use correct type for status variable
2023-06-05 6:44 ` [PATCH V2 4/4] nvmet-auth: use correct type for status variable Chaitanya Kulkarni
@ 2023-06-05 7:49 ` Hannes Reinecke
2023-06-07 4:58 ` Christoph Hellwig
1 sibling, 0 replies; 12+ messages in thread
From: Hannes Reinecke @ 2023-06-05 7:49 UTC (permalink / raw)
To: Chaitanya Kulkarni; +Cc: hch, sagi, linux-nvme, kbusch
On 6/5/23 08:44, Chaitanya Kulkarni wrote:
> In structructure nvmet_sq dhchap_step member is responsible to hold
Spelling.
Also please drop the 'is responsible for' to just read:
'The dhchap_step member of structure nvmet_sq holds the following values:'
> following values :-
>
> NVME_AUTH_DHCHAP_FAILURE_FAILED = 0x01,
> NVME_AUTH_DHCHAP_FAILURE_NOT_USABLE = 0x02,
> NVME_AUTH_DHCHAP_FAILURE_CONCAT_MISMATCH = 0x03,
> NVME_AUTH_DHCHAP_FAILURE_HASH_UNUSABLE = 0x04,
> NVME_AUTH_DHCHAP_FAILURE_DHGROUP_UNUSABLE = 0x05,
> NVME_AUTH_DHCHAP_FAILURE_INCORRECT_PAYLOAD = 0x06,
> NVME_AUTH_DHCHAP_FAILURE_INCORRECT_MESSAGE = 0x07,
>
> These values can never be negative, hence change int type of
> dhchap_step to u16 in the nvmet_sq declaration.
>
> Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
> ---
> drivers/nvme/target/nvmet.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
Otherwise the patch is okay.
Cheers,
Hannes
--
Dr. Hannes Reinecke Kernel Storage Architect
hare@suse.de +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Ivo Totev, Andrew
Myers, Andrew McDonald, Martje Boudien Moerman
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V2 3/4] nvmet-auth: use helper for auth send/recv cmd prep
2023-06-05 7:46 ` Hannes Reinecke
@ 2023-06-05 8:41 ` Chaitanya Kulkarni
0 siblings, 0 replies; 12+ messages in thread
From: Chaitanya Kulkarni @ 2023-06-05 8:41 UTC (permalink / raw)
To: Hannes Reinecke, Chaitanya Kulkarni; +Cc: hch, sagi, linux-nvme, kbusch
On 6/5/23 00:46, Hannes Reinecke wrote:
> On 6/5/23 08:44, Chaitanya Kulkarni wrote:
>> Add a common helper to factor out secp/spsp values check and transfer
>> buffer allocation in nvmet_execute_auth_send() and
>> nvmet_execute_auth_receive().
>>
>> Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
>> ---
>> drivers/nvme/target/fabrics-cmd-auth.c | 19 +++++++++++--------
>> 1 file changed, 11 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/nvme/target/fabrics-cmd-auth.c
>> b/drivers/nvme/target/fabrics-cmd-auth.c
>> index 778961e231a3..d331c22ed26e 100644
>> --- a/drivers/nvme/target/fabrics-cmd-auth.c
>> +++ b/drivers/nvme/target/fabrics-cmd-auth.c
>> @@ -41,6 +41,15 @@ static u16 nvmet_auth_alloc_transfer_buffer(struct
>> nvmet_req *req, void **buf,
>> return *buf ? NVME_SC_SUCCESS : NVME_SC_INTERNAL;
>> }
>> +static u16 nvmet_auth_common_prep(struct nvmet_req *req, void
>> **buf, u32 *len)
>> +{
>> + u16 status = nvmet_auth_check_secp_spsp(req);
>> +
>> + if (status)
>> + return status;
>> + return nvmet_auth_alloc_transfer_buffer(req, buf, len);
>> +}
>> +
> A wrapper for a wrapper?
> Please move nvmet_auch_check_secp_spsp() tion
> nvmet_auth_alloc_tranfer_buffer().
>
> Cheers,
>
> Hannes
checking secp and spsp and allocating memory are two different things,
let me restructure this series to remove this wrapper...
-ck
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V2 3/4] nvmet-auth: use helper for auth send/recv cmd prep
2023-06-05 6:44 ` [PATCH V2 3/4] nvmet-auth: use helper for auth send/recv cmd prep Chaitanya Kulkarni
2023-06-05 7:46 ` Hannes Reinecke
@ 2023-06-07 4:57 ` Christoph Hellwig
1 sibling, 0 replies; 12+ messages in thread
From: Christoph Hellwig @ 2023-06-07 4:57 UTC (permalink / raw)
To: Chaitanya Kulkarni; +Cc: hare, hch, sagi, linux-nvme, kbusch
On Sun, Jun 04, 2023 at 11:44:33PM -0700, Chaitanya Kulkarni wrote:
> Add a common helper to factor out secp/spsp values check and transfer
> buffer allocation in nvmet_execute_auth_send() and
> nvmet_execute_auth_receive().
While the patch looks correct, I can't say I really like. Having a
"common prep" function for just two unrelated things doesn't exactly
improve readability. And it also doesn't remove all that much code.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V2 4/4] nvmet-auth: use correct type for status variable
2023-06-05 6:44 ` [PATCH V2 4/4] nvmet-auth: use correct type for status variable Chaitanya Kulkarni
2023-06-05 7:49 ` Hannes Reinecke
@ 2023-06-07 4:58 ` Christoph Hellwig
1 sibling, 0 replies; 12+ messages in thread
From: Christoph Hellwig @ 2023-06-07 4:58 UTC (permalink / raw)
To: Chaitanya Kulkarni; +Cc: hare, hch, sagi, linux-nvme, kbusch
Looks good:
Reviewed-by: Christoph Hellwig <hch@lst.de>
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2023-06-07 4:58 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-05 6:44 [PATCH V2 0/4] nvmet-auth: auth send / receive cleanup Chaitanya Kulkarni
2023-06-05 6:44 ` [PATCH V2 1/4] nvmet-auth: use common helper to check secp/spsp Chaitanya Kulkarni
2023-06-05 7:42 ` Hannes Reinecke
2023-06-05 6:44 ` [PATCH V2 2/4] nvmet_auth: use common helper for buffer alloc Chaitanya Kulkarni
2023-06-05 7:45 ` Hannes Reinecke
2023-06-05 6:44 ` [PATCH V2 3/4] nvmet-auth: use helper for auth send/recv cmd prep Chaitanya Kulkarni
2023-06-05 7:46 ` Hannes Reinecke
2023-06-05 8:41 ` Chaitanya Kulkarni
2023-06-07 4:57 ` Christoph Hellwig
2023-06-05 6:44 ` [PATCH V2 4/4] nvmet-auth: use correct type for status variable Chaitanya Kulkarni
2023-06-05 7:49 ` Hannes Reinecke
2023-06-07 4:58 ` Christoph Hellwig
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).