"delete the default striping pattern from an existing directory\n"
"usage: setstripe [--size|-s stripe_size] [--count|-c stripe_count]\n"
" [--index|-i|--offset|-o start_ost_index]\n"
"delete the default striping pattern from an existing directory\n"
"usage: setstripe [--size|-s stripe_size] [--count|-c stripe_count]\n"
" [--index|-i|--offset|-o start_ost_index]\n"
"\tstripe_size: Number of bytes on each OST (0 filesystem default)\n"
"\t Can be specified with k, m or g (in KB, MB and GB\n"
"\t respectively)\n"
"\tstripe_size: Number of bytes on each OST (0 filesystem default)\n"
"\t Can be specified with k, m or g (in KB, MB and GB\n"
"\t respectively)\n"
{"getstripe", lfs_getstripe, 0,
"To list the striping info for a given file or files in a\n"
"directory or recursively for all files in a directory tree.\n"
"usage: getstripe [--obd|-O <uuid>] [--quiet | -q] [--verbose | -v]\n"
{"getstripe", lfs_getstripe, 0,
"To list the striping info for a given file or files in a\n"
"directory or recursively for all files in a directory tree.\n"
"usage: getstripe [--obd|-O <uuid>] [--quiet | -q] [--verbose | -v]\n"
{"pool_list", lfs_poollist, 0,
"List pools or pool OSTs\n"
"usage: pool_list <fsname>[.<pool>] | <pathname>\n"},
{"pool_list", lfs_poollist, 0,
"List pools or pool OSTs\n"
"usage: pool_list <fsname>[.<pool>] | <pathname>\n"},
{"join", lfs_join, 0,
"join two lustre files into one.\n"
"obsolete, HEAD does not support it anymore.\n"},
{"join", lfs_join, 0,
"join two lustre files into one.\n"
"obsolete, HEAD does not support it anymore.\n"},
- {"osts", lfs_osts, 0, "osts"},
+ {"osts", lfs_osts, 0, "list OSTs connected to client "
+ "[for specified path only]\n" "usage: osts [path]"},
{"df", lfs_df, 0,
"report filesystem disk space usage or inodes usage"
"of each MDS and all OSDs or a batch belonging to a specific pool .\n"
{"df", lfs_df, 0,
"report filesystem disk space usage or inodes usage"
"of each MDS and all OSDs or a batch belonging to a specific pool .\n"
" -i can be used instead of --inode-softlimit/--inode-grace\n"
" -I can be used instead of --inode-hardlimit"},
{"quota", lfs_quota, 0, "Display disk usage and limits.\n"
" -i can be used instead of --inode-softlimit/--inode-grace\n"
" -I can be used instead of --inode-hardlimit"},
{"quota", lfs_quota, 0, "Display disk usage and limits.\n"
{"quotainv", lfs_quotainv, 0, "Invalidate quota data.\n"
"usage: quotainv [-u|-g] <filesystem>"},
#endif
{"quotainv", lfs_quotainv, 0, "Invalidate quota data.\n"
"usage: quotainv [-u|-g] <filesystem>"},
#endif
{"count", required_argument, 0, 'c'},
{"count", required_argument, 0, 'c'},
{"index", required_argument, 0, 'i'},
{"offset", required_argument, 0, 'o'},
{"pool", required_argument, 0, 'p'},
{"index", required_argument, 0, 'i'},
{"offset", required_argument, 0, 'o'},
{"pool", required_argument, 0, 'p'},
- {"delete", no_argument, 0, 'd'},
+ {"size", required_argument, 0, 's'},
-#if LUSTRE_VERSION < OBD_OCD_VERSION(2,1,0,0)
+#if LUSTRE_VERSION < OBD_OCD_VERSION(2,4,50,0)
- while ((c = getopt_long(argc, argv, "c:di:o:s:p:",
+ while ((c = getopt_long(argc, argv, "c:di:o:p:s:",
if (*end != '\0') {
fprintf(stderr, "error: %s: bad stripe offset '%s'\n",
argv[0], stripe_off_arg);
if (*end != '\0') {
fprintf(stderr, "error: %s: bad stripe offset '%s'\n",
argv[0], stripe_off_arg);
{"atime", required_argument, 0, 'A'},
{"ctime", required_argument, 0, 'C'},
{"atime", required_argument, 0, 'A'},
{"ctime", required_argument, 0, 'C'},
{"maxdepth", required_argument, 0, 'D'},
{"gid", required_argument, 0, 'g'},
{"group", required_argument, 0, 'G'},
{"maxdepth", required_argument, 0, 'D'},
{"gid", required_argument, 0, 'g'},
{"group", required_argument, 0, 'G'},
- {"uid", required_argument, 0, 'u'},
- {"user", required_argument, 0, 'U'},
+ {"mtime", required_argument, 0, 'M'},
{"name", required_argument, 0, 'n'},
{"name", required_argument, 0, 'n'},
/* --obd is considered as a new option. */
{"obd", required_argument, 0, 'O'},
{"ost", required_argument, 0, 'O'},
/* --obd is considered as a new option. */
{"obd", required_argument, 0, 'O'},
{"ost", required_argument, 0, 'O'},
- {"print", no_argument, 0, 'P'},
+ /* no short option for pool, p/P already used */
+ {"pool", required_argument, 0, FIND_POOL_OPT},
{"print0", no_argument, 0, 'p'},
{"print0", no_argument, 0, 'p'},
{"quiet", no_argument, 0, 'q'},
{"recursive", no_argument, 0, 'r'},
{"size", required_argument, 0, 's'},
{"type", required_argument, 0, 't'},
{"quiet", no_argument, 0, 'q'},
{"recursive", no_argument, 0, 'r'},
{"size", required_argument, 0, 's'},
{"type", required_argument, 0, 't'},
+ {"uid", required_argument, 0, 'u'},
+ {"user", required_argument, 0, 'U'},
{"verbose", no_argument, 0, 'v'},
{0, 0, 0, 0}
};
{"verbose", no_argument, 0, 'v'},
{0, 0, 0, 0}
};
- while ((c = getopt_long_only(argc,argv,"-A:C:D:g:G:M:n:PpO:qrs:t:u:U:v",
+ while ((c = getopt_long_only(argc,argv,"-A:C:D:g:G:M:n:O:Ppqrs:t:u:U:v",
static int lfs_getstripe(int argc, char **argv)
{
struct option long_opts[] = {
static int lfs_getstripe(int argc, char **argv)
{
struct option long_opts[] = {
- while (llapi_search_mounts(NULL, index++, mntdir, NULL) == 0) {
+ if (argc == 2 && !realpath(argv[1], path)) {
+ rc = -errno;
+ fprintf(stderr, "error: invalid path '%s': %s\n",
+ argv[1], strerror(-rc));
+ return rc;
+ }
+
+ while (!llapi_search_mounts(path, index++, mntdir, NULL)) {
+ /* Check if we have a mount point */
+ if (mntdir[0] == '\0')
+ continue;
+
memset(¶m, 0, sizeof(param));
rc = llapi_ostlist(mntdir, ¶m);
if (rc) {
fprintf(stderr, "error: %s: failed on %s\n",
argv[0], mntdir);
}
memset(¶m, 0, sizeof(param));
rc = llapi_ostlist(mntdir, ¶m);
if (rc) {
fprintf(stderr, "error: %s: failed on %s\n",
argv[0], mntdir);
}
printf(UUF" "CSF" "CSF" "CSF" "RSF" %-s",
uuid, tbuf, ubuf, abuf, rbuf, mntdir);
if (type)
printf(UUF" "CSF" "CSF" "CSF" "RSF" %-s",
uuid, tbuf, ubuf, abuf, rbuf, mntdir);
if (type)
/* the llapi_obd_statfs() call may have returned with
* an error, but if it filled in uuid_buf we will at
* lease use that to print out a message for that OBD.
/* the llapi_obd_statfs() call may have returned with
* an error, but if it filled in uuid_buf we will at
* lease use that to print out a message for that OBD.
- * If we didn't even fill in uuid_buf something is
- * definitely incorrect and no point in continuing. */
- if (uuid_buf.uuid[0] != '\0') {
- showdf(mntdir,&stat_buf,obd_uuid2str(&uuid_buf),
- ishow, cooked, tp->st_name, index, rc);
- } else {
- char tmp_uuid[12];
+ * If we didn't get anything in the uuid_buf, then fill
+ * it in so that we can print an error message. */
+ if (uuid_buf.uuid[0] == '\0')
+ sprintf(uuid_buf.uuid, "%s%04x",
+ tp->st_name, index);
+ showdf(mntdir,&stat_buf,obd_uuid2str(&uuid_buf),
+ ishow, cooked, tp->st_name, index, rc);
- sprintf(tmp_uuid, "%s%04x", tp->st_name, index);
- showdf(mntdir, &stat_buf, tmp_uuid,
- ishow, cooked, tp->st_name, index, rc);
- }
printf("\n");
showdf(mntdir, &sum, "filesystem summary:", ishow, cooked, NULL, 0,0);
printf("\n");
showdf(mntdir, &sum, "filesystem summary:", ishow, cooked, NULL, 0,0);
char fsname[PATH_MAX] = "", *pool_name = NULL;
struct option long_opts[] = {
{"pool", required_argument, 0, 'p'},
char fsname[PATH_MAX] = "", *pool_name = NULL;
struct option long_opts[] = {
{"pool", required_argument, 0, 'p'},
- if (optind < argc )
- path = argv[optind];
-
- if ((mntdir = malloc(PATH_MAX)) == NULL) {
- fprintf(stderr, "error: cannot allocate %d bytes\n",
- PATH_MAX);
- return -ENOMEM;
+ if (optind < argc && !realpath(argv[optind], path)) {
+ rc = -errno;
+ fprintf(stderr, "error: invalid path '%s': %s\n",
+ argv[optind], strerror(-rc));
+ return rc;
- if (path) {
- char rpath[PATH_MAX] = {'\0'};
-
- if (!realpath(path, rpath)) {
- rc = -errno;
- fprintf(stderr, "error: invalid path '%s': %s\n",
- path, strerror(-rc));
- } else {
- rc = llapi_search_mounts(rpath, 0, mntdir, fsname);
- if (rc == 0 && mntdir[0] != '\0') {
- rc = mntdf(mntdir, fsname, pool_name,
- ishow, cooked);
- printf("\n");
- }
- }
- } else {
- int index = 0;
+ while (!llapi_search_mounts(path, index++, mntdir, fsname)) {
+ /* Check if we have a mount point */
+ if (mntdir[0] == '\0')
+ continue;
- while (llapi_search_mounts(NULL, index++, mntdir, fsname)==0) {
- rc = mntdf(mntdir, fsname, pool_name,
- ishow, cooked);
- if (rc)
- break;
- printf("\n");
- fsname[0] = '\0'; /* avoid matching in next loop */
- mntdir[0] = '\0'; /* avoid matching in next loop */
- }
+ rc = mntdf(mntdir, fsname, pool_name, ishow, cooked);
+ if (rc || path[0] != '\0')
+ break;
+ fsname[0] = '\0'; /* avoid matching in next loop */
+ mntdir[0] = '\0'; /* avoid matching in next loop */
struct obd_dqblk *dqb = &qctl.qc_dqblk;
struct obd_dqinfo *dqi = &qctl.qc_dqinfo;
struct option long_opts[] = {
struct obd_dqblk *dqb = &qctl.qc_dqblk;
struct obd_dqinfo *dqi = &qctl.qc_dqinfo;
struct option long_opts[] = {
- {"user", no_argument, 0, 'u'},
- {"group", no_argument, 0, 'g'},
{"block-grace", required_argument, 0, 'b'},
{"block-grace", required_argument, 0, 'b'},
{"inode-grace", required_argument, 0, 'i'},
{"times", no_argument, 0, 't'},
{"inode-grace", required_argument, 0, 'i'},
{"times", no_argument, 0, 't'},
- while ((c = getopt_long(argc, argv, "b:i:gtu", long_opts, NULL)) != -1) {
+ while ((c = getopt_long(argc, argv, "b:gi:tu", long_opts, NULL)) != -1) {
char *mnt, *obd_type = (char *)qctl.obd_type;
struct obd_dqblk *dqb = &qctl.qc_dqblk;
struct option long_opts[] = {
char *mnt, *obd_type = (char *)qctl.obd_type;
struct obd_dqblk *dqb = &qctl.qc_dqblk;
struct option long_opts[] = {
- {"user", required_argument, 0, 'u'},
- {"group", required_argument, 0, 'g'},
{"block-softlimit", required_argument, 0, 'b'},
{"block-hardlimit", required_argument, 0, 'B'},
{"block-softlimit", required_argument, 0, 'b'},
{"block-hardlimit", required_argument, 0, 'B'},
{"inode-softlimit", required_argument, 0, 'i'},
{"inode-hardlimit", required_argument, 0, 'I'},
{"inode-softlimit", required_argument, 0, 'i'},
{"inode-hardlimit", required_argument, 0, 'I'},
- while ((c = getopt_long(argc, argv, "b:B:i:I:g:u:", long_opts, NULL)) != -1) {
+ while ((c = getopt_long(argc, argv, "b:B:g:i:I:u:", long_opts, NULL)) != -1) {
{
const char spec[] = "smhdw";
const unsigned long mult[] = {1, 60, 60*60, 24*60*60, 7*24*60*60};
unsigned long c;
{
const char spec[] = "smhdw";
const unsigned long mult[] = {1, 60, 60*60, 24*60*60, 7*24*60*60};
unsigned long c;
+static void sec2str(time_t seconds, char *buf, int rc)
+{
+ char *tail = buf;
+
+ if (rc)
+ *tail++ = '[';
+
+ tail = __sec2str(seconds, tail);
+
+ if (rc && tail - buf < 39) {
+ *tail++ = ']';
+ *tail++ = 0;
+ }
+}
- sec2str(qctl->qc_dqinfo.dqi_bgrace, bgtimebuf);
- sec2str(qctl->qc_dqinfo.dqi_igrace, igtimebuf);
+ sec2str(qctl->qc_dqinfo.dqi_bgrace, bgtimebuf, rc);
+ sec2str(qctl->qc_dqinfo.dqi_igrace, igtimebuf, rc);