From: Chris Leech <cleech-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: open-iscsi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org,
linux-scsi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: [RFC PATCH 1/4] iscsi: create per-net iscsi nl kernel sockets
Date: Wed, 13 May 2015 15:12:44 -0700 [thread overview]
Message-ID: <1431555167-23995-2-git-send-email-cleech@redhat.com> (raw)
In-Reply-To: <1431555167-23995-1-git-send-email-cleech-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Prepare iSCSI netlink to operate in multiple namespaces.
---
drivers/scsi/scsi_transport_iscsi.c | 67 +++++++++++++++++++++++++++++++------
1 file changed, 57 insertions(+), 10 deletions(-)
diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
index 67d43e3..88a3347 100644
--- a/drivers/scsi/scsi_transport_iscsi.c
+++ b/drivers/scsi/scsi_transport_iscsi.c
@@ -26,6 +26,8 @@
#include <linux/bsg-lib.h>
#include <linux/idr.h>
#include <net/tcp.h>
+#include <net/net_namespace.h>
+#include <net/netns/generic.h>
#include <scsi/scsi.h>
#include <scsi/scsi_host.h>
#include <scsi/scsi_device.h>
@@ -1606,7 +1608,11 @@ static DECLARE_TRANSPORT_CLASS(iscsi_connection_class,
NULL,
NULL);
-static struct sock *nls;
+struct iscsi_net {
+ struct sock *nls;
+};
+
+static int iscsi_net_id __read_mostly;
static DEFINE_MUTEX(rx_queue_mutex);
static LIST_HEAD(sesslist);
@@ -2338,11 +2344,23 @@ iscsi_if_transport_lookup(struct iscsi_transport *tt)
}
static int
-iscsi_multicast_skb(struct sk_buff *skb, uint32_t group, gfp_t gfp)
+iscsi_multicast_netns(struct net *net, struct sk_buff *skb,
+ uint32_t group, gfp_t gfp)
{
+ struct sock *nls;
+ struct iscsi_net *isn;
+
+ isn = net_generic(net, iscsi_net_id);
+ nls = isn->nls;
return nlmsg_multicast(nls, skb, 0, group, gfp);
}
+static int
+iscsi_multicast_skb(struct sk_buff *skb, uint32_t group, gfp_t gfp)
+{
+ return iscsi_multicast_netns(&init_net, skb, group, gfp);
+}
+
int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr,
char *data, uint32_t data_size)
{
@@ -4505,13 +4523,42 @@ int iscsi_unregister_transport(struct iscsi_transport *tt)
}
EXPORT_SYMBOL_GPL(iscsi_unregister_transport);
-static __init int iscsi_transport_init(void)
+static int __net_init iscsi_net_init(struct net *net)
{
- int err;
+ struct sock *nls;
+ struct iscsi_net *isn;
struct netlink_kernel_cfg cfg = {
.groups = 1,
.input = iscsi_if_rx,
};
+
+ nls = netlink_kernel_create(net, NETLINK_ISCSI, &cfg);
+ if (!nls)
+ return -ENOMEM;
+ isn = net_generic(net, iscsi_net_id);
+ isn->nls = nls;
+ return 0;
+}
+
+static void __net_exit iscsi_net_exit(struct net *net)
+{
+ struct iscsi_net *isn;
+
+ isn = net_generic(net, iscsi_net_id);
+ netlink_kernel_release(isn->nls);
+ isn->nls = NULL;
+}
+
+static struct pernet_operations iscsi_net_ops = {
+ .init = iscsi_net_init,
+ .exit = iscsi_net_exit,
+ .id = &iscsi_net_id,
+ .size = sizeof(struct iscsi_net),
+};
+
+static __init int iscsi_transport_init(void)
+{
+ int err;
printk(KERN_INFO "Loading iSCSI transport class v%s.\n",
ISCSI_TRANSPORT_VERSION);
@@ -4545,8 +4592,8 @@ static __init int iscsi_transport_init(void)
if (err)
goto unregister_session_class;
- nls = netlink_kernel_create(&init_net, NETLINK_ISCSI, &cfg);
- if (!nls) {
+ err = register_pernet_subsys(&iscsi_net_ops);
+ if (err) {
err = -ENOBUFS;
goto unregister_flashnode_bus;
}
@@ -4554,13 +4601,13 @@ static __init int iscsi_transport_init(void)
iscsi_eh_timer_workq = create_singlethread_workqueue("iscsi_eh");
if (!iscsi_eh_timer_workq) {
err = -ENOMEM;
- goto release_nls;
+ goto unregister_pernet_subsys;
}
return 0;
-release_nls:
- netlink_kernel_release(nls);
+unregister_pernet_subsys:
+ unregister_pernet_subsys(&iscsi_net_ops);
unregister_flashnode_bus:
bus_unregister(&iscsi_flashnode_bus);
unregister_session_class:
@@ -4581,7 +4628,7 @@ unregister_transport_class:
static void __exit iscsi_transport_exit(void)
{
destroy_workqueue(iscsi_eh_timer_workq);
- netlink_kernel_release(nls);
+ unregister_pernet_subsys(&iscsi_net_ops);
bus_unregister(&iscsi_flashnode_bus);
transport_class_unregister(&iscsi_connection_class);
transport_class_unregister(&iscsi_session_class);
--
2.1.0
--
You received this message because you are subscribed to the Google Groups "open-iscsi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to open-iscsi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To post to this group, send email to open-iscsi-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
Visit this group at http://groups.google.com/group/open-iscsi.
For more options, visit https://groups.google.com/d/optout.
WARNING: multiple messages have this Message-ID (diff)
From: Chris Leech <cleech-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: <open-iscsi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>,
<linux-scsi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: [RFC PATCH 1/4] iscsi: create per-net iscsi nl kernel sockets
Date: Wed, 13 May 2015 15:12:44 -0700 [thread overview]
Message-ID: <1431555167-23995-2-git-send-email-cleech@redhat.com> (raw)
In-Reply-To: <1431555167-23995-1-git-send-email-cleech-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Prepare iSCSI netlink to operate in multiple namespaces.
---
drivers/scsi/scsi_transport_iscsi.c | 67 +++++++++++++++++++++++++++++++------
1 file changed, 57 insertions(+), 10 deletions(-)
diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
index 67d43e3..88a3347 100644
--- a/drivers/scsi/scsi_transport_iscsi.c
+++ b/drivers/scsi/scsi_transport_iscsi.c
@@ -26,6 +26,8 @@
#include <linux/bsg-lib.h>
#include <linux/idr.h>
#include <net/tcp.h>
+#include <net/net_namespace.h>
+#include <net/netns/generic.h>
#include <scsi/scsi.h>
#include <scsi/scsi_host.h>
#include <scsi/scsi_device.h>
@@ -1606,7 +1608,11 @@ static DECLARE_TRANSPORT_CLASS(iscsi_connection_class,
NULL,
NULL);
-static struct sock *nls;
+struct iscsi_net {
+ struct sock *nls;
+};
+
+static int iscsi_net_id __read_mostly;
static DEFINE_MUTEX(rx_queue_mutex);
static LIST_HEAD(sesslist);
@@ -2338,11 +2344,23 @@ iscsi_if_transport_lookup(struct iscsi_transport *tt)
}
static int
-iscsi_multicast_skb(struct sk_buff *skb, uint32_t group, gfp_t gfp)
+iscsi_multicast_netns(struct net *net, struct sk_buff *skb,
+ uint32_t group, gfp_t gfp)
{
+ struct sock *nls;
+ struct iscsi_net *isn;
+
+ isn = net_generic(net, iscsi_net_id);
+ nls = isn->nls;
return nlmsg_multicast(nls, skb, 0, group, gfp);
}
+static int
+iscsi_multicast_skb(struct sk_buff *skb, uint32_t group, gfp_t gfp)
+{
+ return iscsi_multicast_netns(&init_net, skb, group, gfp);
+}
+
int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr,
char *data, uint32_t data_size)
{
@@ -4505,13 +4523,42 @@ int iscsi_unregister_transport(struct iscsi_transport *tt)
}
EXPORT_SYMBOL_GPL(iscsi_unregister_transport);
-static __init int iscsi_transport_init(void)
+static int __net_init iscsi_net_init(struct net *net)
{
- int err;
+ struct sock *nls;
+ struct iscsi_net *isn;
struct netlink_kernel_cfg cfg = {
.groups = 1,
.input = iscsi_if_rx,
};
+
+ nls = netlink_kernel_create(net, NETLINK_ISCSI, &cfg);
+ if (!nls)
+ return -ENOMEM;
+ isn = net_generic(net, iscsi_net_id);
+ isn->nls = nls;
+ return 0;
+}
+
+static void __net_exit iscsi_net_exit(struct net *net)
+{
+ struct iscsi_net *isn;
+
+ isn = net_generic(net, iscsi_net_id);
+ netlink_kernel_release(isn->nls);
+ isn->nls = NULL;
+}
+
+static struct pernet_operations iscsi_net_ops = {
+ .init = iscsi_net_init,
+ .exit = iscsi_net_exit,
+ .id = &iscsi_net_id,
+ .size = sizeof(struct iscsi_net),
+};
+
+static __init int iscsi_transport_init(void)
+{
+ int err;
printk(KERN_INFO "Loading iSCSI transport class v%s.\n",
ISCSI_TRANSPORT_VERSION);
@@ -4545,8 +4592,8 @@ static __init int iscsi_transport_init(void)
if (err)
goto unregister_session_class;
- nls = netlink_kernel_create(&init_net, NETLINK_ISCSI, &cfg);
- if (!nls) {
+ err = register_pernet_subsys(&iscsi_net_ops);
+ if (err) {
err = -ENOBUFS;
goto unregister_flashnode_bus;
}
@@ -4554,13 +4601,13 @@ static __init int iscsi_transport_init(void)
iscsi_eh_timer_workq = create_singlethread_workqueue("iscsi_eh");
if (!iscsi_eh_timer_workq) {
err = -ENOMEM;
- goto release_nls;
+ goto unregister_pernet_subsys;
}
return 0;
-release_nls:
- netlink_kernel_release(nls);
+unregister_pernet_subsys:
+ unregister_pernet_subsys(&iscsi_net_ops);
unregister_flashnode_bus:
bus_unregister(&iscsi_flashnode_bus);
unregister_session_class:
@@ -4581,7 +4628,7 @@ unregister_transport_class:
static void __exit iscsi_transport_exit(void)
{
destroy_workqueue(iscsi_eh_timer_workq);
- netlink_kernel_release(nls);
+ unregister_pernet_subsys(&iscsi_net_ops);
bus_unregister(&iscsi_flashnode_bus);
transport_class_unregister(&iscsi_connection_class);
transport_class_unregister(&iscsi_session_class);
--
2.1.0
--
You received this message because you are subscribed to the Google Groups "open-iscsi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to open-iscsi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To post to this group, send email to open-iscsi-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
Visit this group at http://groups.google.com/group/open-iscsi.
For more options, visit https://groups.google.com/d/optout.
next prev parent reply other threads:[~2015-05-13 22:12 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-13 22:12 [RFC PATCH 0/4] Make iSCSI network namespace aware Chris Leech
2015-05-13 22:12 ` Chris Leech
2015-05-13 22:12 ` [RFC PATCH 3/4] iscsi: make all netlink multicast " Chris Leech
2015-05-13 22:12 ` Chris Leech
[not found] ` <1431555167-23995-1-git-send-email-cleech-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-05-13 22:12 ` Chris Leech [this message]
2015-05-13 22:12 ` [RFC PATCH 1/4] iscsi: create per-net iscsi nl kernel sockets Chris Leech
2015-05-13 22:12 ` [RFC PATCH 2/4] iscsi: sysfs filtering by network namespace Chris Leech
2015-05-13 22:12 ` Chris Leech
[not found] ` <1431555167-23995-3-git-send-email-cleech-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-05-21 20:49 ` iscsi flashnode bus? " Chris Leech
[not found] ` <20150521204906.GF17115-r8IHplWLGbA5tHQWs+pTeqPFFGjUI2lm2LY78lusg7I@public.gmane.org>
2015-05-22 15:49 ` Mike Christie
2015-05-13 22:12 ` [RFC PATCH 4/4] iscsi: set netns for iscsi_tcp hosts Chris Leech
2015-05-13 22:12 ` Chris Leech
2015-05-20 18:45 ` [RFC PATCH 0/4] Make iSCSI network namespace aware Andy Grover
[not found] ` <555CD657.6080004-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-05-21 9:04 ` Hannes Reinecke
2015-05-21 20:26 ` Chris Leech
2015-06-01 3:43 ` vaibhavkhanduja-Re5JQEeQqe8AvxtiuMwx3w
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1431555167-23995-2-git-send-email-cleech@redhat.com \
--to=cleech-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=linux-scsi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=open-iscsi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.