4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 only,
8 * as published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License version 2 for more details (a copy is included
14 * in the LICENSE file that accompanied this code).
16 * You should have received a copy of the GNU General Public License
17 * version 2 along with this program; If not, see
18 * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
20 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
21 * CA 95054 USA or visit www.sun.com if you need additional information or
27 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
28 * Use is subject to license terms.
30 * Copyright (c) 2012, Intel Corporation.
33 * This file is part of Lustre, http://www.lustre.org/
34 * Lustre is a trademark of Sun Microsystems, Inc.
36 * lnet/selftest/conctl.c
38 * IOC handle in kernel
40 * Author: Liang Zhen <liangzhen@clusterfs.com>
43 #include "../../include/linux/libcfs/libcfs.h"
44 #include "../../include/linux/lnet/lib-lnet.h"
45 #include "../../include/linux/lnet/lnetst.h"
49 lst_session_new_ioctl(lstio_session_new_args_t
*args
)
54 if (!args
->lstio_ses_idp
|| /* address for output sid */
55 !args
->lstio_ses_key
|| /* no key is specified */
56 !args
->lstio_ses_namep
|| /* session name */
57 args
->lstio_ses_nmlen
<= 0 ||
58 args
->lstio_ses_nmlen
> LST_NAME_SIZE
)
61 LIBCFS_ALLOC(name
, args
->lstio_ses_nmlen
+ 1);
65 if (copy_from_user(name
, args
->lstio_ses_namep
,
66 args
->lstio_ses_nmlen
)) {
67 LIBCFS_FREE(name
, args
->lstio_ses_nmlen
+ 1);
71 name
[args
->lstio_ses_nmlen
] = 0;
73 rc
= lstcon_session_new(name
,
75 args
->lstio_ses_feats
,
76 args
->lstio_ses_force
,
77 args
->lstio_ses_timeout
,
80 LIBCFS_FREE(name
, args
->lstio_ses_nmlen
+ 1);
85 lst_session_end_ioctl(lstio_session_end_args_t
*args
)
87 if (args
->lstio_ses_key
!= console_session
.ses_key
)
90 return lstcon_session_end();
94 lst_session_info_ioctl(lstio_session_info_args_t
*args
)
96 /* no checking of key */
98 if (!args
->lstio_ses_idp
|| /* address for output sid */
99 !args
->lstio_ses_keyp
|| /* address for output key */
100 !args
->lstio_ses_featp
|| /* address for output features */
101 !args
->lstio_ses_ndinfo
|| /* address for output ndinfo */
102 !args
->lstio_ses_namep
|| /* address for output name */
103 args
->lstio_ses_nmlen
<= 0 ||
104 args
->lstio_ses_nmlen
> LST_NAME_SIZE
)
107 return lstcon_session_info(args
->lstio_ses_idp
,
108 args
->lstio_ses_keyp
,
109 args
->lstio_ses_featp
,
110 args
->lstio_ses_ndinfo
,
111 args
->lstio_ses_namep
,
112 args
->lstio_ses_nmlen
);
116 lst_debug_ioctl(lstio_debug_args_t
*args
)
122 if (args
->lstio_dbg_key
!= console_session
.ses_key
)
125 if (!args
->lstio_dbg_resultp
)
128 if (args
->lstio_dbg_namep
&& /* name of batch/group */
129 (args
->lstio_dbg_nmlen
<= 0 ||
130 args
->lstio_dbg_nmlen
> LST_NAME_SIZE
))
133 if (args
->lstio_dbg_namep
) {
134 LIBCFS_ALLOC(name
, args
->lstio_dbg_nmlen
+ 1);
138 if (copy_from_user(name
, args
->lstio_dbg_namep
,
139 args
->lstio_dbg_nmlen
)) {
140 LIBCFS_FREE(name
, args
->lstio_dbg_nmlen
+ 1);
145 name
[args
->lstio_dbg_nmlen
] = 0;
150 switch (args
->lstio_dbg_type
) {
151 case LST_OPC_SESSION
:
152 rc
= lstcon_session_debug(args
->lstio_dbg_timeout
,
153 args
->lstio_dbg_resultp
);
156 case LST_OPC_BATCHSRV
:
158 case LST_OPC_BATCHCLI
:
162 rc
= lstcon_batch_debug(args
->lstio_dbg_timeout
,
163 name
, client
, args
->lstio_dbg_resultp
);
170 rc
= lstcon_group_debug(args
->lstio_dbg_timeout
,
171 name
, args
->lstio_dbg_resultp
);
175 if (args
->lstio_dbg_count
<= 0 ||
176 !args
->lstio_dbg_idsp
)
179 rc
= lstcon_nodes_debug(args
->lstio_dbg_timeout
,
180 args
->lstio_dbg_count
,
181 args
->lstio_dbg_idsp
,
182 args
->lstio_dbg_resultp
);
191 LIBCFS_FREE(name
, args
->lstio_dbg_nmlen
+ 1);
197 lst_group_add_ioctl(lstio_group_add_args_t
*args
)
202 if (args
->lstio_grp_key
!= console_session
.ses_key
)
205 if (!args
->lstio_grp_namep
||
206 args
->lstio_grp_nmlen
<= 0 ||
207 args
->lstio_grp_nmlen
> LST_NAME_SIZE
)
210 LIBCFS_ALLOC(name
, args
->lstio_grp_nmlen
+ 1);
214 if (copy_from_user(name
, args
->lstio_grp_namep
,
215 args
->lstio_grp_nmlen
)) {
216 LIBCFS_FREE(name
, args
->lstio_grp_nmlen
);
220 name
[args
->lstio_grp_nmlen
] = 0;
222 rc
= lstcon_group_add(name
);
224 LIBCFS_FREE(name
, args
->lstio_grp_nmlen
+ 1);
230 lst_group_del_ioctl(lstio_group_del_args_t
*args
)
235 if (args
->lstio_grp_key
!= console_session
.ses_key
)
238 if (!args
->lstio_grp_namep
||
239 args
->lstio_grp_nmlen
<= 0 ||
240 args
->lstio_grp_nmlen
> LST_NAME_SIZE
)
243 LIBCFS_ALLOC(name
, args
->lstio_grp_nmlen
+ 1);
247 if (copy_from_user(name
, args
->lstio_grp_namep
,
248 args
->lstio_grp_nmlen
)) {
249 LIBCFS_FREE(name
, args
->lstio_grp_nmlen
+ 1);
253 name
[args
->lstio_grp_nmlen
] = 0;
255 rc
= lstcon_group_del(name
);
257 LIBCFS_FREE(name
, args
->lstio_grp_nmlen
+ 1);
263 lst_group_update_ioctl(lstio_group_update_args_t
*args
)
268 if (args
->lstio_grp_key
!= console_session
.ses_key
)
271 if (!args
->lstio_grp_resultp
||
272 !args
->lstio_grp_namep
||
273 args
->lstio_grp_nmlen
<= 0 ||
274 args
->lstio_grp_nmlen
> LST_NAME_SIZE
)
277 LIBCFS_ALLOC(name
, args
->lstio_grp_nmlen
+ 1);
281 if (copy_from_user(name
, args
->lstio_grp_namep
,
282 args
->lstio_grp_nmlen
)) {
283 LIBCFS_FREE(name
, args
->lstio_grp_nmlen
+ 1);
287 name
[args
->lstio_grp_nmlen
] = 0;
289 switch (args
->lstio_grp_opc
) {
290 case LST_GROUP_CLEAN
:
291 rc
= lstcon_group_clean(name
, args
->lstio_grp_args
);
294 case LST_GROUP_REFRESH
:
295 rc
= lstcon_group_refresh(name
, args
->lstio_grp_resultp
);
299 if (args
->lstio_grp_count
<= 0 ||
300 !args
->lstio_grp_idsp
) {
304 rc
= lstcon_nodes_remove(name
, args
->lstio_grp_count
,
305 args
->lstio_grp_idsp
,
306 args
->lstio_grp_resultp
);
314 LIBCFS_FREE(name
, args
->lstio_grp_nmlen
+ 1);
320 lst_nodes_add_ioctl(lstio_group_nodes_args_t
*args
)
326 if (args
->lstio_grp_key
!= console_session
.ses_key
)
329 if (!args
->lstio_grp_idsp
|| /* array of ids */
330 args
->lstio_grp_count
<= 0 ||
331 !args
->lstio_grp_resultp
||
332 !args
->lstio_grp_featp
||
333 !args
->lstio_grp_namep
||
334 args
->lstio_grp_nmlen
<= 0 ||
335 args
->lstio_grp_nmlen
> LST_NAME_SIZE
)
338 LIBCFS_ALLOC(name
, args
->lstio_grp_nmlen
+ 1);
342 if (copy_from_user(name
, args
->lstio_grp_namep
,
343 args
->lstio_grp_nmlen
)) {
344 LIBCFS_FREE(name
, args
->lstio_grp_nmlen
+ 1);
349 name
[args
->lstio_grp_nmlen
] = 0;
351 rc
= lstcon_nodes_add(name
, args
->lstio_grp_count
,
352 args
->lstio_grp_idsp
, &feats
,
353 args
->lstio_grp_resultp
);
355 LIBCFS_FREE(name
, args
->lstio_grp_nmlen
+ 1);
357 copy_to_user(args
->lstio_grp_featp
, &feats
, sizeof(feats
))) {
365 lst_group_list_ioctl(lstio_group_list_args_t
*args
)
367 if (args
->lstio_grp_key
!= console_session
.ses_key
)
370 if (args
->lstio_grp_idx
< 0 ||
371 !args
->lstio_grp_namep
||
372 args
->lstio_grp_nmlen
<= 0 ||
373 args
->lstio_grp_nmlen
> LST_NAME_SIZE
)
376 return lstcon_group_list(args
->lstio_grp_idx
,
377 args
->lstio_grp_nmlen
,
378 args
->lstio_grp_namep
);
382 lst_group_info_ioctl(lstio_group_info_args_t
*args
)
389 if (args
->lstio_grp_key
!= console_session
.ses_key
)
392 if (!args
->lstio_grp_namep
||
393 args
->lstio_grp_nmlen
<= 0 ||
394 args
->lstio_grp_nmlen
> LST_NAME_SIZE
)
397 if (!args
->lstio_grp_entp
&& /* output: group entry */
398 !args
->lstio_grp_dentsp
) /* output: node entry */
401 if (args
->lstio_grp_dentsp
) { /* have node entry */
402 if (!args
->lstio_grp_idxp
|| /* node index */
403 !args
->lstio_grp_ndentp
) /* # of node entry */
406 if (copy_from_user(&ndent
, args
->lstio_grp_ndentp
,
408 copy_from_user(&index
, args
->lstio_grp_idxp
,
412 if (ndent
<= 0 || index
< 0)
416 LIBCFS_ALLOC(name
, args
->lstio_grp_nmlen
+ 1);
420 if (copy_from_user(name
, args
->lstio_grp_namep
,
421 args
->lstio_grp_nmlen
)) {
422 LIBCFS_FREE(name
, args
->lstio_grp_nmlen
+ 1);
426 name
[args
->lstio_grp_nmlen
] = 0;
428 rc
= lstcon_group_info(name
, args
->lstio_grp_entp
,
429 &index
, &ndent
, args
->lstio_grp_dentsp
);
431 LIBCFS_FREE(name
, args
->lstio_grp_nmlen
+ 1);
436 if (args
->lstio_grp_dentsp
&&
437 (copy_to_user(args
->lstio_grp_idxp
, &index
, sizeof(index
)) ||
438 copy_to_user(args
->lstio_grp_ndentp
, &ndent
, sizeof(ndent
))))
445 lst_batch_add_ioctl(lstio_batch_add_args_t
*args
)
450 if (args
->lstio_bat_key
!= console_session
.ses_key
)
453 if (!args
->lstio_bat_namep
||
454 args
->lstio_bat_nmlen
<= 0 ||
455 args
->lstio_bat_nmlen
> LST_NAME_SIZE
)
458 LIBCFS_ALLOC(name
, args
->lstio_bat_nmlen
+ 1);
462 if (copy_from_user(name
, args
->lstio_bat_namep
,
463 args
->lstio_bat_nmlen
)) {
464 LIBCFS_FREE(name
, args
->lstio_bat_nmlen
+ 1);
468 name
[args
->lstio_bat_nmlen
] = 0;
470 rc
= lstcon_batch_add(name
);
472 LIBCFS_FREE(name
, args
->lstio_bat_nmlen
+ 1);
478 lst_batch_run_ioctl(lstio_batch_run_args_t
*args
)
483 if (args
->lstio_bat_key
!= console_session
.ses_key
)
486 if (!args
->lstio_bat_namep
||
487 args
->lstio_bat_nmlen
<= 0 ||
488 args
->lstio_bat_nmlen
> LST_NAME_SIZE
)
491 LIBCFS_ALLOC(name
, args
->lstio_bat_nmlen
+ 1);
495 if (copy_from_user(name
, args
->lstio_bat_namep
,
496 args
->lstio_bat_nmlen
)) {
497 LIBCFS_FREE(name
, args
->lstio_bat_nmlen
+ 1);
501 name
[args
->lstio_bat_nmlen
] = 0;
503 rc
= lstcon_batch_run(name
, args
->lstio_bat_timeout
,
504 args
->lstio_bat_resultp
);
506 LIBCFS_FREE(name
, args
->lstio_bat_nmlen
+ 1);
512 lst_batch_stop_ioctl(lstio_batch_stop_args_t
*args
)
517 if (args
->lstio_bat_key
!= console_session
.ses_key
)
520 if (!args
->lstio_bat_resultp
||
521 !args
->lstio_bat_namep
||
522 args
->lstio_bat_nmlen
<= 0 ||
523 args
->lstio_bat_nmlen
> LST_NAME_SIZE
)
526 LIBCFS_ALLOC(name
, args
->lstio_bat_nmlen
+ 1);
530 if (copy_from_user(name
, args
->lstio_bat_namep
,
531 args
->lstio_bat_nmlen
)) {
532 LIBCFS_FREE(name
, args
->lstio_bat_nmlen
+ 1);
536 name
[args
->lstio_bat_nmlen
] = 0;
538 rc
= lstcon_batch_stop(name
, args
->lstio_bat_force
,
539 args
->lstio_bat_resultp
);
541 LIBCFS_FREE(name
, args
->lstio_bat_nmlen
+ 1);
547 lst_batch_query_ioctl(lstio_batch_query_args_t
*args
)
552 if (args
->lstio_bat_key
!= console_session
.ses_key
)
555 if (!args
->lstio_bat_resultp
||
556 !args
->lstio_bat_namep
||
557 args
->lstio_bat_nmlen
<= 0 ||
558 args
->lstio_bat_nmlen
> LST_NAME_SIZE
)
561 if (args
->lstio_bat_testidx
< 0)
564 LIBCFS_ALLOC(name
, args
->lstio_bat_nmlen
+ 1);
568 if (copy_from_user(name
, args
->lstio_bat_namep
,
569 args
->lstio_bat_nmlen
)) {
570 LIBCFS_FREE(name
, args
->lstio_bat_nmlen
+ 1);
574 name
[args
->lstio_bat_nmlen
] = 0;
576 rc
= lstcon_test_batch_query(name
,
577 args
->lstio_bat_testidx
,
578 args
->lstio_bat_client
,
579 args
->lstio_bat_timeout
,
580 args
->lstio_bat_resultp
);
582 LIBCFS_FREE(name
, args
->lstio_bat_nmlen
+ 1);
588 lst_batch_list_ioctl(lstio_batch_list_args_t
*args
)
590 if (args
->lstio_bat_key
!= console_session
.ses_key
)
593 if (args
->lstio_bat_idx
< 0 ||
594 !args
->lstio_bat_namep
||
595 args
->lstio_bat_nmlen
<= 0 ||
596 args
->lstio_bat_nmlen
> LST_NAME_SIZE
)
599 return lstcon_batch_list(args
->lstio_bat_idx
,
600 args
->lstio_bat_nmlen
,
601 args
->lstio_bat_namep
);
605 lst_batch_info_ioctl(lstio_batch_info_args_t
*args
)
612 if (args
->lstio_bat_key
!= console_session
.ses_key
)
615 if (!args
->lstio_bat_namep
|| /* batch name */
616 args
->lstio_bat_nmlen
<= 0 ||
617 args
->lstio_bat_nmlen
> LST_NAME_SIZE
)
620 if (!args
->lstio_bat_entp
&& /* output: batch entry */
621 !args
->lstio_bat_dentsp
) /* output: node entry */
624 if (args
->lstio_bat_dentsp
) { /* have node entry */
625 if (!args
->lstio_bat_idxp
|| /* node index */
626 !args
->lstio_bat_ndentp
) /* # of node entry */
629 if (copy_from_user(&index
, args
->lstio_bat_idxp
,
631 copy_from_user(&ndent
, args
->lstio_bat_ndentp
,
635 if (ndent
<= 0 || index
< 0)
639 LIBCFS_ALLOC(name
, args
->lstio_bat_nmlen
+ 1);
643 if (copy_from_user(name
, args
->lstio_bat_namep
,
644 args
->lstio_bat_nmlen
)) {
645 LIBCFS_FREE(name
, args
->lstio_bat_nmlen
+ 1);
649 name
[args
->lstio_bat_nmlen
] = 0;
651 rc
= lstcon_batch_info(name
, args
->lstio_bat_entp
,
652 args
->lstio_bat_server
, args
->lstio_bat_testidx
,
653 &index
, &ndent
, args
->lstio_bat_dentsp
);
655 LIBCFS_FREE(name
, args
->lstio_bat_nmlen
+ 1);
660 if (args
->lstio_bat_dentsp
&&
661 (copy_to_user(args
->lstio_bat_idxp
, &index
, sizeof(index
)) ||
662 copy_to_user(args
->lstio_bat_ndentp
, &ndent
, sizeof(ndent
))))
669 lst_stat_query_ioctl(lstio_stat_args_t
*args
)
674 /* TODO: not finished */
675 if (args
->lstio_sta_key
!= console_session
.ses_key
)
678 if (!args
->lstio_sta_resultp
)
681 if (args
->lstio_sta_idsp
) {
682 if (args
->lstio_sta_count
<= 0)
685 rc
= lstcon_nodes_stat(args
->lstio_sta_count
,
686 args
->lstio_sta_idsp
,
687 args
->lstio_sta_timeout
,
688 args
->lstio_sta_resultp
);
689 } else if (args
->lstio_sta_namep
) {
690 if (args
->lstio_sta_nmlen
<= 0 ||
691 args
->lstio_sta_nmlen
> LST_NAME_SIZE
)
694 LIBCFS_ALLOC(name
, args
->lstio_sta_nmlen
+ 1);
698 rc
= copy_from_user(name
, args
->lstio_sta_namep
,
699 args
->lstio_sta_nmlen
);
701 rc
= lstcon_group_stat(name
, args
->lstio_sta_timeout
,
702 args
->lstio_sta_resultp
);
710 LIBCFS_FREE(name
, args
->lstio_sta_nmlen
+ 1);
714 static int lst_test_add_ioctl(lstio_test_args_t
*args
)
717 char *src_name
= NULL
;
718 char *dst_name
= NULL
;
723 if (!args
->lstio_tes_resultp
||
724 !args
->lstio_tes_retp
||
725 !args
->lstio_tes_bat_name
|| /* no specified batch */
726 args
->lstio_tes_bat_nmlen
<= 0 ||
727 args
->lstio_tes_bat_nmlen
> LST_NAME_SIZE
||
728 !args
->lstio_tes_sgrp_name
|| /* no source group */
729 args
->lstio_tes_sgrp_nmlen
<= 0 ||
730 args
->lstio_tes_sgrp_nmlen
> LST_NAME_SIZE
||
731 !args
->lstio_tes_dgrp_name
|| /* no target group */
732 args
->lstio_tes_dgrp_nmlen
<= 0 ||
733 args
->lstio_tes_dgrp_nmlen
> LST_NAME_SIZE
)
736 if (!args
->lstio_tes_loop
|| /* negative is infinite */
737 args
->lstio_tes_concur
<= 0 ||
738 args
->lstio_tes_dist
<= 0 ||
739 args
->lstio_tes_span
<= 0)
742 /* have parameter, check if parameter length is valid */
743 if (args
->lstio_tes_param
&&
744 (args
->lstio_tes_param_len
<= 0 ||
745 args
->lstio_tes_param_len
>
746 PAGE_SIZE
- sizeof(lstcon_test_t
)))
749 LIBCFS_ALLOC(batch_name
, args
->lstio_tes_bat_nmlen
+ 1);
753 LIBCFS_ALLOC(src_name
, args
->lstio_tes_sgrp_nmlen
+ 1);
757 LIBCFS_ALLOC(dst_name
, args
->lstio_tes_dgrp_nmlen
+ 1);
761 if (args
->lstio_tes_param
) {
762 LIBCFS_ALLOC(param
, args
->lstio_tes_param_len
);
765 if (copy_from_user(param
, args
->lstio_tes_param
,
766 args
->lstio_tes_param_len
)) {
773 if (copy_from_user(batch_name
, args
->lstio_tes_bat_name
,
774 args
->lstio_tes_bat_nmlen
) ||
775 copy_from_user(src_name
, args
->lstio_tes_sgrp_name
,
776 args
->lstio_tes_sgrp_nmlen
) ||
777 copy_from_user(dst_name
, args
->lstio_tes_dgrp_name
,
778 args
->lstio_tes_dgrp_nmlen
))
781 rc
= lstcon_test_add(batch_name
, args
->lstio_tes_type
,
782 args
->lstio_tes_loop
, args
->lstio_tes_concur
,
783 args
->lstio_tes_dist
, args
->lstio_tes_span
,
784 src_name
, dst_name
, param
,
785 args
->lstio_tes_param_len
,
786 &ret
, args
->lstio_tes_resultp
);
789 rc
= (copy_to_user(args
->lstio_tes_retp
, &ret
,
790 sizeof(ret
))) ? -EFAULT
: 0;
793 LIBCFS_FREE(batch_name
, args
->lstio_tes_bat_nmlen
+ 1);
796 LIBCFS_FREE(src_name
, args
->lstio_tes_sgrp_nmlen
+ 1);
799 LIBCFS_FREE(dst_name
, args
->lstio_tes_dgrp_nmlen
+ 1);
802 LIBCFS_FREE(param
, args
->lstio_tes_param_len
);
808 lstcon_ioctl_entry(unsigned int cmd
, struct libcfs_ioctl_hdr
*hdr
)
811 struct libcfs_ioctl_data
*data
;
815 if (cmd
!= IOC_LIBCFS_LNETST
)
818 data
= container_of(hdr
, struct libcfs_ioctl_data
, ioc_hdr
);
820 opc
= data
->ioc_u32
[0];
822 if (data
->ioc_plen1
> PAGE_SIZE
)
825 LIBCFS_ALLOC(buf
, data
->ioc_plen1
);
829 /* copy in parameter */
830 if (copy_from_user(buf
, data
->ioc_pbuf1
, data
->ioc_plen1
)) {
831 LIBCFS_FREE(buf
, data
->ioc_plen1
);
835 mutex_lock(&console_session
.ses_mutex
);
837 console_session
.ses_laststamp
= ktime_get_real_seconds();
839 if (console_session
.ses_shutdown
) {
844 if (console_session
.ses_expired
)
845 lstcon_session_end();
847 if (opc
!= LSTIO_SESSION_NEW
&&
848 console_session
.ses_state
== LST_SESSION_NONE
) {
849 CDEBUG(D_NET
, "LST no active session\n");
854 memset(&console_session
.ses_trans_stat
, 0, sizeof(lstcon_trans_stat_t
));
857 case LSTIO_SESSION_NEW
:
858 rc
= lst_session_new_ioctl((lstio_session_new_args_t
*)buf
);
860 case LSTIO_SESSION_END
:
861 rc
= lst_session_end_ioctl((lstio_session_end_args_t
*)buf
);
863 case LSTIO_SESSION_INFO
:
864 rc
= lst_session_info_ioctl((lstio_session_info_args_t
*)buf
);
867 rc
= lst_debug_ioctl((lstio_debug_args_t
*)buf
);
869 case LSTIO_GROUP_ADD
:
870 rc
= lst_group_add_ioctl((lstio_group_add_args_t
*)buf
);
872 case LSTIO_GROUP_DEL
:
873 rc
= lst_group_del_ioctl((lstio_group_del_args_t
*)buf
);
875 case LSTIO_GROUP_UPDATE
:
876 rc
= lst_group_update_ioctl((lstio_group_update_args_t
*)buf
);
878 case LSTIO_NODES_ADD
:
879 rc
= lst_nodes_add_ioctl((lstio_group_nodes_args_t
*)buf
);
881 case LSTIO_GROUP_LIST
:
882 rc
= lst_group_list_ioctl((lstio_group_list_args_t
*)buf
);
884 case LSTIO_GROUP_INFO
:
885 rc
= lst_group_info_ioctl((lstio_group_info_args_t
*)buf
);
887 case LSTIO_BATCH_ADD
:
888 rc
= lst_batch_add_ioctl((lstio_batch_add_args_t
*)buf
);
890 case LSTIO_BATCH_START
:
891 rc
= lst_batch_run_ioctl((lstio_batch_run_args_t
*)buf
);
893 case LSTIO_BATCH_STOP
:
894 rc
= lst_batch_stop_ioctl((lstio_batch_stop_args_t
*)buf
);
896 case LSTIO_BATCH_QUERY
:
897 rc
= lst_batch_query_ioctl((lstio_batch_query_args_t
*)buf
);
899 case LSTIO_BATCH_LIST
:
900 rc
= lst_batch_list_ioctl((lstio_batch_list_args_t
*)buf
);
902 case LSTIO_BATCH_INFO
:
903 rc
= lst_batch_info_ioctl((lstio_batch_info_args_t
*)buf
);
906 rc
= lst_test_add_ioctl((lstio_test_args_t
*)buf
);
908 case LSTIO_STAT_QUERY
:
909 rc
= lst_stat_query_ioctl((lstio_stat_args_t
*)buf
);
915 if (copy_to_user(data
->ioc_pbuf2
, &console_session
.ses_trans_stat
,
916 sizeof(lstcon_trans_stat_t
)))
919 mutex_unlock(&console_session
.ses_mutex
);
921 LIBCFS_FREE(buf
, data
->ioc_plen1
);