[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <82eb95ac-2dca-7a7a-116a-2771c4551bab@suse.de>
Date: Tue, 14 Mar 2023 17:29:25 +0100
From: Hannes Reinecke <hare@...e.de>
To: Lee Duncan <leeman.duncan@...il.com>, linux-scsi@...r.kernel.org,
open-iscsi@...glegroups.com, netdev@...r.kernel.org
Cc: Lee Duncan <lduncan@...e.com>, Chris Leech <cleech@...hat.com>
Subject: Re: [RFC PATCH 5/9] iscsi: set netns for iscsi_tcp hosts
On 2/8/23 18:40, Lee Duncan wrote:
> From: Lee Duncan <lduncan@...e.com>
>
> This lets iscsi_tcp operate in multiple namespaces. It uses current
> during session creation to find the net namespace, but it might be
> better to manage to pass it along from the iscsi netlink socket.
>
And indeed, I'd rather use the namespace from the iscsi netlink socket.
If you use the namespace from session creation you'd better hope that
this function is not called from a workqueue ...
> Signed-off-by: Chris Leech <cleech@...hat.com>
> Signed-off-by: Lee Duncan <lduncan@...e.com>
> ---
> drivers/scsi/iscsi_tcp.c | 7 +++++++
> drivers/scsi/scsi_transport_iscsi.c | 7 ++++++-
> include/scsi/scsi_transport_iscsi.h | 1 +
> 3 files changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c
> index 0454d94e8cf0..22e7a5c93627 100644
> --- a/drivers/scsi/iscsi_tcp.c
> +++ b/drivers/scsi/iscsi_tcp.c
> @@ -1069,6 +1069,11 @@ static int iscsi_sw_tcp_slave_configure(struct scsi_device *sdev)
> return 0;
> }
>
> +static struct net *iscsi_sw_tcp_netns(struct Scsi_Host *shost)
> +{
> + return current->nsproxy->net_ns;
> +}
> +
See above if you can't reference the namespace for the netlink socket here.
> static struct scsi_host_template iscsi_sw_tcp_sht = {
> .module = THIS_MODULE,
> .name = "iSCSI Initiator over TCP/IP",
> @@ -1124,6 +1129,8 @@ static struct iscsi_transport iscsi_sw_tcp_transport = {
> .alloc_pdu = iscsi_sw_tcp_pdu_alloc,
> /* recovery */
> .session_recovery_timedout = iscsi_session_recovery_timedout,
> + /* net namespace */
> + .get_netns = iscsi_sw_tcp_netns,
> };
>
> static int __init iscsi_sw_tcp_init(void)
> diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
> index 230b43d34c5f..996a9abfa1f5 100644
> --- a/drivers/scsi/scsi_transport_iscsi.c
> +++ b/drivers/scsi/scsi_transport_iscsi.c
> @@ -1600,10 +1600,15 @@ static int iscsi_setup_host(struct transport_container *tc, struct device *dev,
> {
> struct Scsi_Host *shost = dev_to_shost(dev);
> struct iscsi_cls_host *ihost = shost->shost_data;
> + struct iscsi_internal *priv = to_iscsi_internal(shost->transportt);
> + struct iscsi_transport *transport = priv->iscsi_transport;
>
> memset(ihost, 0, sizeof(*ihost));
> mutex_init(&ihost->mutex);
> - ihost->netns = &init_net;
> + if (transport->get_netns)
> + ihost->netns = transport->get_netns(shost);
> + else
> + ihost->netns = &init_net;
>
> iscsi_bsg_host_add(shost, ihost);
> /* ignore any bsg add error - we just can't do sgio */
> diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h
> index af0c5a15f316..f8885d0c37d8 100644
> --- a/include/scsi/scsi_transport_iscsi.h
> +++ b/include/scsi/scsi_transport_iscsi.h
> @@ -156,6 +156,7 @@ struct iscsi_transport {
> int (*logout_flashnode_sid) (struct iscsi_cls_session *cls_sess);
> int (*get_host_stats) (struct Scsi_Host *shost, char *buf, int len);
> u8 (*check_protection)(struct iscsi_task *task, sector_t *sector);
> + struct net *(*get_netns)(struct Scsi_Host *shost);
> };
>
> /*
Cheers,
Hannes
Powered by blists - more mailing lists