Whamcloud - gitweb
LU-5540 lnet: fix crash due to NULL networks string
[fs/lustre-release.git] / lnet / lnet / api-ni.c
index 58a4aa1..cf87d5e 100644 (file)
@@ -36,6 +36,7 @@
 
 #define DEBUG_SUBSYSTEM S_LNET
 #include <lnet/lib-lnet.h>
+#include <lnet/lib-dlc.h>
 #ifdef __KERNEL__
 #include <linux/log2.h>
 #endif
@@ -1761,7 +1762,6 @@ LNetNIInit(lnet_pid_t requested_pid)
        lnet_ping_info_t        *pinfo;
        lnet_handle_md_t        md_handle;
        struct list_head        net_head;
-       char                    *nets;
 
        INIT_LIST_HEAD(&net_head);
 
@@ -1776,13 +1776,11 @@ LNetNIInit(lnet_pid_t requested_pid)
                return rc;
        }
 
-       nets = lnet_get_networks();
-
        rc = lnet_prepare(requested_pid);
        if (rc != 0)
                goto failed0;
 
-       rc = lnet_parse_networks(&net_head, nets);
+       rc = lnet_parse_networks(&net_head, lnet_get_networks());
        if (rc < 0)
                goto failed1;
 
@@ -1979,6 +1977,7 @@ int
 LNetCtl(unsigned int cmd, void *arg)
 {
        struct libcfs_ioctl_data *data = arg;
+       struct lnet_ioctl_config_data *config;
        lnet_process_id_t         id = {0};
        lnet_ni_t                *ni;
        int                       rc;
@@ -2002,16 +2001,53 @@ LNetCtl(unsigned int cmd, void *arg)
                return (rc != 0) ? rc : lnet_check_routes();
 
        case IOC_LIBCFS_DEL_ROUTE:
+               config = arg;
                LNET_MUTEX_LOCK(&the_lnet.ln_api_mutex);
-               rc = lnet_del_route(data->ioc_net, data->ioc_nid);
+               rc = lnet_del_route(config->cfg_net, config->cfg_nid);
                LNET_MUTEX_UNLOCK(&the_lnet.ln_api_mutex);
                return rc;
 
        case IOC_LIBCFS_GET_ROUTE:
-               return lnet_get_route(data->ioc_count,
-                                     &data->ioc_net, &data->ioc_count,
-                                     &data->ioc_nid, &data->ioc_flags,
-                                     &data->ioc_priority);
+               config = arg;
+               return lnet_get_route(config->cfg_count,
+                                     &config->cfg_net,
+                                     &config->cfg_config_u.cfg_route.rtr_hop,
+                                     &config->cfg_nid,
+                                     &config->cfg_config_u.cfg_route.rtr_flags,
+                                     &config->cfg_config_u.cfg_route.
+                                       rtr_priority);
+
+       case IOC_LIBCFS_ADD_NET:
+               return 0;
+
+       case IOC_LIBCFS_DEL_NET:
+               return 0;
+
+       case IOC_LIBCFS_GET_NET:
+               return 0;
+
+       case IOC_LIBCFS_GET_LNET_STATS:
+       {
+               struct lnet_ioctl_lnet_stats *lnet_stats = arg;
+
+               lnet_counters_get(&lnet_stats->st_cntrs);
+               return 0;
+       }
+
+#if defined(__KERNEL__) && defined(LNET_ROUTER)
+       case IOC_LIBCFS_CONFIG_RTR:
+               return 0;
+
+       case IOC_LIBCFS_ADD_BUF:
+               return 0;
+#endif
+
+       case IOC_LIBCFS_GET_BUF:
+               return 0;
+
+       case IOC_LIBCFS_GET_PEER_INFO:
+               return 0;
+
        case IOC_LIBCFS_NOTIFY_ROUTER:
                return lnet_notify(NULL, data->ioc_nid, data->ioc_flags,
                                   cfs_time_current() -