From b561e5d1be7aaa84ac8580c5cfd082a3c4ff96bc Mon Sep 17 00:00:00 2001 From: adilger Date: Tue, 3 Sep 2002 19:09:37 +0000 Subject: [PATCH] Allow specifying an objid for test_getattr, the same as with test_brw. This should allow us to work with BA OSTs. Re-set the objid and o_valid for each test_getattr/test_brw Use strtoull() for getting objids, to allow 64-bit objids from BA OSTs. --- lustre/utils/obd.c | 52 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/lustre/utils/obd.c b/lustre/utils/obd.c index a639844..248e89c 100644 --- a/lustre/utils/obd.c +++ b/lustre/utils/obd.c @@ -771,6 +771,7 @@ int jt_obd_create(int argc, char **argv) struct timeval next_time; int count = 1, next_count; int verbose = 1; + int mode = 0100644; int rc = 0, i; char *end; @@ -786,15 +787,13 @@ int jt_obd_create(int argc, char **argv) } if (argc > 2) { - data.ioc_obdo1.o_mode = strtoul(argv[2], &end, 0); + mode = strtoul(argv[2], &end, 0); if (*end) { fprintf(stderr, "error: %s: invalid mode '%s'\n", cmdname(argv[0]), argv[2]); return CMD_HELP; } - } else - data.ioc_obdo1.o_mode = 0100644; - data.ioc_obdo1.o_valid = OBD_MD_FLMODE; + } if (argc > 3) { verbose = get_verbose(argv[0], argv[3]); @@ -807,6 +806,9 @@ int jt_obd_create(int argc, char **argv) next_time.tv_sec -= verbose; for (i = 1, next_count = verbose; i <= count; i++) { + data.ioc_obdo1.o_mode = mode; + data.ioc_obdo1.o_valid = OBD_MD_FLMODE; + rc = ioctl(fd, OBD_IOC_CREATE, &data); SHMEM_BUMP(); if (rc < 0) { @@ -814,9 +816,16 @@ int jt_obd_create(int argc, char **argv) cmdname(argv[0]), i, strerror(rc = errno)); break; } + if (!(data.ioc_obdo1.o_valid & OBD_MD_FLID)) { + fprintf(stderr, "error: %s: objid not valid #%d:%08x\n", + cmdname(argv[0]), i, data.ioc_obdo1.o_valid); + rc = EINVAL; + break; + } + if (be_verbose(verbose, &next_time, i, &next_count, count)) printf("%s: #%d is object id %Ld\n", cmdname(argv[0]), - i, data.ioc_obdo1.o_id); + i, (long long)data.ioc_obdo1.o_id); } return rc; } @@ -831,7 +840,7 @@ int jt_obd_setattr(int argc, char **argv) if (argc != 2) return CMD_HELP; - data.ioc_obdo1.o_id = strtoul(argv[1], &end, 0); + data.ioc_obdo1.o_id = strtoull(argv[1], &end, 0); if (*end) { fprintf(stderr, "error: %s: invalid objid '%s'\n", cmdname(argv[0]), argv[1]); @@ -843,7 +852,7 @@ int jt_obd_setattr(int argc, char **argv) cmdname(argv[0]), argv[2]); return CMD_HELP; } - data.ioc_obdo1.o_valid = OBD_MD_FLMODE; + data.ioc_obdo1.o_valid = OBD_MD_FLID | OBD_MD_FLMODE; rc = ioctl(fd, OBD_IOC_SETATTR, &data); if (rc < 0) @@ -863,7 +872,7 @@ int jt_obd_destroy(int argc, char **argv) if (argc != 2) return CMD_HELP; - data.ioc_obdo1.o_id = strtoul(argv[1], &end, 0); + data.ioc_obdo1.o_id = strtoull(argv[1], &end, 0); if (*end) { fprintf(stderr, "error: %s: invalid objid '%s'\n", cmdname(argv[0]), argv[1]); @@ -916,11 +925,12 @@ int jt_obd_test_getattr(int argc, char **argv) struct obd_ioctl_data data; struct timeval start, next_time; int i, count, next_count; - int verbose; + int verbose = 1; + obd_id id = 3; char *end; int rc = 0; - if (argc != 2 && argc != 3) + if (argc < 2 && argc > 4) return CMD_HELP; IOCINIT(data); @@ -931,15 +941,21 @@ int jt_obd_test_getattr(int argc, char **argv) return CMD_HELP; } - if (argc == 3) { + if (argc >= 3) { verbose = get_verbose(argv[0], argv[2]); if (verbose == BAD_VERBOSE) return CMD_HELP; - } else - verbose = 1; + } + + if (argc >= 4) { + id = strtoull(argv[3], &end, 0); + if (*end) { + fprintf(stderr, "error: %s: invalid objid '%s'\n", + cmdname(argv[0]), argv[3]); + return CMD_HELP; + } + } - data.ioc_obdo1.o_valid = 0xffffffff; - data.ioc_obdo1.o_id = 2; gettimeofday(&start, NULL); next_time.tv_sec = start.tv_sec - verbose; next_time.tv_usec = start.tv_usec; @@ -948,6 +964,8 @@ int jt_obd_test_getattr(int argc, char **argv) cmdname(argv[0]), count, ctime(&start.tv_sec)); for (i = 1, next_count = verbose; i <= count; i++) { + data.ioc_obdo1.o_id = id; + data.ioc_obdo1.o_valid = 0xffffffff; rc = ioctl(fd, OBD_IOC_GETATTR, &data); SHMEM_BUMP(); if (rc < 0) { @@ -1009,7 +1027,9 @@ int jt_obd_test_brw(int argc, char **argv) write = 1; else if (argv[2][0] == 'r' || argv[2][0] == '0') write = 0; + } + if (argc >= 4) { verbose = get_verbose(argv[0], argv[3]); if (verbose == BAD_VERBOSE) return CMD_HELP; @@ -1024,7 +1044,7 @@ int jt_obd_test_brw(int argc, char **argv) } } if (argc >= 6) { - objid = strtoul(argv[5], &end, 0); + objid = strtoull(argv[5], &end, 0); if (*end) { fprintf(stderr, "error: %s: bad objid '%s'\n", cmdname(argv[0]), argv[5]); -- 1.8.3.1