"qswnal", "pinger", "filter", "ptlbd",
"echo", "ldlm", "lov", "gmnal",
"router", "cobd", "ibnal", "sm",
- "asobd", "confobd", NULL};
+ "asobd", "confobd", "lmv", "cmobd",
+ "lonal", NULL};
static const char *portal_debug_masks[] =
{"trace", "inode", "super", "ext2",
"malloc", "cache", "info", "ioctl",
"blocks", "net", "warning", "buffs",
"other", "dentry", "portals", "page",
"dlmtrace", "error", "emerg", "ha",
- "rpctrace", "vfstrace", "reada", NULL};
+ "rpctrace", "vfstrace", "reada", "mmap",
+ "config", NULL};
struct debug_daemon_cmd {
char *cmd;
in = fopen(filename, "r");
if (in == NULL) {
- if (errno == ENOENT) /* no dump file created */
- return 0;
-
fprintf(stderr, "fopen(%s) failed: %s\n", filename,
strerror(errno));
return 1;
return parse_buffer(in, out);
}
+static int
+dbg_write_cmd(int fd, char *str)
+{
+ int len = strlen(str);
+ int rc = write(fd, str, len);
+
+ return (rc == len ? 0 : 1);
+}
+
const char debug_daemon_usage[] = "usage: %s {start file [MB]|stop}\n";
#define DAEMON_FILE "/proc/sys/portals/daemon_file"
int jt_dbg_debug_daemon(int argc, char **argv)
{
- int rc = 1, fd;
+ int rc;
+ int fd;
if (argc <= 1) {
fprintf(stderr, debug_daemon_usage, argv[0]);
if (fd < 0) {
fprintf(stderr, "open %s failed: %s\n", DAEMON_FILE,
strerror(errno));
- } else if (strcasecmp(argv[1], "start") == 0) {
+ return -1;
+ }
+
+ rc = -1;
+ if (strcasecmp(argv[1], "start") == 0) {
if (argc < 3 || argc > 4 ||
(argc == 4 && strlen(argv[3]) > 5)) {
fprintf(stderr, debug_daemon_usage, argv[0]);
}
if (argc == 4) {
- char size[12] = "size=";
- long sizecheck;
-
- sizecheck = strtoul(argv[3], NULL, 0);
- if (sizecheck < 10 || sizecheck > 20480) {
+ char buf[12];
+ const long min_size = 10;
+ const long max_size = 20480;
+ long size;
+ char *end;
+
+ size = strtoul(argv[3], &end, 0);
+ if (size < min_size ||
+ size > max_size ||
+ *end != 0) {
fprintf(stderr, "size %s invalid, must be in "
- "the range 20-20480 MB\n", argv[3]);
- } else {
- strncat(size, argv[3], sizeof(size) - 6);
- rc = write(fd, size, strlen(size));
- if (rc != strlen(size)) {
- fprintf(stderr, "set %s failed: %s\n",
- size, strerror(errno));
- }
+ "the range %d-%d MB\n", argv[3],
+ min_size, max_size);
+ goto out;
+ }
+
+ snprintf(buf, sizeof(buf), "size=%ld", size);
+ rc = dbg_write_cmd(fd, buf);
+ if (rc != 0) {
+ fprintf(stderr, "set %s failed: %s\n",
+ buf, strerror(errno));
+ goto out;
}
}
- rc = write(fd, argv[2], strlen(argv[2]));
- if (rc != strlen(argv[2])) {
+
+ rc = dbg_write_cmd(fd, "start");
+ if (rc != 0) {
fprintf(stderr, "start debug_daemon on %s failed: %s\n",
argv[2], strerror(errno));
goto out;
}
rc = 0;
- } else if (strcasecmp(argv[1], "stop") == 0) {
- rc = write(fd, "stop", 4);
- if (rc != 4) {
+ goto out;
+ }
+
+ if (strcasecmp(argv[1], "stop") == 0) {
+ rc = dbg_write_cmd(fd, "stop");
+ if (rc != 0) {
fprintf(stderr, "stopping debug_daemon failed: %s\n",
strerror(errno));
goto out;
}
+
rc = 0;
- } else {
- fprintf(stderr, debug_daemon_usage, argv[0]);
- rc = 1;
+ goto out;
}
+ fprintf(stderr, debug_daemon_usage, argv[0]);
+ rc = -1;
out:
close(fd);
- return 0;
+ return rc;
}
int jt_dbg_clear_debug_buf(int argc, char **argv)
{"mds", "lustre/mds"},
{"mdc", "lustre/mdc"},
{"llite", "lustre/llite"},
+ {"ldiskfs", "lustre/ldiskfs"},
{"smfs", "lustre/smfs"},
{"obdecho", "lustre/obdecho"},
{"ldlm", "lustre/ldlm"},
{"obdfilter", "lustre/obdfilter"},
{"extN", "lustre/extN"},
{"lov", "lustre/lov"},
+ {"lmv", "lustre/lmv"},
{"fsfilt_ext3", "lustre/lvfs"},
{"fsfilt_extN", "lustre/lvfs"},
{"fsfilt_reiserfs", "lustre/lvfs"},
{"ptlbd", "lustre/ptlbd"},
{"mgmt_svc", "lustre/mgmt"},
{"mgmt_cli", "lustre/mgmt"},
+ {"cobd", "lustre/cobd"},
+ {"cmobd", "lustre/cmobd"},
{"conf_obd", "lustre/obdclass"},
{NULL, NULL}
};