[PATCH v2] nvme: consider also host_iface when checking ip options
Chao Leng
lengchao at huawei.com
Fri Jul 22 02:37:42 PDT 2022
On 2022/7/22 17:24, Daniel Wagner wrote:
> It's perfectly fine to use the same traddr and trsvcid more than once
> as long we use different a host_iface. This is used in setups where
> the host has more than one interface but the target exposes only one
> IP.
>
> To keep the match logic simple don't allow mixed setups. The user
> needs to use host_iface option consistently for all controllers in
> such setups.
>
> Signed-off-by: Daniel Wagner <dwagner at suse.de>
> ---
>
>
> leap154:~ # nvme connect -t tcp -n nvmet-test -a 192.168.19.54 -s 4420
>
> leap154:~ # nvme connect -t tcp -n nvmet-test -a 192.168.19.54 -s 4420
> Failed to write to /dev/nvme-fabrics: Operation already in progress
> no controller found: failed to write to nvme-fabrics device
>
> leap154:~ # nvme connect -t tcp -n nvmet-test -a 192.168.19.54 -s 4420 -f eth1
> Failed to write to /dev/nvme-fabrics: Operation already in progress
> no controller found: failed to write to nvme-fabrics device
>
> leap154:~ # nvme disconnect -n nvmet-test
> NQN:nvmet-test disconnected 1 controller(s)
>
> leap154:~ # nvme connect -t tcp -n nvmet-test -a 192.168.19.54 -s 4420 -f eth0
>
> leap154:~ # nvme connect -t tcp -n nvmet-test -a 192.168.19.54 -s 4420 -f eth1
>
> drivers/nvme/host/fabrics.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c
> index 604ab0e5a2ad..dc12853d04c9 100644
> --- a/drivers/nvme/host/fabrics.c
> +++ b/drivers/nvme/host/fabrics.c
> @@ -944,7 +944,10 @@ bool nvmf_ip_options_match(struct nvme_ctrl *ctrl,
> {
> if (!nvmf_ctlr_matches_baseopts(ctrl, opts) ||
> strcmp(opts->traddr, ctrl->opts->traddr) ||
> - strcmp(opts->trsvcid, ctrl->opts->trsvcid))
> + strcmp(opts->trsvcid, ctrl->opts->trsvcid) ||
> + (((opts->mask & NVMF_OPT_HOST_IFACE) &&
> + (ctrl->opts->mask & NVMF_OPT_HOST_IFACE)) &&
> + strcmp(opts->host_iface, ctrl->opts->host_iface))) Maybe we should not check the host_iface, because it is not used in the controller
management code. If some users uses these parameters incorrectly, it may result in
unexpected behavior.
> return false;
>
> /*
>
More information about the Linux-nvme
mailing list