Whamcloud - gitweb
LU-12616 obclass: fix MDS start/stop race
[fs/lustre-release.git] / lnet / selftest / conctl.c
index 0cc5151..4767ab8 100644 (file)
  *
  * You should have received a copy of the GNU General Public License
  * version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
+ * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * GPL HEADER END
  */
  *
  * Author: Liang Zhen <liangzhen@clusterfs.com>
  */
-#ifdef __KERNEL__
 
 #include <libcfs/libcfs.h>
 #include <lnet/lib-lnet.h>
-#include <lnet/lnetst.h>
+#include <uapi/linux/lnet/lnetst.h>
 #include "console.h"
 
-int
-lst_session_new_ioctl(lstio_session_new_args_t *args)
+static int
+lst_session_new_ioctl(struct lstio_session_new_args *args)
 {
         char      *name;
         int        rc;
@@ -74,16 +69,16 @@ lst_session_new_ioctl(lstio_session_new_args_t *args)
        rc = lstcon_session_new(name,
                                args->lstio_ses_key,
                                args->lstio_ses_feats,
-                               args->lstio_ses_force,
                                args->lstio_ses_timeout,
+                               args->lstio_ses_force,
                                args->lstio_ses_idp);
 
        LIBCFS_FREE(name, args->lstio_ses_nmlen + 1);
        return rc;
 }
 
-int
-lst_session_end_ioctl(lstio_session_end_args_t *args)
+static int
+lst_session_end_ioctl(struct lstio_session_end_args *args)
 {
         if (args->lstio_ses_key != console_session.ses_key)
                 return -EACCES;
@@ -91,8 +86,8 @@ lst_session_end_ioctl(lstio_session_end_args_t *args)
         return lstcon_session_end();
 }
 
-int
-lst_session_info_ioctl(lstio_session_info_args_t *args)
+static int
+lst_session_info_ioctl(struct lstio_session_info_args *args)
 {
         /* no checking of key */
 
@@ -113,8 +108,8 @@ lst_session_info_ioctl(lstio_session_info_args_t *args)
                                    args->lstio_ses_nmlen);
 }
 
-int
-lst_debug_ioctl(lstio_debug_args_t *args)
+static int
+lst_debug_ioctl(struct lstio_debug_args *args)
 {
         char   *name   = NULL;
         int     client = 1;
@@ -194,8 +189,8 @@ out:
         return rc;
 }
 
-int
-lst_group_add_ioctl(lstio_group_add_args_t *args)
+static int
+lst_group_add_ioctl(struct lstio_group_add_args *args)
 {
         char           *name;
         int             rc;
@@ -204,7 +199,7 @@ lst_group_add_ioctl(lstio_group_add_args_t *args)
                 return -EACCES;
 
         if (args->lstio_grp_namep == NULL||
-            args->lstio_grp_nmlen <= 0 || 
+           args->lstio_grp_nmlen <= 0 ||
             args->lstio_grp_nmlen > LST_NAME_SIZE)
                 return -EINVAL;
 
@@ -227,8 +222,8 @@ lst_group_add_ioctl(lstio_group_add_args_t *args)
         return rc;
 }
 
-int
-lst_group_del_ioctl(lstio_group_del_args_t *args)
+static int
+lst_group_del_ioctl(struct lstio_group_del_args *args)
 {
         int     rc;
         char   *name;
@@ -260,8 +255,8 @@ lst_group_del_ioctl(lstio_group_del_args_t *args)
         return rc;
 }
 
-int
-lst_group_update_ioctl(lstio_group_update_args_t *args)
+static int
+lst_group_update_ioctl(struct lstio_group_update_args *args)
 {
         int     rc;
         char   *name;
@@ -271,7 +266,7 @@ lst_group_update_ioctl(lstio_group_update_args_t *args)
 
         if (args->lstio_grp_resultp == NULL ||
             args->lstio_grp_namep == NULL ||
-            args->lstio_grp_nmlen <= 0 || 
+           args->lstio_grp_nmlen <= 0 ||
             args->lstio_grp_nmlen > LST_NAME_SIZE)
                 return -EINVAL;
 
@@ -317,8 +312,8 @@ lst_group_update_ioctl(lstio_group_update_args_t *args)
         return rc;
 }
 
-int
-lst_nodes_add_ioctl(lstio_group_nodes_args_t *args)
+static int
+lst_nodes_add_ioctl(struct lstio_group_nodes_args *args)
 {
        unsigned feats;
         int     rc;
@@ -362,10 +357,10 @@ lst_nodes_add_ioctl(lstio_group_nodes_args_t *args)
         return rc;
 }
 
-int
-lst_group_list_ioctl(lstio_group_list_args_t *args)
+static int
+lst_group_list_ioctl(struct lstio_group_list_args *args)
 {
-        if (args->lstio_grp_key != console_session.ses_key) 
+       if (args->lstio_grp_key != console_session.ses_key)
                 return -EACCES;
 
         if (args->lstio_grp_idx   < 0 ||
@@ -379,8 +374,8 @@ lst_group_list_ioctl(lstio_group_list_args_t *args)
                               args->lstio_grp_namep);
 }
 
-int
-lst_group_info_ioctl(lstio_group_info_args_t *args)
+static int
+lst_group_info_ioctl(struct lstio_group_info_args *args)
 {
         char           *name;
         int             ndent;
@@ -431,19 +426,19 @@ lst_group_info_ioctl(lstio_group_info_args_t *args)
 
         LIBCFS_FREE(name, args->lstio_grp_nmlen + 1);
 
-        if (rc != 0) 
+       if (rc != 0)
                 return rc;
 
        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 -EFAULT;
 
        return 0;
 }
 
-int
-lst_batch_add_ioctl(lstio_batch_add_args_t *args)
+static int
+lst_batch_add_ioctl(struct lstio_batch_add_args *args)
 {
         int             rc;
         char           *name;
@@ -475,8 +470,8 @@ lst_batch_add_ioctl(lstio_batch_add_args_t *args)
         return rc;
 }
 
-int
-lst_batch_run_ioctl(lstio_batch_run_args_t *args)
+static int
+lst_batch_run_ioctl(struct lstio_batch_run_args *args)
 {
         int             rc;
         char           *name;
@@ -509,8 +504,8 @@ lst_batch_run_ioctl(lstio_batch_run_args_t *args)
         return rc;
 }
 
-int
-lst_batch_stop_ioctl(lstio_batch_stop_args_t *args)
+static int
+lst_batch_stop_ioctl(struct lstio_batch_stop_args *args)
 {
         int             rc;
         char           *name;
@@ -544,8 +539,8 @@ lst_batch_stop_ioctl(lstio_batch_stop_args_t *args)
         return rc;
 }
 
-int
-lst_batch_query_ioctl(lstio_batch_query_args_t *args)
+static int
+lst_batch_query_ioctl(struct lstio_batch_query_args *args)
 {
         char   *name;
         int     rc;
@@ -585,8 +580,8 @@ lst_batch_query_ioctl(lstio_batch_query_args_t *args)
         return rc;
 }
 
-int
-lst_batch_list_ioctl(lstio_batch_list_args_t *args)
+static int
+lst_batch_list_ioctl(struct lstio_batch_list_args *args)
 {
         if (args->lstio_bat_key != console_session.ses_key)
                 return -EACCES;
@@ -602,8 +597,8 @@ lst_batch_list_ioctl(lstio_batch_list_args_t *args)
                               args->lstio_bat_namep);
 }
 
-int
-lst_batch_info_ioctl(lstio_batch_info_args_t *args)
+static int
+lst_batch_info_ioctl(struct lstio_batch_info_args *args)
 {
         char           *name;
         int             rc;
@@ -667,8 +662,8 @@ lst_batch_info_ioctl(lstio_batch_info_args_t *args)
        return rc;
 }
 
-int
-lst_stat_query_ioctl(lstio_stat_args_t *args)
+static int
+lst_stat_query_ioctl(struct lstio_stat_args *args)
 {
         int             rc;
        char           *name = NULL;
@@ -714,7 +709,7 @@ lst_stat_query_ioctl(lstio_stat_args_t *args)
        return rc;
 }
 
-int lst_test_add_ioctl(lstio_test_args_t *args)
+static int lst_test_add_ioctl(struct lstio_test_args *args)
 {
        char            *batch_name;
        char            *src_name = NULL;
@@ -746,7 +741,7 @@ int lst_test_add_ioctl(lstio_test_args_t *args)
         if (args->lstio_tes_param != NULL &&
             (args->lstio_tes_param_len <= 0 ||
             args->lstio_tes_param_len >
-            PAGE_CACHE_SIZE - sizeof(lstcon_test_t)))
+            PAGE_SIZE - sizeof(struct lstcon_test)))
                 return -EINVAL;
 
        LIBCFS_ALLOC(batch_name, args->lstio_tes_bat_nmlen + 1);
@@ -810,36 +805,40 @@ out:
 }
 
 int
-lstcon_ioctl_entry(unsigned int cmd, struct libcfs_ioctl_hdr *hdr)
+lstcon_ioctl_entry(struct notifier_block *nb,
+                  unsigned long cmd, void *vdata)
 {
-       char   *buf;
+       struct libcfs_ioctl_hdr *hdr = vdata;
        struct libcfs_ioctl_data *data;
-       int     opc;
-       int     rc;
+       char *buf = NULL;
+       int rc = -EINVAL;
+       int opc;
 
        if (cmd != IOC_LIBCFS_LNETST)
-               return -EINVAL;
+               goto err;
 
        data = container_of(hdr, struct libcfs_ioctl_data, ioc_hdr);
 
        opc = data->ioc_u32[0];
 
-       if (data->ioc_plen1 > PAGE_CACHE_SIZE)
-               return -EINVAL;
+       if (data->ioc_plen1 > PAGE_SIZE)
+               goto err;
 
        LIBCFS_ALLOC(buf, data->ioc_plen1);
-       if (buf == NULL)
-               return -ENOMEM;
+       if (buf == NULL) {
+               rc = -ENOMEM;
+               goto err;
+       }
 
        /* copy in parameter */
        if (copy_from_user(buf, data->ioc_pbuf1, data->ioc_plen1)) {
-               LIBCFS_FREE(buf, data->ioc_plen1);
-               return -EFAULT;
+               rc = -EFAULT;
+               goto out_free_buf;
        }
 
        mutex_lock(&console_session.ses_mutex);
 
-       console_session.ses_laststamp = cfs_time_current_sec();
+       console_session.ses_laststamp = ktime_get_real_seconds();
 
        if (console_session.ses_shutdown) {
                rc = -ESHUTDOWN;
@@ -856,78 +855,75 @@ lstcon_ioctl_entry(unsigned int cmd, struct libcfs_ioctl_hdr *hdr)
                goto out;
        }
 
-       memset(&console_session.ses_trans_stat, 0, sizeof(lstcon_trans_stat_t));
+       memset(&console_session.ses_trans_stat, 0, sizeof(struct lstcon_trans_stat));
 
        switch (opc) {
        case LSTIO_SESSION_NEW:
-               rc = lst_session_new_ioctl((lstio_session_new_args_t *)buf);
+               rc = lst_session_new_ioctl((struct lstio_session_new_args *)buf);
                break;
        case LSTIO_SESSION_END:
-               rc = lst_session_end_ioctl((lstio_session_end_args_t *)buf);
+               rc = lst_session_end_ioctl((struct lstio_session_end_args *)buf);
                break;
        case LSTIO_SESSION_INFO:
-               rc = lst_session_info_ioctl((lstio_session_info_args_t *)buf);
+               rc = lst_session_info_ioctl((struct lstio_session_info_args *)buf);
                break;
        case LSTIO_DEBUG:
-               rc = lst_debug_ioctl((lstio_debug_args_t *)buf);
+               rc = lst_debug_ioctl((struct lstio_debug_args *)buf);
                break;
        case LSTIO_GROUP_ADD:
-               rc = lst_group_add_ioctl((lstio_group_add_args_t *)buf);
+               rc = lst_group_add_ioctl((struct lstio_group_add_args *)buf);
                break;
        case LSTIO_GROUP_DEL:
-               rc = lst_group_del_ioctl((lstio_group_del_args_t *)buf);
+               rc = lst_group_del_ioctl((struct lstio_group_del_args *)buf);
                break;
        case LSTIO_GROUP_UPDATE:
-               rc = lst_group_update_ioctl((lstio_group_update_args_t *)buf);
+               rc = lst_group_update_ioctl((struct lstio_group_update_args *)buf);
                break;
        case LSTIO_NODES_ADD:
-               rc = lst_nodes_add_ioctl((lstio_group_nodes_args_t *)buf);
+               rc = lst_nodes_add_ioctl((struct lstio_group_nodes_args *)buf);
                break;
        case LSTIO_GROUP_LIST:
-               rc = lst_group_list_ioctl((lstio_group_list_args_t *)buf);
+               rc = lst_group_list_ioctl((struct lstio_group_list_args *)buf);
                break;
        case LSTIO_GROUP_INFO:
-               rc = lst_group_info_ioctl((lstio_group_info_args_t *)buf);
+               rc = lst_group_info_ioctl((struct lstio_group_info_args *)buf);
                break;
        case LSTIO_BATCH_ADD:
-               rc = lst_batch_add_ioctl((lstio_batch_add_args_t *)buf);
+               rc = lst_batch_add_ioctl((struct lstio_batch_add_args *)buf);
                break;
        case LSTIO_BATCH_START:
-               rc = lst_batch_run_ioctl((lstio_batch_run_args_t *)buf);
+               rc = lst_batch_run_ioctl((struct lstio_batch_run_args *)buf);
                break;
        case LSTIO_BATCH_STOP:
-               rc = lst_batch_stop_ioctl((lstio_batch_stop_args_t *)buf);
+               rc = lst_batch_stop_ioctl((struct lstio_batch_stop_args *)buf);
                break;
        case LSTIO_BATCH_QUERY:
-               rc = lst_batch_query_ioctl((lstio_batch_query_args_t *)buf);
+               rc = lst_batch_query_ioctl((struct lstio_batch_query_args *)buf);
                break;
        case LSTIO_BATCH_LIST:
-               rc = lst_batch_list_ioctl((lstio_batch_list_args_t *)buf);
+               rc = lst_batch_list_ioctl((struct lstio_batch_list_args *)buf);
                break;
        case LSTIO_BATCH_INFO:
-               rc = lst_batch_info_ioctl((lstio_batch_info_args_t *)buf);
+               rc = lst_batch_info_ioctl((struct lstio_batch_info_args *)buf);
                break;
        case LSTIO_TEST_ADD:
-               rc = lst_test_add_ioctl((lstio_test_args_t *)buf);
+               rc = lst_test_add_ioctl((struct lstio_test_args *)buf);
                break;
        case LSTIO_STAT_QUERY:
-               rc = lst_stat_query_ioctl((lstio_stat_args_t *)buf);
+               rc = lst_stat_query_ioctl((struct lstio_stat_args *)buf);
                break;
        default:
                rc = -EINVAL;
+               goto out;
        }
 
        if (copy_to_user(data->ioc_pbuf2, &console_session.ses_trans_stat,
-                        sizeof(lstcon_trans_stat_t)))
+                        sizeof(struct lstcon_trans_stat)))
                rc = -EFAULT;
 out:
        mutex_unlock(&console_session.ses_mutex);
-
+out_free_buf:
        LIBCFS_FREE(buf, data->ioc_plen1);
-
-       return rc;
+err:
+       return notifier_from_ioctl_errno(rc);
 }
-
-EXPORT_SYMBOL(lstcon_ioctl_entry);
-
-#endif