@@ -3164,12 +3164,13 @@ int lnet_get_ni_stats(struct lnet_ioctl_element_msg_stats *msg_stats)
static int lnet_add_net_common(struct lnet_net *net,
struct lnet_ioctl_config_lnd_tunables *tun)
{
- u32 net_id;
- struct lnet_ping_buffer *pbuf;
struct lnet_handle_md ping_mdh;
- int rc;
+ struct lnet_ping_buffer *pbuf;
struct lnet_remotenet *rnet;
+ struct lnet_ni *ni;
int net_ni_count;
+ u32 net_id;
+ int rc;
lnet_net_lock(LNET_LOCK_EX);
rnet = lnet_find_rnet_locked(net->net_id);
@@ -3219,10 +3220,25 @@ static int lnet_add_net_common(struct lnet_net *net,
lnet_net_lock(LNET_LOCK_EX);
net = lnet_get_net_locked(net_id);
- lnet_net_unlock(LNET_LOCK_EX);
-
LASSERT(net);
+ /* apply the UDSPs */
+ rc = lnet_udsp_apply_policies_on_net(net);
+ if (rc)
+ CERROR("Failed to apply UDSPs on local net %s\n",
+ libcfs_net2str(net->net_id));
+
+ /* At this point we lost track of which NI was just added, so we
+ * just re-apply the policies on all of the NIs on this net
+ */
+ list_for_each_entry(ni, &net->net_ni_list, ni_netlist) {
+ rc = lnet_udsp_apply_policies_on_ni(ni);
+ if (rc)
+ CERROR("Failed to apply UDSPs on ni %s\n",
+ libcfs_nid2str(ni->ni_nid));
+ }
+ lnet_net_unlock(LNET_LOCK_EX);
+
/*
* Start the acceptor thread if this is the first network
* being added that requires the thread.
@@ -35,6 +35,7 @@
#define DEBUG_SUBSYSTEM S_LNET
+#include <linux/lnet/udsp.h>
#include <linux/lnet/lib-lnet.h>
#include <uapi/linux/lnet/lnet-dlc.h>
@@ -1357,6 +1358,8 @@ struct lnet_peer_net *
unsigned int flags)
{
struct lnet_peer_table *ptable;
+ bool new_lpn = false;
+ int rc;
/* Install the new peer_ni */
lnet_net_lock(LNET_LOCK_EX);
@@ -1387,6 +1390,7 @@ struct lnet_peer_net *
/* Add peer_net to peer */
if (!lpn->lpn_peer) {
+ new_lpn = true;
lpn->lpn_peer = lp;
list_add_tail(&lpn->lpn_peer_nets, &lp->lp_peer_nets);
lnet_peer_addref_locked(lp);
@@ -1416,6 +1420,18 @@ struct lnet_peer_net *
lp->lp_nnis++;
+ /* apply UDSPs */
+ if (new_lpn) {
+ rc = lnet_udsp_apply_policies_on_lpn(lpn);
+ if (rc)
+ CERROR("Failed to apply UDSPs on lpn %s\n",
+ libcfs_net2str(lpn->lpn_net_id));
+ }
+ rc = lnet_udsp_apply_policies_on_lpni(lpni);
+ if (rc)
+ CERROR("Failed to apply UDSPs on lpni %s\n",
+ libcfs_nid2str(lpni->lpni_nid));
+
CDEBUG(D_NET, "peer %s NID %s flags %#x\n",
libcfs_nid2str(lp->lp_primary_nid),
libcfs_nid2str(lpni->lpni_nid), flags);