command_t cmdlist[] = {
/* Metacommands */
- {"--device", jt_opt_device, 0, "--device <devno> <command [args ...]>"},
+ {"--device", jt_opt_device, 0,
+ "run <command> after connecting to device <devno>\n"
+ "--device <devno> <command [args ...]>"},
{"--threads", jt_opt_threads, 0,
- "--threads <threads> <devno> <command [args ...]>"},
+ "run <threads> separate instances of <command> on device <devno>\n"
+ "--threads <threads> <devno> <command [args ...]>"},
/* Network configuration commands */
{"==== network config ====", jt_noop, 0, "network config"},
"usage: newdev"},
#if 0
{"uuid2dev", jt_obd_uuid2dev, 0,
- "find a uuid and make it the current device\n"
+ "find device attached with <uuid> and make it the current device\n"
"usage: uuid2dev <uuid>"},
#endif
{"name2dev", jt_obd_name2dev, 0,
- "find a name and make it the current device\n"
+ "find device attached with <name> and make it the current device\n"
"usage: name2dev <name>"},
- {"device", jt_obd_device, 0, "set current device to devno\n"
+ {"device", jt_obd_device, 0, "set current device to <devno>\n"
"usage: device <devno>"},
{"device_list", jt_obd_list, 0, "show all devices\n"
"usage: device_list"},
/* Device configuration commands */
{"==== device config =====", jt_noop, 0, "device config"},
- {"attach", jt_obd_attach, 0, "name and type the device\n"
+ {"attach", jt_obd_attach, 0,
+ "set the type of the current device (with <name> and <uuid>)\n"
"usage: attach type [name [uuid]]"},
{"setup", jt_obd_setup, 0,
"type specific device configuration information\n"
"usage: setup <args...>"},
- {"cleanup", jt_obd_cleanup, 0, "cleanup setup\n"
+ {"cleanup", jt_obd_cleanup, 0, "cleanup previously setup device\n"
"usage: cleanup"},
- {"detach", jt_obd_detach, 0, "un-name a device\n"
+ {"detach", jt_obd_detach, 0,
+ "remove driver (and name and uuid) from current device\n"
"usage: detach"},
{"lovconfig", jt_obd_lov_config, 0,
"write lov configuration to an mds device\n"
/* Device operations */
{"=== device operations ==", jt_noop, 0, "device operations"},
{"probe", jt_obd_connect, 0,
- "build a connection handle to a device. This command is used too "
+ "build a connection handle to a device. This command is used to "
"suspend configuration until lctl has ensured that the mds and osc "
"services are available. This is to avoid mount failures in a "
- "rebooting cluster.\n"
+ "rebooting cluster. k\n"
"usage: probe [<timeout]"},
{"close", jt_obd_disconnect, 0, "close the connection handle\n"
"usage: close"},
- {"getattr", jt_obd_getattr, 0, "get attribute for id\n"
- "usage: getattr <id>"},
- {"setattr", jt_obd_setattr, 0, "set attribute for id\n"
- "usage: setattr <id> <mode>"},
- {"test_getattr", jt_obd_test_getattr, 0,
- "perform count number of getattr's\n"
- "usage: test_getattr <count> [verbose]"},
+ {"getattr", jt_obd_getattr, 0, "get attribute for OST object <objid>\n"
+ "usage: getattr <objid>"},
+ {"setattr", jt_obd_setattr, 0, "set attribute for OST object <objid>\n"
+ "usage: setattr <objid> <mode>"},
+ {"create", jt_obd_create, 0, "create <num> OST objects (with <mode>)\n"
+ "create [num [mode [verbose]]]"},
+ {"destroy", jt_obd_destroy, 0, "destroy OST object <objid>"},
+ {"test_getattr", jt_obd_test_getattr, 0, "perform <num> OST getattr's\n"
+ "usage: test_getattr <num> [verbose]"},
{"test_brw", jt_obd_test_brw, 0,
- "perform count number of bulk read/writes\n"
- "usage: test_brw <count> [write [verbose [pages [objid]]]]"},
+ "do <num> bulk read/writes (<npages> per I/O, on OST object <objid>)\n"
+ "usage: test_brw <num> [write [verbose [npages [objid]]]]"},
{"test_ldlm", jt_obd_test_ldlm, 0, "perform lock manager test\n"
"usage: test_ldlm"},
{"ldlm_regress_start", jt_obd_ldlm_regress_start, 0,
"dump all lock manager state (no args)"},
#if 0
- {"create", jt_create, 0, "create [count [mode [verbose]]]"},
- {"destroy", jt_destroy, 0, "destroy <id>"},
{"newconn", jt_newconn, 0, "newconn [newuuid]"},
#endif
/* Debug commands */
* Copyright (C) 2002 Cluster File Systems, Inc.
* Author: Peter J. Braam <braam@clusterfs.com>
* Author: Phil Schwan <phil@clusterfs.com>
- * Author: Robert Read <rread@clusterfs.com>
+ * Author: Andreas Dilger <adilger@clusterfs.com>
+ * Author: Robert Read <rread@clusterfs.com>
*
* This file is part of Lustre, http://www.lustre.org.
*
return data.ioc_dev + N2D_OFF;
}
-/*
+/*
* resolve a device name to a device number.
- * supports a number or name.
- * FIXME: support UUID
+ * supports a number or name.
+ * FIXME: support UUID
*/
-static int parse_devname(char * func, char *name)
+static int parse_devname(char * func, char *name)
{
int rc;
int ret = -1;
- if (!name)
+ if (!name)
return ret;
if (name[0] == '$') {
rc = do_name2dev(func, name + 1);
fprintf(stderr, "error: %s: %s: %s\n", cmdname(func),
name, "device not found");
}
-
} else
ret = strtoul(name, NULL, 0);
+
return ret;
}
int rc, dev;
do_disconnect(argv[0], 1);
- if (argc != 2)
+ if (argc != 2)
return CMD_HELP;
dev = parse_devname(argv[0], argv[1]);
- if (dev < 0) {
- return -1;
- }
+ if (dev < 0)
+ return -1;
rc = do_device(argv[0], dev);
if (rc < 0)
do_disconnect(argv[0], 1);
+#warning Robert: implement timeout per lctl usage for probe
if (argc != 1)
return CMD_HELP;
IOCINIT(data);
- if (argc != 1)
+ if (argc != 1)
return CMD_HELP;
if (obd_ioctl_pack(&data, &buf, max)) {
IOCINIT(data);
- if (argc != 1)
+ if (argc != 1)
return CMD_HELP;
rc = ioctl(fd, OBD_IOC_CLEANUP, &data);
IOCINIT(data);
- if (argc != 1)
+ if (argc != 1)
return CMD_HELP;
rc = ioctl(fd, OBD_IOC_NEWDEV, &data);
data->ioc_len = sizeof(buf);
data->ioc_inllen1 = sizeof(buf) - size_round(sizeof(*data));
- if (argc != 1)
+ if (argc != 1)
return CMD_HELP;
rc = ioctl(fd, OBD_IOC_LIST, data);
IOCINIT(data);
- if (argc != 2 && argc != 3 && argc != 4)
+ if (argc != 2 && argc != 3 && argc != 4)
return CMD_HELP;
data.ioc_inllen1 = strlen(argv[1]) + 1;
int jt_obd_name2dev(int argc, char **argv)
{
int rc;
- if (argc != 2)
+
+ if (argc != 2)
return CMD_HELP;
rc = do_name2dev(argv[0], argv[1]);
IOCINIT(data);
- if (argc > 3)
+ if (argc > 3)
return CMD_HELP;
data.ioc_dev = -1;
struct obd_ioctl_data data;
struct timeval next_time;
int count = 1, next_count;
- int verbose;
+ int verbose = 1;
int rc = 0, i;
IOCINIT(data);
- if (argc < 2 || argc > 4) {
- fprintf(stderr, "usage: %s num [mode] [verbose]\n",
- cmdname(argv[0]));
- return -1;
- }
+ if (argc < 2 || argc > 4)
+ return CMD_HELP;
+
count = strtoul(argv[1], NULL, 0);
if (argc > 2)
data.ioc_obdo1.o_mode = 0100644;
data.ioc_obdo1.o_valid = OBD_MD_FLMODE;
- verbose = get_verbose(argv[3]);
+ if (argc > 3)
+ verbose = get_verbose(argv[3]);
- printf("%s: %d obdos\n", cmdname(argv[0]), count);
+ printf("%s: %d objects\n", cmdname(argv[0]), count);
gettimeofday(&next_time, NULL);
next_time.tv_sec -= verbose;
int rc;
IOCINIT(data);
- if (argc != 2) {
- fprintf(stderr, "usage: %s id\n", cmdname(argv[0]));
- return -1;
- }
+ if (argc != 2)
+ return CMD_HELP;
data.ioc_obdo1.o_id = strtoul(argv[1], NULL, 0);
data.ioc_obdo1.o_mode = S_IFREG | 0644;
struct obd_ioctl_data data;
int rc;
- if (argc != 2)
+ if (argc != 2)
return CMD_HELP;
IOCINIT(data);
int len;
int rc = 0;
- if (argc < 2 || argc > 6)
+ if (argc < 2 || argc > 6)
return CMD_HELP;
count = strtoul(argv[1], NULL, 0);
strcpy(desc.ld_uuid, argv[1]);
desc.ld_default_stripe_count = strtoul(argv[2], NULL, 0);
desc.ld_default_stripe_size = strtoul(argv[3], NULL, 0);
- desc.ld_default_stripe_offset = (__u64) strtoul(argv[4], NULL, 0);
+ desc.ld_default_stripe_offset = (__u64) strtoul(argv[4], NULL, 0);
desc.ld_pattern = strtoul(argv[5], NULL, 0);
desc.ld_tgt_count = argc - 6;
int rc;
IOCINIT(data);
- if (argc != 1)
+ if (argc != 1)
return CMD_HELP;
rc = ioctl(fd, IOC_LDLM_TEST, &data);
int rc;
IOCINIT(data);
- if (argc != 1) {
- fprintf(stderr, "usage: %s\n", cmdname(argv[0]));
- return 1;
- }
+ if (argc != 1)
+ return CMD_HELP;
rc = ioctl(fd, IOC_LDLM_DUMP, &data);
if (rc)
IOCINIT(data);
- if (argc > 2) {
- fprintf(stderr, "usage: %s [numthreads]\n", cmdname(argv[0]));
- return 1;
- } else if (argc == 2) {
+ if (argc > 2)
+ return CMD_HELP;
+
+ if (argc == 2) {
data.ioc_inllen1 = strlen(argv[1]) + 1;
data.ioc_inlbuf1 = argv[1];
} else {
struct obd_ioctl_data data;
IOCINIT(data);
- if (argc != 1) {
- fprintf(stderr, "usage: %s\n", cmdname(argv[0]));
- return 1;
- }
+ if (argc != 1)
+ return CMD_HELP;
rc = ioctl(fd, IOC_LDLM_REGRESS_STOP, &data);
struct obd_ioctl_data data;
IOCINIT(data);
- if (argc != 1)
+ if (argc != 1)
return CMD_HELP;
rc = ioctl(fd, OBD_IOC_RECOVD_NEWCONN, &data);
fprintf(stderr, "%s: got signal %d\n", cmdname("sigint"), sig);
}
-int obd_initialize(int argc, char **argv)
+int obd_initialize(int argc, char **argv)
{
SHMEM_SETUP();
return 0;
}
-void obd_cleanup(int argc, char **argv)
+void obd_cleanup(int argc, char **argv)
{
struct sigaction sigact;