static int lnet_add_net_common(struct lnet_net *net,
struct lnet_ioctl_config_lnd_tunables *tun)
{
- __u32 net_id;
+ struct lnet_handle_md ping_mdh;
struct lnet_ping_buffer *pbuf;
- struct lnet_handle_md ping_mdh;
- int rc;
struct lnet_remotenet *rnet;
- int net_ni_count;
+ 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);
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.
#endif
#include <linux/uaccess.h>
+#include <lnet/udsp.h>
#include <lnet/lib-lnet.h>
#include <uapi/linux/lnet/lnet-dlc.h>
unsigned flags)
{
struct lnet_peer_table *ptable;
+ bool new_lpn = false;
+ int rc;
/* Install the new peer_ni */
lnet_net_lock(LNET_LOCK_EX);
/* 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);
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);