Whamcloud - gitweb
LU-3334 quota: use different names for reint threads
[fs/lustre-release.git] / lnet / selftest / conctl.c
index 901b6e2..68297bd 100644 (file)
@@ -26,6 +26,8 @@
 /*
  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
+ *
+ * Copyright (c) 2012, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -61,24 +63,23 @@ lst_session_new_ioctl(lstio_session_new_args_t *args)
         if (name == NULL)
                 return -ENOMEM;
 
-        if (cfs_copy_from_user(name,
-                               args->lstio_ses_namep,
-                               args->lstio_ses_nmlen)) {
+       if (copy_from_user(name, args->lstio_ses_namep,
+                          args->lstio_ses_nmlen)) {
                 LIBCFS_FREE(name, args->lstio_ses_nmlen + 1);
                 return -EFAULT;
         }
 
         name[args->lstio_ses_nmlen] = 0;
 
-        rc = lstcon_session_new(name,
-                             args->lstio_ses_key,
-                             args->lstio_ses_timeout,
-                             args->lstio_ses_force,
-                             args->lstio_ses_idp);
-
-        LIBCFS_FREE(name, args->lstio_ses_nmlen + 1);
+       rc = lstcon_session_new(name,
+                               args->lstio_ses_key,
+                               args->lstio_ses_feats,
+                               args->lstio_ses_force,
+                               args->lstio_ses_timeout,
+                               args->lstio_ses_idp);
 
-        return rc;
+       LIBCFS_FREE(name, args->lstio_ses_nmlen + 1);
+       return rc;
 }
 
 int
@@ -97,6 +98,7 @@ lst_session_info_ioctl(lstio_session_info_args_t *args)
 
         if (args->lstio_ses_idp   == NULL || /* address for ouput sid */
             args->lstio_ses_keyp  == NULL || /* address for ouput key */
+           args->lstio_ses_featp  == NULL || /* address for ouput features */
             args->lstio_ses_ndinfo == NULL || /* address for output ndinfo */
             args->lstio_ses_namep == NULL || /* address for ouput name */
             args->lstio_ses_nmlen <= 0 ||
@@ -105,6 +107,7 @@ lst_session_info_ioctl(lstio_session_info_args_t *args)
 
         return lstcon_session_info(args->lstio_ses_idp,
                                    args->lstio_ses_keyp,
+                                  args->lstio_ses_featp,
                                    args->lstio_ses_ndinfo,
                                    args->lstio_ses_namep,
                                    args->lstio_ses_nmlen);
@@ -133,7 +136,7 @@ lst_debug_ioctl(lstio_debug_args_t *args)
                 if (name == NULL)
                         return -ENOMEM;
 
-                if (cfs_copy_from_user(name, args->lstio_dbg_namep,
+               if (copy_from_user(name, args->lstio_dbg_namep,
                                        args->lstio_dbg_nmlen)) {
                         LIBCFS_FREE(name, args->lstio_dbg_nmlen + 1);
 
@@ -209,9 +212,8 @@ lst_group_add_ioctl(lstio_group_add_args_t *args)
         if (name == NULL)
                 return -ENOMEM;
 
-        if (cfs_copy_from_user(name,
-                               args->lstio_grp_namep,
-                               args->lstio_grp_nmlen)) {
+       if (copy_from_user(name, args->lstio_grp_namep,
+                          args->lstio_grp_nmlen)) {
                 LIBCFS_FREE(name, args->lstio_grp_nmlen);
                 return -EFAULT;
         }
@@ -243,9 +245,8 @@ lst_group_del_ioctl(lstio_group_del_args_t *args)
         if (name == NULL)
                 return -ENOMEM;
 
-        if (cfs_copy_from_user(name,
-                               args->lstio_grp_namep,
-                               args->lstio_grp_nmlen)) {
+       if (copy_from_user(name, args->lstio_grp_namep,
+                          args->lstio_grp_nmlen)) {
                 LIBCFS_FREE(name, args->lstio_grp_nmlen + 1);
                 return -EFAULT;
         }
@@ -278,9 +279,8 @@ lst_group_update_ioctl(lstio_group_update_args_t *args)
         if (name == NULL)
                 return -ENOMEM;
 
-        if (cfs_copy_from_user(name,
-                           args->lstio_grp_namep,
-                           args->lstio_grp_nmlen)) {
+       if (copy_from_user(name, args->lstio_grp_namep,
+                          args->lstio_grp_nmlen)) {
                 LIBCFS_FREE(name, args->lstio_grp_nmlen + 1);
                 return -EFAULT;
         }
@@ -320,6 +320,7 @@ lst_group_update_ioctl(lstio_group_update_args_t *args)
 int
 lst_nodes_add_ioctl(lstio_group_nodes_args_t *args)
 {
+       unsigned feats;
         int     rc;
         char   *name;
 
@@ -329,8 +330,9 @@ lst_nodes_add_ioctl(lstio_group_nodes_args_t *args)
         if (args->lstio_grp_idsp == NULL || /* array of ids */
             args->lstio_grp_count <= 0 ||
             args->lstio_grp_resultp == NULL ||
-            args->lstio_grp_namep == NULL ||
-            args->lstio_grp_nmlen <= 0 || 
+           args->lstio_grp_featp == NULL ||
+           args->lstio_grp_namep == NULL ||
+           args->lstio_grp_nmlen <= 0 ||
             args->lstio_grp_nmlen > LST_NAME_SIZE)
                 return -EINVAL;
 
@@ -338,7 +340,7 @@ lst_nodes_add_ioctl(lstio_group_nodes_args_t *args)
         if (name == NULL)
                 return -ENOMEM;
 
-        if (cfs_copy_from_user(name, args->lstio_grp_namep,
+       if (copy_from_user(name, args->lstio_grp_namep,
                                args->lstio_grp_nmlen)) {
                 LIBCFS_FREE(name, args->lstio_grp_nmlen + 1);
 
@@ -348,10 +350,14 @@ lst_nodes_add_ioctl(lstio_group_nodes_args_t *args)
         name[args->lstio_grp_nmlen] = 0;
 
         rc = lstcon_nodes_add(name, args->lstio_grp_count,
-                              args->lstio_grp_idsp,
-                              args->lstio_grp_resultp);
+                             args->lstio_grp_idsp, &feats,
+                             args->lstio_grp_resultp);
 
-        LIBCFS_FREE(name, args->lstio_grp_nmlen + 1);
+       LIBCFS_FREE(name, args->lstio_grp_nmlen + 1);
+       if (rc == 0 &&
+           copy_to_user(args->lstio_grp_featp, &feats, sizeof(feats))) {
+               return -EINVAL;
+       }
 
         return rc;
 }
@@ -398,23 +404,22 @@ lst_group_info_ioctl(lstio_group_info_args_t *args)
                     args->lstio_grp_ndentp == NULL) /* # of node entry */
                         return -EINVAL;
 
-                if (cfs_copy_from_user(&ndent, args->lstio_grp_ndentp,
-                                       sizeof(ndent)) ||
-                    cfs_copy_from_user(&index, args->lstio_grp_idxp,
-                                       sizeof(index)))
-                        return -EFAULT;
+               if (copy_from_user(&ndent, args->lstio_grp_ndentp,
+                                  sizeof(ndent)) ||
+                   copy_from_user(&index, args->lstio_grp_idxp,
+                                  sizeof(index)))
+                       return -EFAULT;
 
-                if (ndent <= 0 || index < 0)
-                        return -EINVAL;
-        }
+               if (ndent <= 0 || index < 0)
+                       return -EINVAL;
+       }
 
-        LIBCFS_ALLOC(name, args->lstio_grp_nmlen + 1);
-        if (name == NULL)
-                return -ENOMEM;
+       LIBCFS_ALLOC(name, args->lstio_grp_nmlen + 1);
+       if (name == NULL)
+               return -ENOMEM;
 
-        if (cfs_copy_from_user(name,
-                               args->lstio_grp_namep,
-                               args->lstio_grp_nmlen)) {
+       if (copy_from_user(name, args->lstio_grp_namep,
+                          args->lstio_grp_nmlen)) {
                 LIBCFS_FREE(name, args->lstio_grp_nmlen + 1);
                 return -EFAULT;
         }
@@ -429,12 +434,12 @@ lst_group_info_ioctl(lstio_group_info_args_t *args)
         if (rc != 0) 
                 return rc;
 
-        if (args->lstio_grp_dentsp != NULL && 
-            (cfs_copy_to_user(args->lstio_grp_idxp, &index, sizeof(index)) ||
-             cfs_copy_to_user(args->lstio_grp_ndentp, &ndent, sizeof(ndent))))
-                rc = -EFAULT;
+       if (args->lstio_grp_dentsp != NULL &&
+           (copy_to_user(args->lstio_grp_idxp, &index, sizeof(index)) ||
+            copy_to_user(args->lstio_grp_ndentp, &ndent, sizeof(ndent))))
+               rc = -EFAULT;
 
-        return 0;
+       return 0;
 }
 
 int
@@ -455,12 +460,11 @@ lst_batch_add_ioctl(lstio_batch_add_args_t *args)
         if (name == NULL)
                 return -ENOMEM;
 
-        if (cfs_copy_from_user(name,
-                               args->lstio_bat_namep,
-                               args->lstio_bat_nmlen)) {
-                LIBCFS_FREE(name, args->lstio_bat_nmlen + 1);
-                return -EFAULT;
-        }
+       if (copy_from_user(name, args->lstio_bat_namep,
+                          args->lstio_bat_nmlen)) {
+               LIBCFS_FREE(name, args->lstio_bat_nmlen + 1);
+               return -EFAULT;
+       }
 
         name[args->lstio_bat_nmlen] = 0;
 
@@ -489,12 +493,11 @@ lst_batch_run_ioctl(lstio_batch_run_args_t *args)
         if (name == NULL)
                 return -ENOMEM;
 
-        if (cfs_copy_from_user(name,
-                               args->lstio_bat_namep,
-                               args->lstio_bat_nmlen)) {
-                LIBCFS_FREE(name, args->lstio_bat_nmlen + 1);
-                return -EFAULT;
-        }
+       if (copy_from_user(name, args->lstio_bat_namep,
+                          args->lstio_bat_nmlen)) {
+               LIBCFS_FREE(name, args->lstio_bat_nmlen + 1);
+               return -EFAULT;
+       }
 
         name[args->lstio_bat_nmlen] = 0;
 
@@ -525,12 +528,11 @@ lst_batch_stop_ioctl(lstio_batch_stop_args_t *args)
         if (name == NULL)
                 return -ENOMEM;
 
-        if (cfs_copy_from_user(name,
-                               args->lstio_bat_namep,
-                               args->lstio_bat_nmlen)) {
-                LIBCFS_FREE(name, args->lstio_bat_nmlen + 1);
-                return -EFAULT;
-        }
+       if (copy_from_user(name, args->lstio_bat_namep,
+                          args->lstio_bat_nmlen)) {
+               LIBCFS_FREE(name, args->lstio_bat_nmlen + 1);
+               return -EFAULT;
+       }
 
         name[args->lstio_bat_nmlen] = 0;
 
@@ -564,12 +566,11 @@ lst_batch_query_ioctl(lstio_batch_query_args_t *args)
         if (name == NULL)
                 return -ENOMEM;
 
-        if (cfs_copy_from_user(name,
-                               args->lstio_bat_namep,
-                               args->lstio_bat_nmlen)) {
-                LIBCFS_FREE(name, args->lstio_bat_nmlen + 1);
-                return -EFAULT;
-        }
+       if (copy_from_user(name, args->lstio_bat_namep,
+                          args->lstio_bat_nmlen)) {
+               LIBCFS_FREE(name, args->lstio_bat_nmlen + 1);
+               return -EFAULT;
+       }
 
         name[args->lstio_bat_nmlen] = 0;
 
@@ -626,9 +627,9 @@ lst_batch_info_ioctl(lstio_batch_info_args_t *args)
                     args->lstio_bat_ndentp == NULL) /* # of node entry */
                         return -EINVAL;
 
-                if (cfs_copy_from_user(&index, args->lstio_bat_idxp,
+               if (copy_from_user(&index, args->lstio_bat_idxp,
                                        sizeof(index)) ||
-                    cfs_copy_from_user(&ndent, args->lstio_bat_ndentp,
+                   copy_from_user(&ndent, args->lstio_bat_ndentp,
                                        sizeof(ndent)))
                         return -EFAULT;
 
@@ -640,8 +641,8 @@ lst_batch_info_ioctl(lstio_batch_info_args_t *args)
         if (name == NULL)
                 return -ENOMEM;
 
-        if (cfs_copy_from_user(name,
-                               args->lstio_bat_namep, args->lstio_bat_nmlen)) {
+       if (copy_from_user(name, args->lstio_bat_namep,
+                          args->lstio_bat_nmlen)) {
                 LIBCFS_FREE(name, args->lstio_bat_nmlen + 1);
                 return -EFAULT;
         }
@@ -658,12 +659,12 @@ lst_batch_info_ioctl(lstio_batch_info_args_t *args)
         if (rc != 0)
                 return rc;
 
-        if (args->lstio_bat_dentsp != NULL && 
-            (cfs_copy_to_user(args->lstio_bat_idxp, &index, sizeof(index)) ||
-             cfs_copy_to_user(args->lstio_bat_ndentp, &ndent, sizeof(ndent))))
-                rc = -EFAULT;
+       if (args->lstio_bat_dentsp != NULL &&
+           (copy_to_user(args->lstio_bat_idxp, &index, sizeof(index)) ||
+            copy_to_user(args->lstio_bat_ndentp, &ndent, sizeof(ndent))))
+               rc = -EFAULT;
 
-        return rc;
+       return rc;
 }
 
 int
@@ -691,7 +692,7 @@ lst_stat_query_ioctl(lstio_stat_args_t *args)
         if (name == NULL)
                 return -ENOMEM;
 
-        if (cfs_copy_from_user(name, args->lstio_sta_namep,
+       if (copy_from_user(name, args->lstio_sta_namep,
                                args->lstio_sta_nmlen)) {
                 LIBCFS_FREE(name, args->lstio_sta_nmlen + 1);
                 return -EFAULT;
@@ -734,10 +735,17 @@ int lst_test_add_ioctl(lstio_test_args_t *args)
             args->lstio_tes_dgrp_nmlen > LST_NAME_SIZE)
                 return -EINVAL;
 
+       if (args->lstio_tes_loop == 0 || /* negative is infinite */
+           args->lstio_tes_concur <= 0 ||
+           args->lstio_tes_dist <= 0 ||
+           args->lstio_tes_span <= 0)
+               return -EINVAL;
+
         /* have parameter, check if parameter length is valid */
         if (args->lstio_tes_param != NULL &&
             (args->lstio_tes_param_len <= 0 ||
-             args->lstio_tes_param_len > CFS_PAGE_SIZE - sizeof(lstcon_test_t)))
+            args->lstio_tes_param_len >
+            PAGE_CACHE_SIZE - sizeof(lstcon_test_t)))
                 return -EINVAL;
 
         LIBCFS_ALLOC(name, args->lstio_tes_bat_nmlen + 1);
@@ -758,19 +766,16 @@ int lst_test_add_ioctl(lstio_test_args_t *args)
                         goto out;
         }
 
-        rc = -EFAULT;
-        if (cfs_copy_from_user(name,
-                              args->lstio_tes_bat_name,
-                              args->lstio_tes_bat_nmlen) ||
-            cfs_copy_from_user(srcgrp,
-                              args->lstio_tes_sgrp_name,
-                              args->lstio_tes_sgrp_nmlen) ||
-            cfs_copy_from_user(dstgrp,
-                              args->lstio_tes_dgrp_name,
-                              args->lstio_tes_dgrp_nmlen) ||
-            cfs_copy_from_user(param, args->lstio_tes_param,
-                              args->lstio_tes_param_len))
-                goto out;
+       rc = -EFAULT;
+       if (copy_from_user(name, args->lstio_tes_bat_name,
+                          args->lstio_tes_bat_nmlen) ||
+           copy_from_user(srcgrp, args->lstio_tes_sgrp_name,
+                          args->lstio_tes_sgrp_nmlen) ||
+           copy_from_user(dstgrp, args->lstio_tes_dgrp_name,
+                          args->lstio_tes_dgrp_nmlen) ||
+           copy_from_user(param, args->lstio_tes_param,
+                             args->lstio_tes_param_len))
+               goto out;
 
         rc = lstcon_test_add(name,
                             args->lstio_tes_type,
@@ -781,7 +786,7 @@ int lst_test_add_ioctl(lstio_test_args_t *args)
                             &ret, args->lstio_tes_resultp);
 
         if (ret != 0)
-                rc = (cfs_copy_to_user(args->lstio_tes_retp, &ret,
+               rc = (copy_to_user(args->lstio_tes_retp, &ret,
                                        sizeof(ret))) ? -EFAULT : 0;
 out:
         if (name != NULL)
@@ -802,27 +807,27 @@ out:
 int
 lstcon_ioctl_entry(unsigned int cmd, struct libcfs_ioctl_data *data)
 {
-        char   *buf;
-        int     opc = data->ioc_u32[0];
-        int     rc;
+       char   *buf;
+       int     opc = data->ioc_u32[0];
+       int     rc;
 
-        if (cmd != IOC_LIBCFS_LNETST)
-                return -EINVAL;
+       if (cmd != IOC_LIBCFS_LNETST)
+               return -EINVAL;
 
-        if (data->ioc_plen1 > CFS_PAGE_SIZE)
-                return -EINVAL;
+       if (data->ioc_plen1 > PAGE_CACHE_SIZE)
+               return -EINVAL;
 
-        LIBCFS_ALLOC(buf, data->ioc_plen1);
-        if (buf == NULL)
-                return -ENOMEM;
+       LIBCFS_ALLOC(buf, data->ioc_plen1);
+       if (buf == NULL)
+               return -ENOMEM;
 
-        /* copy in parameter */
-        if (cfs_copy_from_user(buf, data->ioc_pbuf1, data->ioc_plen1)) {
-                LIBCFS_FREE(buf, data->ioc_plen1);
-                return -EFAULT;
-        }
+       /* copy in parameter */
+       if (copy_from_user(buf, data->ioc_pbuf1, data->ioc_plen1)) {
+               LIBCFS_FREE(buf, data->ioc_plen1);
+               return -EFAULT;
+       }
 
-        cfs_mutex_lock(&console_session.ses_mutex);
+       mutex_lock(&console_session.ses_mutex);
 
         console_session.ses_laststamp = cfs_time_current_sec();
 
@@ -902,15 +907,15 @@ lstcon_ioctl_entry(unsigned int cmd, struct libcfs_ioctl_data *data)
                         rc = -EINVAL;
         }
 
-        if (cfs_copy_to_user(data->ioc_pbuf2, &console_session.ses_trans_stat,
-                             sizeof(lstcon_trans_stat_t)))
-                rc = -EFAULT;
+       if (copy_to_user(data->ioc_pbuf2, &console_session.ses_trans_stat,
+                        sizeof(lstcon_trans_stat_t)))
+               rc = -EFAULT;
 out:
-        cfs_mutex_unlock(&console_session.ses_mutex);
+       mutex_unlock(&console_session.ses_mutex);
 
-        LIBCFS_FREE(buf, data->ioc_plen1);
+       LIBCFS_FREE(buf, data->ioc_plen1);
 
-        return rc;
+       return rc;
 }
 
 EXPORT_SYMBOL(lstcon_ioctl_entry);