X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Futils%2Fobd.c;h=53f2fc52496cb2c57e7515b1ee5914782b0d5c12;hp=e6b9f110da1b9c245f516804d8325aca0ee82020;hb=6d33530cc018602a665fc5e724f9f64dcba421c9;hpb=4ac1f95a3b5311d40947b4b7d8bb5035c81af318 diff --git a/lustre/utils/obd.c b/lustre/utils/obd.c index e6b9f11..53f2fc5 100644 --- a/lustre/utils/obd.c +++ b/lustre/utils/obd.c @@ -3584,31 +3584,50 @@ out: int jt_get_obj_version(int argc, char **argv) { - struct lu_fid fid; - struct obd_ioctl_data data; - __u64 version; - char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf, *fidstr; - int rc; + struct lu_fid fid; + struct obd_ioctl_data data; + __u64 version, id = ULLONG_MAX, group = ULLONG_MAX; + char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf, *fidstr; + int rc, c; + + while ((c = getopt(argc, argv, "i:g:")) != -1) { + switch (c) { + case 'i': + id = strtoull(optarg, NULL, 0); + break; + case 'g': + group = strtoull(optarg, NULL, 0); + break; + default: + return CMD_HELP; + } + } - if (argc != 2) - return CMD_HELP; + argc -= optind; + argv += optind; - fidstr = argv[1]; - while (*fidstr == '[') - fidstr++; - sscanf(fidstr, SFID, RFID(&fid)); - if (!fid_is_sane(&fid)) { - fprintf(stderr, "bad FID format [%s], should be "DFID"\n", - fidstr, (__u64)1, 2, 0); - return -EINVAL; - } + if (!(id != ULLONG_MAX && group != ULLONG_MAX && argc == 0) && + !(id == ULLONG_MAX && group == ULLONG_MAX && argc == 1)) + return CMD_HELP; - memset(&data, 0, sizeof data); - data.ioc_dev = cur_device; - data.ioc_inlbuf1 = (char *) &fid; - data.ioc_inllen1 = sizeof fid; - data.ioc_inlbuf2 = (char *) &version; - data.ioc_inllen2 = sizeof version; + memset(&data, 0, sizeof data); + data.ioc_dev = cur_device; + if (argc == 1) { + fidstr = *argv; + while (*fidstr == '[') + fidstr++; + sscanf(fidstr, SFID, RFID(&fid)); + + data.ioc_inlbuf1 = (char *) &fid; + data.ioc_inllen1 = sizeof fid; + } else { + data.ioc_inlbuf3 = (char *) &id; + data.ioc_inllen3 = sizeof id; + data.ioc_inlbuf4 = (char *) &group; + data.ioc_inllen4 = sizeof group; + } + data.ioc_inlbuf2 = (char *) &version; + data.ioc_inllen2 = sizeof version; memset(buf, 0, sizeof *buf); rc = obd_ioctl_pack(&data, &buf, sizeof rawbuf);