|
@@ -31,6 +31,8 @@
|
|
|
*/
|
|
|
|
|
|
#define DEBUG_SUBSYSTEM S_LNET
|
|
|
+#include <linux/nsproxy.h>
|
|
|
+#include <net/net_namespace.h>
|
|
|
#include "../../include/linux/lnet/lib-lnet.h"
|
|
|
|
|
|
struct lnet_text_buf { /* tmp struct for parsing routes */
|
|
@@ -110,6 +112,11 @@ lnet_ni_free(struct lnet_ni *ni)
|
|
|
LIBCFS_FREE(ni->ni_interfaces[i],
|
|
|
strlen(ni->ni_interfaces[i]) + 1);
|
|
|
}
|
|
|
+
|
|
|
+ /* release reference to net namespace */
|
|
|
+ if (ni->ni_net_ns)
|
|
|
+ put_net(ni->ni_net_ns);
|
|
|
+
|
|
|
LIBCFS_FREE(ni, sizeof(*ni));
|
|
|
}
|
|
|
|
|
@@ -171,6 +178,13 @@ lnet_ni_alloc(__u32 net, struct cfs_expr_list *el, struct list_head *nilist)
|
|
|
|
|
|
/* LND will fill in the address part of the NID */
|
|
|
ni->ni_nid = LNET_MKNID(net, 0);
|
|
|
+
|
|
|
+ /* Store net namespace in which current ni is being created */
|
|
|
+ if (current->nsproxy->net_ns)
|
|
|
+ ni->ni_net_ns = get_net(current->nsproxy->net_ns);
|
|
|
+ else
|
|
|
+ ni->ni_net_ns = NULL;
|
|
|
+
|
|
|
ni->ni_last_alive = ktime_get_real_seconds();
|
|
|
list_add_tail(&ni->ni_list, nilist);
|
|
|
return ni;
|