1d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* 2d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * GPL HEADER START 3d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 4d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 6d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * This program is free software; you can redistribute it and/or modify 7d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * it under the terms of the GNU General Public License version 2 only, 8d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * as published by the Free Software Foundation. 9d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 10d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * This program is distributed in the hope that it will be useful, but 11d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * WITHOUT ANY WARRANTY; without even the implied warranty of 12d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * General Public License version 2 for more details (a copy is included 14d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * in the LICENSE file that accompanied this code). 15d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 16d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * You should have received a copy of the GNU General Public License 17d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * version 2 along with this program; If not, see 18d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf 19d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 20d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 21d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * CA 95054 USA or visit www.sun.com if you need additional information or 22d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * have any questions. 23d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 24d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * GPL HEADER END 25d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao */ 26d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* 27d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 28d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Use is subject to license terms. 29d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 30d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Copyright (c) 2012, Intel Corporation. 31d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao */ 32d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* 33d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * This file is part of Lustre, http://www.lustre.org/ 34d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Lustre is a trademark of Sun Microsystems, Inc. 35d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 36d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * lnet/selftest/conctl.c 37d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 38d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * IOC handle in kernel 39d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 40d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Author: Liang Zhen <liangzhen@clusterfs.com> 41d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao */ 42d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 439fdaf8c0b92ab374f8501eb47855776afc928e45Greg Kroah-Hartman#include "../../include/linux/libcfs/libcfs.h" 449fdaf8c0b92ab374f8501eb47855776afc928e45Greg Kroah-Hartman#include "../../include/linux/lnet/lib-lnet.h" 459fdaf8c0b92ab374f8501eb47855776afc928e45Greg Kroah-Hartman#include "../../include/linux/lnet/lnetst.h" 46d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#include "console.h" 47d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 48d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 49d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_session_new_ioctl(lstio_session_new_args_t *args) 50d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 51d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *name; 52d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int rc; 53d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 54d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_ses_idp == NULL || /* address for output sid */ 55d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_key == 0 || /* no key is specified */ 56d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_namep == NULL || /* session name */ 57d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_nmlen <= 0 || 58d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_nmlen > LST_NAME_SIZE) 59d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 60d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 61d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_ALLOC(name, args->lstio_ses_nmlen + 1); 62d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name == NULL) 63d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -ENOMEM; 64d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 65d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(name, 66d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_namep, 67d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_nmlen)) { 68d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_ses_nmlen + 1); 69d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 70d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 71d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 72d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao name[args->lstio_ses_nmlen] = 0; 73d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 74d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_session_new(name, 75d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_key, 76d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_feats, 77d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_force, 78d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_timeout, 79d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_idp); 80d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 81d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_ses_nmlen + 1); 82d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 83d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 84d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 85d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 86d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_session_end_ioctl(lstio_session_end_args_t *args) 87d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 88d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_ses_key != console_session.ses_key) 89d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EACCES; 90d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 91d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return lstcon_session_end(); 92d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 93d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 94d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 95d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_session_info_ioctl(lstio_session_info_args_t *args) 96d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 97d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao /* no checking of key */ 98d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 9923ebb3fd1dfd70bd167b1c4758c0a23fbdd25650Masanari Iida if (args->lstio_ses_idp == NULL || /* address for output sid */ 10023ebb3fd1dfd70bd167b1c4758c0a23fbdd25650Masanari Iida args->lstio_ses_keyp == NULL || /* address for output key */ 10123ebb3fd1dfd70bd167b1c4758c0a23fbdd25650Masanari Iida args->lstio_ses_featp == NULL || /* address for output features */ 102d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_ndinfo == NULL || /* address for output ndinfo */ 10323ebb3fd1dfd70bd167b1c4758c0a23fbdd25650Masanari Iida args->lstio_ses_namep == NULL || /* address for output name */ 104d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_nmlen <= 0 || 105d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_nmlen > LST_NAME_SIZE) 106d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 107d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 108d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return lstcon_session_info(args->lstio_ses_idp, 109d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_keyp, 110d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_featp, 111d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_ndinfo, 112d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_namep, 113d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_ses_nmlen); 114d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 115d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 116d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 117d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_debug_ioctl(lstio_debug_args_t *args) 118d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 119d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *name = NULL; 120d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int client = 1; 121d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int rc; 122d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 123d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_dbg_key != console_session.ses_key) 124d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EACCES; 125d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 126d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_dbg_resultp == NULL) 127d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 128d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 129d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_dbg_namep != NULL && /* name of batch/group */ 130d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao (args->lstio_dbg_nmlen <= 0 || 131d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_dbg_nmlen > LST_NAME_SIZE)) 132d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 133d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 134d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_dbg_namep != NULL) { 135d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_ALLOC(name, args->lstio_dbg_nmlen + 1); 136d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name == NULL) 137d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -ENOMEM; 138d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 139d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(name, args->lstio_dbg_namep, 140d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_dbg_nmlen)) { 141d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_dbg_nmlen + 1); 142d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 143d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 144d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 145d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 146d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao name[args->lstio_dbg_nmlen] = 0; 147d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 148d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 149d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = -EINVAL; 150d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 151d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao switch (args->lstio_dbg_type) { 152d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LST_OPC_SESSION: 153d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_session_debug(args->lstio_dbg_timeout, 154d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_dbg_resultp); 155d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 156d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 157d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LST_OPC_BATCHSRV: 158d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao client = 0; 159d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LST_OPC_BATCHCLI: 160d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name == NULL) 161d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao goto out; 162d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 163d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_batch_debug(args->lstio_dbg_timeout, 164d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao name, client, args->lstio_dbg_resultp); 165d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 166d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 167d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LST_OPC_GROUP: 168d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name == NULL) 169d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao goto out; 170d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 171d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_group_debug(args->lstio_dbg_timeout, 172d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao name, args->lstio_dbg_resultp); 173d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 174d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 175d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LST_OPC_NODES: 176d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_dbg_count <= 0 || 177d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_dbg_idsp == NULL) 178d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao goto out; 179d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 180d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_nodes_debug(args->lstio_dbg_timeout, 181d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_dbg_count, 182d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_dbg_idsp, 183d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_dbg_resultp); 184d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 185d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 186d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao default: 187d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 188d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 189d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 190d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoout: 191d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name != NULL) 192d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_dbg_nmlen + 1); 193d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 194d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 195d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 196d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 197d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 198d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_group_add_ioctl(lstio_group_add_args_t *args) 199d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 200d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *name; 201d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int rc; 202d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 203d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_key != console_session.ses_key) 204d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EACCES; 205d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 206d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_namep == NULL|| 207d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen <= 0 || 208d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen > LST_NAME_SIZE) 209d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 210d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 211d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_ALLOC(name, args->lstio_grp_nmlen + 1); 212d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name == NULL) 213d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -ENOMEM; 214d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 215d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(name, 216d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_namep, 217d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen)) { 218d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_grp_nmlen); 219d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 220d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 221d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 222d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao name[args->lstio_grp_nmlen] = 0; 223d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 224d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_group_add(name); 225d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 226d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_grp_nmlen + 1); 227d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 228d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 229d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 230d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 231d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 232d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_group_del_ioctl(lstio_group_del_args_t *args) 233d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 234d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int rc; 235d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *name; 236d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 237d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_key != console_session.ses_key) 238d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EACCES; 239d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 240d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_namep == NULL || 241d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen <= 0 || 242d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen > LST_NAME_SIZE) 243d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 244d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 245d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_ALLOC(name, args->lstio_grp_nmlen + 1); 246d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name == NULL) 247d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -ENOMEM; 248d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 249d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(name, 250d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_namep, 251d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen)) { 252d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_grp_nmlen + 1); 253d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 254d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 255d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 256d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao name[args->lstio_grp_nmlen] = 0; 257d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 258d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_group_del(name); 259d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 260d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_grp_nmlen + 1); 261d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 262d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 263d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 264d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 265d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 266d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_group_update_ioctl(lstio_group_update_args_t *args) 267d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 268d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int rc; 269d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *name; 270d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 271d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_key != console_session.ses_key) 272d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EACCES; 273d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 274d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_resultp == NULL || 275d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_namep == NULL || 276d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen <= 0 || 277d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen > LST_NAME_SIZE) 278d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 279d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 280d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_ALLOC(name, args->lstio_grp_nmlen + 1); 281d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name == NULL) 282d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -ENOMEM; 283d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 284d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(name, 285d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_namep, 286d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen)) { 287d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_grp_nmlen + 1); 288d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 289d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 290d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 291d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao name[args->lstio_grp_nmlen] = 0; 292d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 293d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao switch (args->lstio_grp_opc) { 294d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LST_GROUP_CLEAN: 295d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_group_clean(name, args->lstio_grp_args); 296d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 297d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 298d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LST_GROUP_REFRESH: 299d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_group_refresh(name, args->lstio_grp_resultp); 300d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 301d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 302d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LST_GROUP_RMND: 303d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_count <= 0 || 304d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_idsp == NULL) { 305d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = -EINVAL; 306d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 307d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 308d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_nodes_remove(name, args->lstio_grp_count, 309d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_idsp, 310d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_resultp); 311d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 312d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 313d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao default: 314d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = -EINVAL; 315d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 316d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 317d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 318d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_grp_nmlen + 1); 319d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 320d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 321d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 322d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 323d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 324d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_nodes_add_ioctl(lstio_group_nodes_args_t *args) 325d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 326d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao unsigned feats; 327d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int rc; 328d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *name; 329d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 330d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_key != console_session.ses_key) 331d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EACCES; 332d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 333d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_idsp == NULL || /* array of ids */ 334d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_count <= 0 || 335d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_resultp == NULL || 336d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_featp == NULL || 337d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_namep == NULL || 338d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen <= 0 || 339d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen > LST_NAME_SIZE) 340d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 341d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 342d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_ALLOC(name, args->lstio_grp_nmlen + 1); 343d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name == NULL) 344d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -ENOMEM; 345d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 346d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(name, args->lstio_grp_namep, 347d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen)) { 348d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_grp_nmlen + 1); 349d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 350d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 351d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 352d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 353d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao name[args->lstio_grp_nmlen] = 0; 354d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 355d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_nodes_add(name, args->lstio_grp_count, 356d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_idsp, &feats, 357d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_resultp); 358d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 359d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_grp_nmlen + 1); 360d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (rc == 0 && 361d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao copy_to_user(args->lstio_grp_featp, &feats, sizeof(feats))) { 362d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 363d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 364d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 365d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 366d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 367d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 368d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 369d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_group_list_ioctl(lstio_group_list_args_t *args) 370d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 371d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_key != console_session.ses_key) 372d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EACCES; 373d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 374d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_idx < 0 || 375d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_namep == NULL || 376d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen <= 0 || 377d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen > LST_NAME_SIZE) 378d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 379d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 380d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return lstcon_group_list(args->lstio_grp_idx, 381d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen, 382d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_namep); 383d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 384d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 385d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 386d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_group_info_ioctl(lstio_group_info_args_t *args) 387d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 388d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *name; 389d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int ndent; 390d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int index; 391d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int rc; 392d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 393d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_key != console_session.ses_key) 394d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EACCES; 395d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 396d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_namep == NULL || 397d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen <= 0 || 398d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen > LST_NAME_SIZE) 399d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 400d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 401d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_entp == NULL && /* output: group entry */ 402d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_dentsp == NULL) /* output: node entry */ 403d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 404d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 405d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_dentsp != NULL) { /* have node entry */ 406d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_idxp == NULL || /* node index */ 407d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_ndentp == NULL) /* # of node entry */ 408d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 409d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 410d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(&ndent, args->lstio_grp_ndentp, 411d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao sizeof(ndent)) || 412d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao copy_from_user(&index, args->lstio_grp_idxp, 413d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao sizeof(index))) 414d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 415d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 416d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (ndent <= 0 || index < 0) 417d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 418d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 419d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 420d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_ALLOC(name, args->lstio_grp_nmlen + 1); 421d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name == NULL) 422d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -ENOMEM; 423d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 424d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(name, 425d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_namep, 426d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_grp_nmlen)) { 427d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_grp_nmlen + 1); 428d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 429d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 430d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 431d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao name[args->lstio_grp_nmlen] = 0; 432d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 433d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_group_info(name, args->lstio_grp_entp, 434d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao &index, &ndent, args->lstio_grp_dentsp); 435d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 436d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_grp_nmlen + 1); 437d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 438d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (rc != 0) 439d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 440d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 441d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_grp_dentsp != NULL && 442d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao (copy_to_user(args->lstio_grp_idxp, &index, sizeof(index)) || 443d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao copy_to_user(args->lstio_grp_ndentp, &ndent, sizeof(ndent)))) 444d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = -EFAULT; 445d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 446d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return 0; 447d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 448d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 449d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 450d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_batch_add_ioctl(lstio_batch_add_args_t *args) 451d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 452d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int rc; 453d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *name; 454d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 455d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_key != console_session.ses_key) 456d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EACCES; 457d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 458d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_namep == NULL || 459d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen <= 0 || 460d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen > LST_NAME_SIZE) 461d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 462d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 463d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_ALLOC(name, args->lstio_bat_nmlen + 1); 464d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name == NULL) 465d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -ENOMEM; 466d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 467d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(name, 468d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_namep, 469d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen)) { 470d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_bat_nmlen + 1); 471d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 472d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 473d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 474d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao name[args->lstio_bat_nmlen] = 0; 475d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 476d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_batch_add(name); 477d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 478d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_bat_nmlen + 1); 479d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 480d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 481d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 482d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 483d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 484d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_batch_run_ioctl(lstio_batch_run_args_t *args) 485d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 486d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int rc; 487d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *name; 488d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 489d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_key != console_session.ses_key) 490d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EACCES; 491d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 492d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_namep == NULL || 493d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen <= 0 || 494d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen > LST_NAME_SIZE) 495d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 496d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 497d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_ALLOC(name, args->lstio_bat_nmlen + 1); 498d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name == NULL) 499d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -ENOMEM; 500d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 501d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(name, 502d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_namep, 503d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen)) { 504d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_bat_nmlen + 1); 505d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 506d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 507d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 508d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao name[args->lstio_bat_nmlen] = 0; 509d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 510d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_batch_run(name, args->lstio_bat_timeout, 511d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_resultp); 512d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 513d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_bat_nmlen + 1); 514d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 515d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 516d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 517d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 518d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 519d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_batch_stop_ioctl(lstio_batch_stop_args_t *args) 520d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 521d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int rc; 522d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *name; 523d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 524d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_key != console_session.ses_key) 525d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EACCES; 526d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 527d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_resultp == NULL || 528d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_namep == NULL || 529d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen <= 0 || 530d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen > LST_NAME_SIZE) 531d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 532d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 533d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_ALLOC(name, args->lstio_bat_nmlen + 1); 534d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name == NULL) 535d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -ENOMEM; 536d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 537d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(name, 538d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_namep, 539d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen)) { 540d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_bat_nmlen + 1); 541d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 542d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 543d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 544d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao name[args->lstio_bat_nmlen] = 0; 545d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 546d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_batch_stop(name, args->lstio_bat_force, 547d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_resultp); 548d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 549d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_bat_nmlen + 1); 550d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 551d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 552d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 553d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 554d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 555d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_batch_query_ioctl(lstio_batch_query_args_t *args) 556d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 557d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *name; 558d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int rc; 559d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 560d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_key != console_session.ses_key) 561d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EACCES; 562d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 563d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_resultp == NULL || 564d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_namep == NULL || 565d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen <= 0 || 566d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen > LST_NAME_SIZE) 567d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 568d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 569d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_testidx < 0) 570d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 571d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 572d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_ALLOC(name, args->lstio_bat_nmlen + 1); 573d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name == NULL) 574d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -ENOMEM; 575d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 576d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(name, 577d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_namep, 578d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen)) { 579d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_bat_nmlen + 1); 580d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 581d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 582d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 583d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao name[args->lstio_bat_nmlen] = 0; 584d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 585d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_test_batch_query(name, 586d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_testidx, 587d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_client, 588d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_timeout, 589d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_resultp); 590d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 591d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_bat_nmlen + 1); 592d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 593d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 594d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 595d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 596d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 597d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_batch_list_ioctl(lstio_batch_list_args_t *args) 598d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 599d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_key != console_session.ses_key) 600d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EACCES; 601d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 602d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_idx < 0 || 603d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_namep == NULL || 604d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen <= 0 || 605d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen > LST_NAME_SIZE) 606d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 607d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 608d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return lstcon_batch_list(args->lstio_bat_idx, 609d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen, 610d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_namep); 611d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 612d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 613d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 614d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_batch_info_ioctl(lstio_batch_info_args_t *args) 615d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 616d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *name; 617d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int rc; 618d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int index; 619d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int ndent; 620d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 621d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_key != console_session.ses_key) 622d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EACCES; 623d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 624d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_namep == NULL || /* batch name */ 625d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen <= 0 || 626d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_nmlen > LST_NAME_SIZE) 627d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 628d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 629d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_entp == NULL && /* output: batch entry */ 630d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_dentsp == NULL) /* output: node entry */ 631d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 632d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 633d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_dentsp != NULL) { /* have node entry */ 634d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_idxp == NULL || /* node index */ 635d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_ndentp == NULL) /* # of node entry */ 636d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 637d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 638d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(&index, args->lstio_bat_idxp, 639d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao sizeof(index)) || 640d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao copy_from_user(&ndent, args->lstio_bat_ndentp, 641d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao sizeof(ndent))) 642d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 643d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 644d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (ndent <= 0 || index < 0) 645d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 646d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 647d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 648d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_ALLOC(name, args->lstio_bat_nmlen + 1); 649d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name == NULL) 650d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -ENOMEM; 651d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 652d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(name, 653d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_namep, args->lstio_bat_nmlen)) { 654d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_bat_nmlen + 1); 655d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 656d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 657d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 658d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao name[args->lstio_bat_nmlen] = 0; 659d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 660d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_batch_info(name, 661d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_entp, args->lstio_bat_server, 662d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_testidx, &index, &ndent, 663d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_bat_dentsp); 664d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 665d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_bat_nmlen + 1); 666d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 667d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (rc != 0) 668d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 669d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 670d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_bat_dentsp != NULL && 671d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao (copy_to_user(args->lstio_bat_idxp, &index, sizeof(index)) || 672d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao copy_to_user(args->lstio_bat_ndentp, &ndent, sizeof(ndent)))) 673d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = -EFAULT; 674d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 675d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 676d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 677d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 678d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 679d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolst_stat_query_ioctl(lstio_stat_args_t *args) 680d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 681d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int rc; 682d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *name; 683d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 684d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao /* TODO: not finished */ 685d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_sta_key != console_session.ses_key) 686d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EACCES; 687d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 688d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_sta_resultp == NULL || 689d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao (args->lstio_sta_namep == NULL && 690d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_sta_idsp == NULL) || 691d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_sta_nmlen <= 0 || 692d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_sta_nmlen > LST_NAME_SIZE) 693d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 694d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 695d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_sta_idsp != NULL && 696d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_sta_count <= 0) 697d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 698d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 699d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_ALLOC(name, args->lstio_sta_nmlen + 1); 700d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (name == NULL) 701d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -ENOMEM; 702d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 703d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(name, args->lstio_sta_namep, 704d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_sta_nmlen)) { 705d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_sta_nmlen + 1); 706d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 707d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 708d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 709d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_sta_idsp == NULL) { 710d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_group_stat(name, args->lstio_sta_timeout, 711d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_sta_resultp); 712d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } else { 713d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lstcon_nodes_stat(args->lstio_sta_count, 714d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_sta_idsp, 715d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_sta_timeout, 716d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_sta_resultp); 717d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 718d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 719d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(name, args->lstio_sta_nmlen + 1); 720d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 721d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 722d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 723d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 724d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint lst_test_add_ioctl(lstio_test_args_t *args) 725d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 726d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata char *batch_name; 727d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata char *src_name = NULL; 728d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata char *dst_name = NULL; 729d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata void *param = NULL; 730d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata int ret = 0; 731d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata int rc = -ENOMEM; 732d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 733d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_tes_resultp == NULL || 734d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_retp == NULL || 735d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_bat_name == NULL || /* no specified batch */ 736d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_bat_nmlen <= 0 || 737d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_bat_nmlen > LST_NAME_SIZE || 738d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_sgrp_name == NULL || /* no source group */ 739d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_sgrp_nmlen <= 0 || 740d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_sgrp_nmlen > LST_NAME_SIZE || 741d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_dgrp_name == NULL || /* no target group */ 742d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_dgrp_nmlen <= 0 || 743d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_dgrp_nmlen > LST_NAME_SIZE) 744d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 745d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 746d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_tes_loop == 0 || /* negative is infinite */ 747d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_concur <= 0 || 748d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_dist <= 0 || 749d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_span <= 0) 750d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 751d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 752d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao /* have parameter, check if parameter length is valid */ 753d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_tes_param != NULL && 754d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao (args->lstio_tes_param_len <= 0 || 755d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_param_len > PAGE_CACHE_SIZE - sizeof(lstcon_test_t))) 756d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 757d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 758d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata LIBCFS_ALLOC(batch_name, args->lstio_tes_bat_nmlen + 1); 759d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata if (batch_name == NULL) 760d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 761d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 762d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata LIBCFS_ALLOC(src_name, args->lstio_tes_sgrp_nmlen + 1); 763d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata if (src_name == NULL) 764d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao goto out; 765d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 766d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata LIBCFS_ALLOC(dst_name, args->lstio_tes_dgrp_nmlen + 1); 767d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata if (dst_name == NULL) 768d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao goto out; 769d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 770d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (args->lstio_tes_param != NULL) { 771d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_ALLOC(param, args->lstio_tes_param_len); 772d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (param == NULL) 773d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao goto out; 774d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 775d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 776d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = -EFAULT; 777d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata if (copy_from_user(batch_name, args->lstio_tes_bat_name, 778d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata args->lstio_tes_bat_nmlen) || 779d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata copy_from_user(src_name, args->lstio_tes_sgrp_name, 780d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata args->lstio_tes_sgrp_nmlen) || 781d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata copy_from_user(dst_name, args->lstio_tes_dgrp_name, 782d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata args->lstio_tes_dgrp_nmlen) || 783d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao copy_from_user(param, args->lstio_tes_param, 784d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_param_len)) 785d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao goto out; 786d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 787d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata rc = lstcon_test_add(batch_name, 788d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_type, 789d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_loop, 790d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_concur, 791d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao args->lstio_tes_dist, args->lstio_tes_span, 792d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata src_name, dst_name, param, 793d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata args->lstio_tes_param_len, 794d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao &ret, args->lstio_tes_resultp); 795d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 796d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (ret != 0) 797d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = (copy_to_user(args->lstio_tes_retp, &ret, 798d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao sizeof(ret))) ? -EFAULT : 0; 799d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoout: 800d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata if (batch_name != NULL) 801d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata LIBCFS_FREE(batch_name, args->lstio_tes_bat_nmlen + 1); 802d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 803d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata if (src_name != NULL) 804d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata LIBCFS_FREE(src_name, args->lstio_tes_sgrp_nmlen + 1); 805d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 806d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata if (dst_name != NULL) 807d75e265bd87a34174198fe8ebf15030919e6ad5eAmir Shehata LIBCFS_FREE(dst_name, args->lstio_tes_dgrp_nmlen + 1); 808d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 809d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (param != NULL) 810d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(param, args->lstio_tes_param_len); 811d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 812d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 813d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 814d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 815d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint 816d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taolstcon_ioctl_entry(unsigned int cmd, struct libcfs_ioctl_data *data) 817d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 818d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *buf; 819d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int opc = data->ioc_u32[0]; 820d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int rc; 821d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 822d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (cmd != IOC_LIBCFS_LNETST) 823d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 824d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 825d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (data->ioc_plen1 > PAGE_CACHE_SIZE) 826d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EINVAL; 827d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 828d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_ALLOC(buf, data->ioc_plen1); 829d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (buf == NULL) 830d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -ENOMEM; 831d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 832d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao /* copy in parameter */ 833d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_from_user(buf, data->ioc_pbuf1, data->ioc_plen1)) { 834d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(buf, data->ioc_plen1); 835d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return -EFAULT; 836d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 837d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 838d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao mutex_lock(&console_session.ses_mutex); 839d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 8407264b8a5db30b717b39394234fd3bb7dabdbda92Greg Kroah-Hartman console_session.ses_laststamp = get_seconds(); 841d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 842d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (console_session.ses_shutdown) { 843d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = -ESHUTDOWN; 844d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao goto out; 845d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 846d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 847d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (console_session.ses_expired) 848d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lstcon_session_end(); 849d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 850d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (opc != LSTIO_SESSION_NEW && 851d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao console_session.ses_state == LST_SESSION_NONE) { 852d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao CDEBUG(D_NET, "LST no active session\n"); 853d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = -ESRCH; 854d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao goto out; 855d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 856d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 857d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao memset(&console_session.ses_trans_stat, 0, sizeof(lstcon_trans_stat_t)); 858d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 859d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao switch (opc) { 860d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_SESSION_NEW: 861d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_session_new_ioctl((lstio_session_new_args_t *)buf); 862d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 863d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_SESSION_END: 864d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_session_end_ioctl((lstio_session_end_args_t *)buf); 865d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 866d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_SESSION_INFO: 867d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_session_info_ioctl((lstio_session_info_args_t *)buf); 868d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 869d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_DEBUG: 870d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_debug_ioctl((lstio_debug_args_t *)buf); 871d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 872d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_GROUP_ADD: 873d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_group_add_ioctl((lstio_group_add_args_t *)buf); 874d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 875d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_GROUP_DEL: 876d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_group_del_ioctl((lstio_group_del_args_t *)buf); 877d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 878d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_GROUP_UPDATE: 879d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_group_update_ioctl((lstio_group_update_args_t *)buf); 880d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 881d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_NODES_ADD: 882d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_nodes_add_ioctl((lstio_group_nodes_args_t *)buf); 883d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 884d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_GROUP_LIST: 885d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_group_list_ioctl((lstio_group_list_args_t *)buf); 886d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 887d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_GROUP_INFO: 888d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_group_info_ioctl((lstio_group_info_args_t *)buf); 889d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 890d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_BATCH_ADD: 891d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_batch_add_ioctl((lstio_batch_add_args_t *)buf); 892d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 893d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_BATCH_START: 894d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_batch_run_ioctl((lstio_batch_run_args_t *)buf); 895d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 896d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_BATCH_STOP: 897d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_batch_stop_ioctl((lstio_batch_stop_args_t *)buf); 898d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 899d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_BATCH_QUERY: 900d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_batch_query_ioctl((lstio_batch_query_args_t *)buf); 901d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 902d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_BATCH_LIST: 903d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_batch_list_ioctl((lstio_batch_list_args_t *)buf); 904d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 905d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_BATCH_INFO: 906d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_batch_info_ioctl((lstio_batch_info_args_t *)buf); 907d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 908d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_TEST_ADD: 909d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_test_add_ioctl((lstio_test_args_t *)buf); 910d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 911d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao case LSTIO_STAT_QUERY: 912d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = lst_stat_query_ioctl((lstio_stat_args_t *)buf); 913d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao break; 914d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao default: 915d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = -EINVAL; 916d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 917d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 918d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (copy_to_user(data->ioc_pbuf2, &console_session.ses_trans_stat, 919d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao sizeof(lstcon_trans_stat_t))) 920d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao rc = -EFAULT; 921d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoout: 922d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao mutex_unlock(&console_session.ses_mutex); 923d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 924d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(buf, data->ioc_plen1); 925d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 926d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return rc; 927d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 928d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 929d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng TaoEXPORT_SYMBOL(lstcon_ioctl_entry); 930