"create <num> OST objects (with <mode>)\n"
"usage: create [num [mode [verbose]]]"},
{"destroy", jt_obd_destroy, 0,
- "destroy OST object <objid>\n"
- "usage: destroy <objid>"},
+ "destroy OST object <objid> [num [verbose]]\n"
+ "usage: destroy <num> objects, starting at objid <objid>"},
{"test_getattr", jt_obd_test_getattr, 0,
"do <num> getattrs (on OST object <objid> (objid+1 on each thread))\n"
"usage: test_getattr <num> [verbose [[t]objid]]"},
int jt_obd_destroy(int argc, char **argv)
{
struct obd_ioctl_data data;
+ struct timeval next_time;
+ __u64 count = 1, next_count;
+ int verbose = 1;
+ __u64 id;
char *end;
- int rc;
+ int rc = 0, i;
IOCINIT(data);
- if (argc != 2)
+ if (argc < 2 || argc > 4)
return CMD_HELP;
- data.ioc_obdo1.o_id = strtoull(argv[1], &end, 0);
+ id = strtoull(argv[1], &end, 0);
if (*end) {
fprintf(stderr, "error: %s: invalid objid '%s'\n",
cmdname(argv[0]), argv[1]);
return CMD_HELP;
}
- data.ioc_obdo1.o_mode = S_IFREG | 0644;
+ if (argc > 2) {
+ count = strtoull(argv[2], &end, 0);
+ if (*end) {
+ fprintf(stderr,
+ "error: %s: invalid iteration count '%s'\n",
+ cmdname(argv[0]), argv[2]);
+ return CMD_HELP;
+ }
+ }
- rc = ioctl(fd, OBD_IOC_DESTROY, &data);
- if (rc < 0)
- fprintf(stderr, "error: %s: %s\n", cmdname(argv[0]),
- strerror(rc = errno));
+ if (argc > 3) {
+ verbose = get_verbose(argv[0], argv[3]);
+ if (verbose == BAD_VERBOSE)
+ return CMD_HELP;
+ }
+
+ printf("%s: "LPD64" objects\n", cmdname(argv[0]), count);
+ gettimeofday(&next_time, NULL);
+ next_time.tv_sec -= verbose;
+
+ for (i = 1, next_count = verbose; i <= count; i++, id++) {
+ data.ioc_obdo1.o_id = id;
+ data.ioc_obdo1.o_mode = S_IFREG | 0644;
+
+ rc = ioctl(fd, OBD_IOC_DESTROY, &data);
+ SHMEM_BUMP();
+ if (rc < 0) {
+ fprintf(stderr, "error: %s: objid "LPX64": %s\n",
+ cmdname(argv[0]), id, strerror(rc = errno));
+ break;
+ }
+
+ if (be_verbose(verbose, &next_time, i, &next_count, count))
+ printf("%s: #%d is object id 0x%Lx\n", cmdname(argv[0]),
+ i, (long long)data.ioc_obdo1.o_id);
+ }
return rc;
}
/* Session operations */
{"create", jt_obd_create, 0, "create [count [mode [verbose]]]"},
- {"destroy", jt_obd_destroy, 0, "destroy <id>"},
+ {"destroy", jt_obd_destroy, 0, "destroy <id> [count [verbose]]"},
{"getattr", jt_obd_getattr, 0, "getattr <id>"},
{"setattr", jt_obd_setattr, 0, "setattr <id> <mode>"},
{"newconn", jt_obd_newconn, 0, "newconn <olduuid> [newuuid]"},