#include <linux/lustre/lustre_barrier_user.h>
#endif
#include <linux/lustre/lustre_cfg.h>
+#include <linux/lustre/lustre_disk.h>
#include <linux/lustre/lustre_ioctl.h>
#include <linux/lustre/lustre_ostid.h>
#include <linux/lustre/lustre_param.h>
return rc;
}
-int jt_obd_abort_recovery(int argc, char **argv)
+static int obd_abort_recovery(char *cmd, enum obd_abort_recovery_flags flags)
{
- struct obd_ioctl_data data;
+ struct obd_ioctl_data data = {
+ .ioc_dev = cur_device,
+ .ioc_type = flags,
+ };
char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf;
int rc;
- memset(&data, 0, sizeof(data));
- data.ioc_dev = cur_device;
-
- if (argc != 1)
- return CMD_HELP;
-
memset(buf, 0, sizeof(rawbuf));
rc = llapi_ioctl_pack(&data, &buf, sizeof(rawbuf));
if (rc) {
fprintf(stderr, "error: %s: invalid ioctl\n",
- jt_cmdname(argv[0]));
+ jt_cmdname(cmd));
return rc;
}
rc = l_ioctl(OBD_DEV_ID, OBD_IOC_ABORT_RECOVERY, buf);
if (rc < 0)
- fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]),
+ fprintf(stderr, "error: %s: %s\n", jt_cmdname(cmd),
strerror(rc = errno));
return rc;
}
+int jt_obd_abort_recovery(int argc, char **argv)
+{
+ if (argc != 1)
+ return CMD_HELP;
+
+ return obd_abort_recovery(argv[0], OBD_FLG_ABORT_RECOV_OST);
+}
+
+int jt_obd_abort_recovery_mdt(int argc, char **argv)
+{
+ if (argc != 1)
+ return CMD_HELP;
+
+ return obd_abort_recovery(argv[0], OBD_FLG_ABORT_RECOV_MDT);
+}
+
int jt_get_version(int argc, char **argv)
{
char version[128];
return rc;
}
+enum llog_default_dev_op {
+ LLOG_DFLT_MGS_SET = 0,
+ LLOG_DFLT_DEV_RESET
+};
+
+static int llog_default_device(enum llog_default_dev_op op)
+{
+ int rc = 0;
+ static int dflt_dev = -1;
+
+ if (op == LLOG_DFLT_MGS_SET && (cur_device == -1)) {
+ char mgs[] = "$MGS";
+
+ rc = do_device("llog_default_device", mgs);
+ dflt_dev = cur_device;
+
+ } else if (op == LLOG_DFLT_DEV_RESET && (dflt_dev != -1)) {
+ do_disconnect(NULL, 1);
+ dflt_dev = -1;
+ }
+
+ return rc;
+}
+
int jt_llog_catlist(int argc, char **argv)
{
struct obd_ioctl_data data;
char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf;
+ char *tmp = NULL;
+ int start = 0;
int rc;
if (argc != 1)
return CMD_HELP;
- memset(&data, 0, sizeof(data));
- data.ioc_dev = cur_device;
- data.ioc_inllen1 = sizeof(rawbuf) - __ALIGN_KERNEL(sizeof(data), 8);
- memset(buf, 0, sizeof(rawbuf));
- rc = llapi_ioctl_pack(&data, &buf, sizeof(rawbuf));
- if (rc) {
- fprintf(stderr, "error: %s: invalid ioctl\n",
- jt_cmdname(argv[0]));
- return rc;
- }
- rc = l_ioctl(OBD_DEV_ID, OBD_IOC_CATLOGLIST, buf);
- if (rc == 0)
- fprintf(stdout, "%s", ((struct obd_ioctl_data *)buf)->ioc_bulk);
- else
+ if (llog_default_device(LLOG_DFLT_MGS_SET))
+ return CMD_INCOMPLETE;
+
+ do {
+ memset(&data, 0, sizeof(data));
+ data.ioc_dev = cur_device;
+ data.ioc_inllen1 = sizeof(rawbuf) -
+ __ALIGN_KERNEL(sizeof(data), 8);
+ data.ioc_count = start;
+ memset(buf, 0, sizeof(rawbuf));
+ rc = llapi_ioctl_pack(&data, &buf, sizeof(rawbuf));
+ if (rc) {
+ fprintf(stderr, "error: %s: invalid ioctl\n",
+ jt_cmdname(argv[0]));
+ goto err;
+ }
+ rc = l_ioctl(OBD_DEV_ID, OBD_IOC_CATLOGLIST, buf);
+ if (rc < 0)
+ break;
+ tmp = ((struct obd_ioctl_data *)buf)->ioc_bulk;
+ if (strlen(tmp) > 0)
+ fprintf(stdout, "%s", tmp);
+ else
+ break;
+ start = ((struct obd_ioctl_data *)buf)->ioc_count;
+ } while (start);
+
+ if (rc < 0)
fprintf(stderr, "OBD_IOC_CATLOGLIST failed: %s\n",
strerror(errno));
+err:
+ llog_default_device(LLOG_DFLT_DEV_RESET);
+
return rc;
}
return CMD_HELP;
}
+ /* Manage default device */
+ if (llog_default_device(LLOG_DFLT_MGS_SET))
+ return CMD_INCOMPLETE;
+
data.ioc_dev = cur_device;
data.ioc_inllen1 = strlen(catalog) + 1;
data.ioc_inlbuf1 = catalog;
if (rc) {
fprintf(stderr, "%s: ioctl_pack failed for catalog '%s': %s\n",
jt_cmdname(cmd), catalog, strerror(-rc));
- return rc;
+ goto err;
}
rc = l_ioctl(OBD_DEV_ID, OBD_IOC_LLOG_INFO, buf);
fprintf(stderr, "%s: OBD_IOC_LLOG_INFO failed: %s\n",
jt_cmdname(cmd), strerror(errno));
+err:
+ llog_default_device(LLOG_DFLT_DEV_RESET);
+
return rc;
}
if (*argc >= 1) {
if (*catalog) {
fprintf(stderr,
- "%s: catalog is set, unknown argument '%s'\n",
+ "%s: logname is set, unknown argument '%s'\n",
cmd, (*argv)[0]);
return CMD_HELP;
}
(*argv)++;
}
+ if (*catalog == NULL) {
+ fprintf(stderr, "%s: no logname specified\n", cmd);
+ return CMD_HELP;
+ }
+
if (*argc >= 1) {
if (*start != 1) {
fprintf(stderr,
if (rc)
return rc;
+ if (llog_default_device(LLOG_DFLT_MGS_SET))
+ return CMD_INCOMPLETE;
+
rc = jt_llog_print_iter(catalog, start, end, jt_llog_print_cb,
NULL, false);
+ llog_default_device(LLOG_DFLT_DEV_RESET);
+
return rc;
}
char *cmd = argv[0];
int rc;
+ /* Manage default device */
+ if (llog_default_device(LLOG_DFLT_MGS_SET))
+ return CMD_INCOMPLETE;
+
/* Parse catalog file (in inlbuf1) and named parameters */
rc = llog_parse_catalog_log_idx(&argc, &argv, "c:hi:l:", 3, &data);
data.ioc_inlbuf3 = argv[1];
}
- if (!data.ioc_inlbuf1 || !data.ioc_inlbuf3)
+ if (!data.ioc_inlbuf1 || !data.ioc_inlbuf3) {
/* missing mandatory parameters */
- return CMD_HELP;
+ rc = CMD_HELP;
+ goto err;
+ }
rc = llapi_ioctl_pack(&data, &buf, sizeof(rawbuf));
if (rc) {
fprintf(stderr, "%s: ioctl_pack for catalog '%s' failed: %s\n",
jt_cmdname(cmd), data.ioc_inlbuf1, strerror(-rc));
- return rc;
+ goto err;
}
rc = l_ioctl(OBD_DEV_ID, OBD_IOC_LLOG_CANCEL, buf);
jt_cmdname(cmd), data.ioc_inlbuf1, data.ioc_inlbuf3,
strerror(errno));
+err:
+ llog_default_device(LLOG_DFLT_DEV_RESET);
return rc;
}
if (rc)
return rc;
+ if (llog_default_device(LLOG_DFLT_MGS_SET))
+ return CMD_INCOMPLETE;
+
if (end == -1)
end = 0x7fffffff;
if (rc) {
fprintf(stderr, "%s: ioctl_pack failed for catalog '%s': %s\n",
jt_cmdname(cmd), data.ioc_inlbuf1, strerror(-rc));
- return rc;
+ goto err;
}
rc = l_ioctl(OBD_DEV_ID, OBD_IOC_LLOG_CHECK, buf);
else
fprintf(stderr, "%s: OBD_IOC_LLOG_CHECK failed: %s\n",
jt_cmdname(cmd), strerror(errno));
+err:
+ llog_default_device(LLOG_DFLT_DEV_RESET);
return rc;
}
char *cmd = argv[0];
int rc;
+ if (llog_default_device(LLOG_DFLT_MGS_SET))
+ return CMD_INCOMPLETE;
+
rc = llog_parse_catalog_log_idx(&argc, &argv, "c:hl:", 2, &data);
if (rc)
- return rc;
+ goto err;
if (argc == 1) {
if (data.ioc_inlbuf2) {
fprintf(stderr,
"%s: --log_id is set, unknown argument '%s'\n",
jt_cmdname(cmd), argv[0]);
- return CMD_HELP;
+ rc = CMD_HELP;
+ goto err;
}
data.ioc_inllen2 = strlen(argv[0]) + 1;
data.ioc_inlbuf2 = argv[0];
}
+
rc = llapi_ioctl_pack(&data, &buf, sizeof(rawbuf));
if (rc) {
fprintf(stderr, "%s: ioctl_pack for catalog '%s' failed: %s\n",
jt_cmdname(cmd), data.ioc_inlbuf1, strerror(-rc));
- return rc;
+ goto err;
}
rc = l_ioctl(OBD_DEV_ID, OBD_IOC_LLOG_REMOVE, buf);
jt_cmdname(cmd), data.ioc_inlbuf1, data.ioc_inlbuf2,
strerror(-rc));
+err:
+ llog_default_device(LLOG_DFLT_DEV_RESET);
return rc;
}
fprintf(stderr,
"usage: nodemap_modify --name <nodemap_name> --property <property_name> --value <value>\n");
fprintf(stderr,
- "valid properties: admin trusted map_mode squash_uid squash_gid deny_unknown audit_mode\n");
+ "valid properties: admin trusted map_mode squash_uid squash_gid deny_unknown audit_mode forbid_encryption\n");
return -1;
}
cmd = LCFG_NODEMAP_MAP_MODE;
} else if (strcmp("audit_mode", param) == 0) {
cmd = LCFG_NODEMAP_AUDIT_MODE;
+ } else if (strcmp("forbid_encryption", param) == 0) {
+ cmd = LCFG_NODEMAP_FORBID_ENCRYPT;
} else {
fprintf(stderr,
"error: %s: nodemap_modify invalid subcommand: %s\n",
for (j = 0; j < array_sz; j++) {
char ostname[MAX_OBD_NAME + 1];
+ int rc2;
snprintf(ostname, MAX_OBD_NAME, format,
array[j]);
ostname[MAX_OBD_NAME] = '\0';
- rc = check_and_complete_ostname(fsname,
+ rc2 = check_and_complete_ostname(fsname,
ostname);
- if (rc) {
+ if (rc2) {
free(array);
free(cmds);
if (ostnames_buf)
free(ostnames_buf);
+ rc = rc ? rc : rc2;
goto out;
}
if (ostnames_buf) {