Whamcloud - gitweb
LU-930 utils: add --help option to lfs sub-commands 59/34659/21
authorAndreas Dilger <adilger@whamcloud.com>
Tue, 21 Jan 2020 10:29:36 +0000 (03:29 -0700)
committerOleg Drokin <green@whamcloud.com>
Mon, 21 Jun 2021 22:16:22 +0000 (22:16 +0000)
Add the "--help" and "-h" options to lfs sub-commands, and
print out an error message if an invalid argument is given.
Otherwise, it is possible to get a help message but have no
idea why the command is failing (e.g. typo in argument name).

Format the usage messages consistently, using {} to indicate a
choice between multiple required parameters, putting arguments
in [] for optional parameters, and using capitalized arguments.

Update respective man pages to list "--help|-h" option.

Remove the old SETSTRIPE and GETSTRIPE checks from spelling.txt
to avoid spurious checkpatch warnings.

Test-Parameters: trivial
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: Ic583c8161d1d5380e353f43a8613dd86c93ebbe5
Reviewed-on: https://review.whamcloud.com/34659
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Olaf Faaland-LLNL <faaland1@llnl.gov>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
contrib/scripts/spelling.txt
lustre/doc/lfs-find.1
lustre/doc/lfs-flushctx.1
lustre/doc/lfs-getdirstripe.1
lustre/doc/lfs-getname.1
lustre/doc/lfs-getstripe.1
lustre/doc/lfs-migrate.1
lustre/doc/lfs-setdirstripe.1
lustre/doc/lfs-setquota.1
lustre/doc/lfs_migrate.1
lustre/utils/lfs.c

index d04f21b..9c01dc6 100644 (file)
@@ -109,7 +109,6 @@ ERR_PTR.PTR_ERR||ERR_CAST
 from_timer||cfs_from_timer
 f_dentry||f_path.dentry
 [^_]get_seconds||ktime_get_real_seconds
 from_timer||cfs_from_timer
 f_dentry||f_path.dentry
 [^_]get_seconds||ktime_get_real_seconds
-GETSTRIPE||LFS getstripe
 kmem_cache_alloc.*GFP_ZERO||kmem_cache_zalloc
 ldebugfs_remove||debugfs_remove_recursive
 ldlm_appetite_t||enum ldlm_appetite
 kmem_cache_alloc.*GFP_ZERO||kmem_cache_zalloc
 ldebugfs_remove||debugfs_remove_recursive
 ldlm_appetite_t||enum ldlm_appetite
@@ -171,7 +170,6 @@ page_cache_release||put_page
 PAGE_CACHE_SHIFT||PAGE_SHIFT
 PAGE_CACHE_SIZE||PAGE_SIZE
 return seq_printf||seq_printf
 PAGE_CACHE_SHIFT||PAGE_SHIFT
 PAGE_CACHE_SIZE||PAGE_SIZE
 return seq_printf||seq_printf
-SETSTRIPE||LFS setstripe
 setup_timer||cfs_timer_setup
 = seq_printf||seq_printf
 sprintf||snprintf
 setup_timer||cfs_timer_setup
 = seq_printf||seq_printf
 sprintf||snprintf
index 483227e..5b42ed3 100644 (file)
@@ -5,39 +5,39 @@ lfs-find \- Lustre client utility to list files with specific attributes
 .B lfs find \fR<\fIdirectory\fR|\fIfilename \fR...>
       [[\fB!\fR] \fB--atime\fR|\fB-A\fR [\fB-+\fR]\fIn[smhdwy]\fR]
 [[\fB!\fR] \fB--blocks\fR|\fB-b\fR [\fB+-\fR]\fIn\fR]
 .B lfs find \fR<\fIdirectory\fR|\fIfilename \fR...>
       [[\fB!\fR] \fB--atime\fR|\fB-A\fR [\fB-+\fR]\fIn[smhdwy]\fR]
 [[\fB!\fR] \fB--blocks\fR|\fB-b\fR [\fB+-\fR]\fIn\fR]
-      [[\fB!\fR] \fB--btime\fR|\fB--Btime\fR|\fB-B\fR [\fB+-\fR]\fIn[smhdwy]\fR]
-      [[\fB!\fR] \fB--ctime\fR|\fB-C\fR [\fB+-\fR]\fIn[smhdwy]\fR]
+      [[\fB!\fR] \fB--btime\fR|\fB-B\fR [\fB+-\fR]\fIn[smhdwy]\fR]
+[[\fB!\fR] \fB--ctime\fR|\fB-C\fR [\fB+-\fR]\fIn[smhdwy]\fR]
       [[\fB!\fR] \fB--component-count|\fB--comp-count\fR [\fB+-\fR]\fIn\fR]
       [[\fB!\fR] \fB--component-end|\fB--comp-end\fR|\fB-E\fR [\fB+-\fR]\fIn\fR[\fBKMGTPE\fR]]
       [[\fB!\fR] \fB--component-count|\fB--comp-count\fR [\fB+-\fR]\fIn\fR]
       [[\fB!\fR] \fB--component-end|\fB--comp-end\fR|\fB-E\fR [\fB+-\fR]\fIn\fR[\fBKMGTPE\fR]]
-      [[\fB!\fR] \fB--component-flags|\fB--comp-flags\fR <[^]\fIflag\fB,\fR...>]
+      [[\fB!\fR] \fB--component-flags|\fB--comp-flags\fR [^]\fIFLAG\fB,\fR...]
       [[\fB!\fR] \fB--component-start|\fB--comp-start\fR [\fB+-\fR]\fIn\fR[\fBKMGTPE\fR]]
       [[\fB!\fR] \fB--extension-size|\fB-z\fR [\fB+-\fR]\fIn\fR[\fBKMG\fR]]
       [[\fB!\fR] \fB--component-start|\fB--comp-start\fR [\fB+-\fR]\fIn\fR[\fBKMGTPE\fR]]
       [[\fB!\fR] \fB--extension-size|\fB-z\fR [\fB+-\fR]\fIn\fR[\fBKMG\fR]]
-      [[\fB!\fR] \fB--foreign\fR [<\fItype\fR>]]
-[[\fB!\fR] \fB--gid\fR|\fB-g\fR|\fB--group\fR|\fB-G\fR <\fIgname\fR>|<\fIgid\fR>]
-      [[\fB!\fR] \fB--layout\fR|\fB-L mdt\fR,\fBraid0\fR,\fBreleased\fR]
+      [[\fB!\fR] \fB--foreign\fR [\fITYPE\fR]]
+[[\fB!\fR] \fB--gid\fR|\fB-g\fR|\fB--group\fR|\fB-G\fR \fIGNAME\fR|\fIGID\fR>]
+      [\fB--help\fR|\fB-h\fR]
+[[\fB!\fR] \fB--layout\fR|\fB-L mdt\fR,\fBraid0\fR,\fBreleased\fR]
 [\fB--lazy\fR]
       [\fB--maxdepth\fR|\fB-D\fI n\fR]
 [\fB--lazy\fR]
       [\fB--maxdepth\fR|\fB-D\fI n\fR]
-[[\fB!\fR] \fB--mdt\fR|\fB--mdt-index\fR|\fB-m\fR <\fIuuid\fR|\fIindex\fR,...>]
+[[\fB!\fR] \fB--mdt\fR|\fB--mdt-index\fR|\fB-m\fR \fIUUID\fR|\fIINDEX\fR,...]
       [[\fB!\fR] \fB--mdt-count\fR|\fB-T\fR [\fB+-\fR]\fIn\fR]
       [[\fB!\fR] \fB--mdt-count\fR|\fB-T\fR [\fB+-\fR]\fIn\fR]
-[[\fB!\fR] \fB--mdt-hash\fR|\fB-H \fR<[^]\fIhashflag\fR,[^]\fIhashtype\fR,...>]
+[[\fB!\fR] \fB--mdt-hash\fR|\fB-H \fR<[^]\fIHASHFLAG\fR,[^]\fIHASHTYPE\fR,...>]
       [[\fB!\fR] \fB--mirror-count|\fB-N\fR [\fB+-\fR]\fIn\fR]
       [[\fB!\fR] \fB--mirror-count|\fB-N\fR [\fB+-\fR]\fIn\fR]
-[[\fB!\fR] \fB--mirror-state\fR <[^]\fIstate\fR>]
+[[\fB!\fR] \fB--mirror-state\fR [^]\fISTATE\fR]
       [[\fB!\fR] \fB--mtime\fR|\fB-M\fR [\fB-+\fR]\fIn[smhdwy]\fR]
       [[\fB!\fR] \fB--mtime\fR|\fB-M\fR [\fB-+\fR]\fIn[smhdwy]\fR]
-[[\fB!\fR] \fB--name\fR|\fB-n <\fIpattern\fR>]
-      [[\fB!\fR] \fB--newer\fR[\fBXY\fR] <\fIreference\fR>]
-      [[\fB!\fR] \fB--ost\fR|\fB-O\fR <\fIindex\fR,...>]
-      [[\fB!\fR] \fB--perm\fR [\fB/-\fR]<\fImode\fR> ]
-[[\fB!\fR] \fB--pool\fR <\fIpool\fR>]
+[[\fB!\fR] \fB--name\fR|\fB-n \fIPATTERN\fR]
+      [[\fB!\fR] \fB--newer\fR[\fBXY\fR] \fIREFERENCE\fR]
+      [[\fB!\fR] \fB--ost\fR|\fB-O\fR \fIINDEX\fR,...]
+      [[\fB!\fR] \fB--perm\fR [\fB/-\fR]\fIMODE\fR ]
+[[\fB!\fR] \fB--pool\fR \fIPOOL\fR]
 [\fB--print\fR|\fB-P\fR]
       [\fB--print0\fR|\fB-0\fR]
 [\fB--print\fR|\fB-P\fR]
       [\fB--print0\fR|\fB-0\fR]
-[[\fB!\fR] \fB--projid\fR |<\fIprojid\fR>]
+[[\fB!\fR] \fB--projid\fR \fIPROJID\fR]
       [[\fB!\fR] \fB--size|\fB-s\fR [\fB-+\fR]\fIn\fR[\fBKMGTPE\fR]]
 [[\fB!\fR] \fB--stripe-count|\fB-c\fR [\fB+-\fR]\fIn\fR]
       [[\fB!\fR] \fB--stripe-index|\fB-i\fR \fIn\fR,...]
 [[\fB!\fR] \fB--stripe-size|\fB-S\fR [\fB+-\fR]\fIn\fR[\fBKMG\fR]]
       [[\fB!\fR] \fB--type\fR|\fB-t\fR {\fBbcdflps\fR}]
       [[\fB!\fR] \fB--size|\fB-s\fR [\fB-+\fR]\fIn\fR[\fBKMGTPE\fR]]
 [[\fB!\fR] \fB--stripe-count|\fB-c\fR [\fB+-\fR]\fIn\fR]
       [[\fB!\fR] \fB--stripe-index|\fB-i\fR \fIn\fR,...]
 [[\fB!\fR] \fB--stripe-size|\fB-S\fR [\fB+-\fR]\fIn\fR[\fBKMG\fR]]
       [[\fB!\fR] \fB--type\fR|\fB-t\fR {\fBbcdflps\fR}]
-[[\fB!\fR] \fB--uid\fR|\fB-u\fR|\fB--user\fR|\fB-U
-<\fIuname\fR>|<\fIuid>\fR]
+[[\fB!\fR] \fB--uid\fR|\fB-u\fR|\fB--user\fR|\fB-U  \fIUNAME\fR|\fIUID\fR]
 .SH DESCRIPTION
 .B lfs find
 is similar to the standard
 .SH DESCRIPTION
 .B lfs find
 is similar to the standard
@@ -127,6 +127,9 @@ File has specified numeric group ID.
 .BR --group | -G
 File belongs to specified group, numeric group ID allowed.
 .TP
 .BR --group | -G
 File belongs to specified group, numeric group ID allowed.
 .TP
+.BR --help | -h
+Print usage message.
+.TP
 .BR --layout | -L
 File has a layout of the given type, one of:
 .RS 1.2i
 .BR --layout | -L
 File has a layout of the given type, one of:
 .RS 1.2i
index f9cebbd..75e784c 100644 (file)
@@ -22,7 +22,7 @@ Proceed to Kerberos credentials cache destroy.
 Reap revoked keys from the session keyring.
 .TP
 .BR -h
 Reap revoked keys from the session keyring.
 .TP
 .BR -h
-Display helper.
+Print usage message.
 .SH EXAMPLES
 .TP
 .B $ lfs flushctx -k -r /mnt/lustre
 .SH EXAMPLES
 .TP
 .B $ lfs flushctx -k -r /mnt/lustre
index 0636e41..f2a4537 100644 (file)
@@ -2,7 +2,7 @@
 .SH NAME
 lfs getdirstripe \- list the layout pattern of a given directory
 .SH SYNOPSIS
 .SH NAME
 lfs getdirstripe \- list the layout pattern of a given directory
 .SH SYNOPSIS
-.BR "lfs getdirstripe" " [" -cDimOrTXy "]... " \fIDIR\fR...
+.BR "lfs getdirstripe" " [" -cDhHimOrTXvy "]... " \fIDIR\fR...
 .SH DESCRIPTION
 Get the layout pattern of striped directories. This
 .BR lfs (1)
 .SH DESCRIPTION
 Get the layout pattern of striped directories. This
 .BR lfs (1)
@@ -17,6 +17,9 @@ Only show the number of MDTs the directory is striped across.
 .BR \-D ", " \-\-default
 Show the default layout used when creating new subdirectories.
 .TP
 .BR \-D ", " \-\-default
 Show the default layout used when creating new subdirectories.
 .TP
+.BR \-h ", " \-\-help
+Print usage message.
+.TP
 .BR \-H ", " \-\-mdt-hash
 Only show the hash function being used for this directory.
 .TP
 .BR \-H ", " \-\-mdt-hash
 Only show the hash function being used for this directory.
 .TP
index d5974aa..f6ff53e 100644 (file)
@@ -14,7 +14,7 @@ and instance ID for these mount points.
 .SH OPTIONS
 .TP
 .BR --help | -h
 .SH OPTIONS
 .TP
 .BR --help | -h
-Print the usage message.
+Print usage message.
 .TP
 .BR --fsname | -n
 Print only the Lustre filesystem name for each filesystem.  If
 .TP
 .BR --fsname | -n
 Print only the Lustre filesystem name for each filesystem.  If
index 3dea938..aa3a8df 100644 (file)
@@ -12,6 +12,7 @@ lfs getstripe \- Lustre client command to print layout parameters of a file
       [\fB--directory\fR|\fB-d\fR]
 [\fB--fid\fR|\fB-F\fR]
 [\fB--generation\fR|\fB-g\fR]
       [\fB--directory\fR|\fB-d\fR]
 [\fB--fid\fR|\fB-F\fR]
 [\fB--generation\fR|\fB-g\fR]
+[\fB--help\fR|\fB-h\fR]
       [\fB--layout\fR|\fB-L\fR]
 [\fB--mdt\fR|\fB--mdt-index\fR|\fB-m\fR]
 [\fB--ost\fR|\fB-O\fR <\fIuuid\fR>]
       [\fB--layout\fR|\fB-L\fR]
 [\fB--mdt\fR|\fB--mdt-index\fR|\fB-m\fR]
 [\fB--ost\fR|\fB-O\fR <\fIuuid\fR>]
@@ -152,9 +153,12 @@ Get striping information for only the specified directory, like
 .BR --fid | -F
 Show only the 128-bit unique Lustre File Identifier (FID).
 .TP
 .BR --fid | -F
 Show only the 128-bit unique Lustre File Identifier (FID).
 .TP
-.B --generation | -g
+.BR --generation | -g
 Print only the layout generation number.
 .TP
 Print only the layout generation number.
 .TP
+.BR --help | -h
+Print usage message.
+.TP
 .BR --layout
 Show only the file layout, which is one of:
 .RS 1.2i
 .BR --layout
 Show only the file layout, which is one of:
 .RS 1.2i
index b4405e3..0725c1d 100644 (file)
@@ -3,8 +3,8 @@
 lfs migrate \- migrate files or directories between MDTs or OSTs.
 .SH SYNOPSIS
 .B lfs migrate
 lfs migrate \- migrate files or directories between MDTs or OSTs.
 .SH SYNOPSIS
 .B lfs migrate
+.RB [ -h "] [" -v ]
 .RI [ SETSTRIPE_OPTIONS " ... ]"
 .RI [ SETSTRIPE_OPTIONS " ... ]"
-.RB [ -v ]
 .RI < file "> ..."
 .br
 .B lfs migrate -m \fIstart_mdt_index
 .RI < file "> ..."
 .br
 .B lfs migrate -m \fIstart_mdt_index
@@ -47,6 +47,9 @@ being lost.  This should be used if an OST needs to be completely emptied
 prior to its removal, to ensure all requested files are migrated off the
 OST.
 .TP
 prior to its removal, to ensure all requested files are migrated off the
 OST.
 .TP
+.BR -h , --help
+Print usage message.
+.TP
 .BR -n , --non-block
 Abort migration if concurrent file access is detected.  This can be
 used with OST space balancing migration to avoid interfering with file
 .BR -n , --non-block
 Abort migration if concurrent file access is detected.  This can be
 used with OST space balancing migration to avoid interfering with file
index 81d413f..c7a0acc 100644 (file)
@@ -2,7 +2,7 @@
 .SH NAME
 lfs setdirstripe, mkdir \- set striping pattern of a directory.
 .SH SYNOPSIS
 .SH NAME
 lfs setdirstripe, mkdir \- set striping pattern of a directory.
 .SH SYNOPSIS
-.B lfs setdirstripe [\fR-cdDHioTxX\fR] \fIDIR\fR...
+.B lfs setdirstripe [\fR-cdDhHioTxX\fR] \fIDIR\fR...
 .br
 .SH DESCRIPTION
 Create a striped directory with specified striping pattern. This
 .br
 .SH DESCRIPTION
 Create a striped directory with specified striping pattern. This
@@ -25,6 +25,9 @@ Stripe the new directory over
 .I COUNT
 MDTs.
 .TP
 .I COUNT
 MDTs.
 .TP
+.BR \-h ", " \-\-help
+Print usage message.
+.TP
 .BR \-i ", " \-\-mdt\-index =\fISTART_MDT_INDEX\fR[,\fIMDT_INDEX ...]
 Use the MDT whose index is
 .I START_MDT_INDEX
 .BR \-i ", " \-\-mdt\-index =\fISTART_MDT_INDEX\fR[,\fIMDT_INDEX ...]
 Use the MDT whose index is
 .I START_MDT_INDEX
index 42542d2..fb9eeb6 100644 (file)
@@ -2,82 +2,88 @@
 .SH NAME
 lfs setquota \- set quota limits or grace time for users, groups or projects.
 .SH SYNOPSIS
 .SH NAME
 lfs setquota \- set quota limits or grace time for users, groups or projects.
 .SH SYNOPSIS
-.B lfs setquota {\fB-u|--user|-g|--group|-p|--projid\fR} <\fIuname|uid|gname|gid|projid\fR>
-       [\fB--pool\fR <\fIpname\fR>]
-       [\fB--block-softlimit|-b\fR <\fIblock-softlimit\fR>[kMGTPE]]
-       [\fB--block-hardlimit|-B\fR <\fIblock-hardlimit\fR>[kMGTPE]]
-       [\fB--inode-softlimit|-i\fR <\fIinode-softlimit\fR>[kMGTPE]]
-       [\fB--inode-hardlimit|-I\fR <\fIinode-hardlimit\fR>[kMGTPE]] <\fIfilesystem\fR>
-.TP
-.B lfs setquota \fB-t\fR {\fB-u|-g|-p\fR}
-       [\fB--pool\fR <\fIpname\fR>]
-       [\fB--block-grace|-b\fR <\fIblock-grace\fR>]
-       [\fB--inode-grace|-i\fR <\fIinode-grace\fR>] <\fIfilesystem\fR>
-.TP
-.B lfs setquota {\fB-u|--user|-g|--group|-p|--projid\fR} <\fIuname|uid|gname|gid|projid\fR>
+.BR "lfs setquota " { -u | --user | -g | --group | -p | --projid "} " \fIUID | \fIGID | \fIPROJID
+       [\fB--pool \fIPOOLNAME ]
+       [\fB--block-softlimit\fR|\fB-b \fIBLOCK_SOFTLIMIT\fR[\fBkMGTPE\fR]]
+       [\fB--block-hardlimit\fR|\fB-B \fIBLOCK_HARDLIMIT\fR[\fBkMGTPE\fR]]
+       [\fB--inode-softlimit\fR|\fB-i \fIINODE_SOFTLIMIT\fR[\fBkMGTPE\fR]]
+       [\fB--inode-hardlimit\fR|\fB-I \fIINODE_HARDLIMIT\fR[\fBkMGTPE\fR]] <\fIfilesystem\fR>
+.TP
+.BR "lfs setquota -t " { -h | -u | -g | -p }
+       [\fB--pool\fR \fIPOOL_NAME\fR]
+       [\fB--block-grace\fR|\fB-b\fR \fIBLOCK_GRACE_TIME\fR]
+       [\fB--inode-grace\fR|\fB-i\fR \fIINODE_GRACE_TIME\fR] <\fIfilesystem\fR>
+.TP
+.BR "lfs setquota " { -u | --user | -g | --group | -p | --projid "} " \fIUID\fR|\fIGID\fR|\fIPROJID\fR
        [\fB--default|-d\fR] <\fIfilesystem\fR>
 .TP
        [\fB--default|-d\fR] <\fIfilesystem\fR>
 .TP
-.B lfs setquota {\fB-U|--default-usr|-G|--default-grp|-P|--default-prj\fR}
-       [\fB--block-softlimit|-b\fR <\fIblock-softlimit\fR>[kMGTPE]]
-       [\fB--block-hardlimit|-B\fR <\fIblock-hardlimit\fR>[kMGTPE]]
-       [\fB--inode-softlimit|-i\fR <\fIinode-softlimit\fR>[kMGTPE]]
-       [\fB--inode-hardlimit|-I\fR <\fIinode-hardlimit\fR>[kMGTPE]] <\fIfilesystem\fR>
+.BR "lfs setquota " { -U | --default-usr | -G | --default-grp | -P | --default-prj }
+       [\fB--block-softlimit\fR|\fB-b\fR \fIBLOCK_SOFTLIMIT\fR[\fBkMGTPE\fR]]
+       [\fB--block-hardlimit\fR|\fB-B\fR \fIBLOCK_HARDLIMIT\fR[\fBkMGTPE\fR]]
+       [\fB--inode-softlimit\fR|\fB-i\fR \fIINODE_SOFTLIMIT\fR[\fBkMGTPE\fR]]
+       [\fB--inode-hardlimit\fR|\fB-I\fR \fIINODE_HARDLIMIT\fR[\fBkMGTPE\fR]] <\fIfilesystem\fR>
 .TP
 .SH DESCRIPTION
 .TP
 .SH DESCRIPTION
-.PP
-.BR "lfs setquota " {\fB-u|-g|-p\fR}
 .TP
 .TP
-Command sets the filesystem quotas for users, groups or projects respectively. \
-Block limits unit is kilobyte (1024) by default and block limits are always \
-kilobyte-grained (even if specified in bytes), block limits can be specified \
-with a \
-.BR k "," M "," G "," T "," P ", or " E \
-suffixes which specify units of 2^10, 2^20, 2^30, 2^40, 2^50 and 2^60 \
+.BR "lfs setquota " {\fB-u|-g|-p\fR}
+Command sets the filesystem quotas for users, groups or projects respectively.
+Block limits unit is kilobyte (1024) by default and block limits are always
+kilobyte-grained (even if specified in bytes), block limits can be specified
+with a
+.BR k "," M "," G "," T "," P ", or " E
+suffixes which specify units of 2^10, 2^20, 2^30, 2^40, 2^50 and 2^60
 accordingly.
 .TP
 accordingly.
 .TP
-.B -u|--user <\fIuname|uid\fR>
-Set user quota for \fIuname\fR or \fIuid\fR.
-.TP
-.B -g|--group <\fIgname|gid\fR>
-Set group quota for name \fIgname\fR or \fIgid\fR.
-.TP
-.B -p|--project <\fIprojid\fR>
-Set project quota for \fIprojid\fR.
+.BR -b | --block-softlimit \fIBLOCK_SOFTLIMIT
+Specify block softlimit, zero means unlimited.
 .TP
 .TP
-.B --pool <\fIpname\fR>
-Set quota per OST pool \fIpname\fR.
+.BR -B | --block-hardlimit \fIBLOCK_HARDLIMIT
+Specify block hardlimit, zero means unlimited. The block hardlimit should be
+greater than block softlimit when it's being specified.
 .TP
 .TP
-.B -d|--default
+.BR -d|--default
 Set user/group/project to use the default quota limits.
 .TP
 Set user/group/project to use the default quota limits.
 .TP
-.B -b|--block-softlimit <\fIblock-softlimit\fR>
-Specify block softlimit, zero means unlimited.
+.BR -g | --group \fIGROUPNAME\fR|\fIGID
+Set group quota for name \fIGROUPNAME\fR or \fIGID\fR.
 .TP
 .TP
-.B -B|--block-hardlimit <\fIblock-hardlimit\fR>
-Specify block hardlimit, zero means unlimited. The block hardlimit should be \
-greater than block softlimit when it's being specified.
+.BR -h | --help
+Print usage message.
 .TP
 .TP
-.B -i|--inode-softlimit <\fIinode-softlimit\fR>
+.BR -i | --inode-softlimit \fIINODE_SOFTLIMIT
 Specify inode softlimit, zero means unlimited.
 .TP
 Specify inode softlimit, zero means unlimited.
 .TP
-.B -I|--inode-hardlimit <\fIinode-hardlimit\fR>
-Specify inode hardlimit, zero means unlimited. The inode hardlimit should be \
+.B -I|--inode-hardlimit \fIINODE_HARDLIMIT\fR
+Specify inode hardlimit, zero means unlimited. The inode hardlimit should be
 greater than inode softlimit when it's being specified.
 greater than inode softlimit when it's being specified.
+.TP
+.B -p|--project \fIPROJID\fR
+Set project quota for \fIPROJID\fR.
+.TP
+.B --pool \fIPOOL_NAME\fR
+Set quota per OST pool \fIPOOL_NAME\fR.
+.TP
+.BR -u | --user \fIUSERNAME\fR|\fBUID
+Set user quota for \fIUNAME\fR or \fIUID\fR.
 .PP
 .PP
-.BR "lfs setquota -t "
-.TP
-Command sets the filesystem quota grace time for users, groups, or projects. \
-This is a global value that can take two forms: an amount of time or the word \
-\'\fBnotify\fR'.  Traditionally, this indicates the amount of time in seconds \
-that the soft quota limit can be exceeded before users are prevented from \
-creating new files or consuming more space.  This is intended to allow users \
-to exceed the quota limit for a short time to complete their work without \
-having to grant each user a larger hard quota limit. The alternative value of \
-\'\fBnotify\fR' informs users with an '\fB*\fR' in the quota output that they \
-are nearing their hard quota limit but does not block new writes until the hard \
-quota limit is reached.  The soft quota state is reset once the user, group, \
-or project reduces their space usage or file count below the soft quota limit. \
-Grace time is specified in "XXwXXdXXhXXmXXs" format or as an integer seconds \
+.TP
+.BR "lfs setquota -t " { -h | -u | -g | -p "} " \fIGRACE_TIME
+Command sets the filesystem quota grace time for users, groups, or projects.
+The
+.I GRACE_TIME
+is a global value that can take two forms: an amount of time or the word
+.BR notify .
+Traditionally, this indicates the amount of time in seconds
+that the soft quota limit can be exceeded before users are prevented from
+creating new files or consuming more space.  This is intended to allow users
+to exceed the quota limit for a short time to complete their work without
+having to grant each user a larger hard quota limit. The alternative value of
+.B notify
+informs users with an '\fB*\fR' in the quota output that they
+are nearing their hard quota limit but does not block new writes until the hard
+quota limit is reached.  The soft quota state is reset once the user, group,
+or project reduces their space usage or file count below the soft quota limit.
+Grace time is specified in "XXwXXdXXhXXmXXs" format or as an integer seconds
 value.  The maximum is 2^48 - 1 seconds.
 .TP
 .B -t
 value.  The maximum is 2^48 - 1 seconds.
 .TP
 .B -t
@@ -92,28 +98,27 @@ Set grace time for group.
 .B -p
 Set grace time for project.
 .TP
 .B -p
 Set grace time for project.
 .TP
-.B -b|--block-grace 'notify'|<\fIblock-grace\fR>
+.BR -b | "--block-grace notify" | \fIBLOCK_GRACE_TIME\fR
 Specify grace time for block quota.
 .TP
 Specify grace time for block quota.
 .TP
-.B -i|--inode-grace 'notify'|<\fIinode-grace\fR>
+.BR -i | "--inode-grace notify" | \fIINODE_GRACE_TIME\fR
 Specify grace time for inode quota.
 .TP
 Specify grace time for inode quota.
 .TP
-.B --pool <\fIpname\fR>
-Set grace time for user, group or project per OST pool \fIpname\fR.
-.PP
-.BR "lfs setquota " {\fB-U|--default-usr|-G|--default-grp|-P|--default-prj\fR}
+.B --pool \fIPOOL_NAME\fR
+Set grace time for user, group or project per OST pool \fIPOOL_NAME\fR.
 .TP
 .TP
-Command sets the filesystem default limits for user,group,project quotas, \
-if set, users/groups/projects without specific quota setting will use \
+.BR "lfs setquota " { -U | --default-usr | -G | --default-grp | -P | --default-prj }
+Command sets the filesystem default limits for user, group, project quotas,
+if set, users/groups/projects without specific quota setting will use
 default quota limits automatically.
 .TP
 default quota limits automatically.
 .TP
-.B -U|--default-usr
+.BR -U | --default-usr
 Set default user quota limit.
 .TP
 Set default user quota limit.
 .TP
-.B -G|--default-grp
+.BR -G | --default-grp
 Set default group quota limit.
 .TP
 Set default group quota limit.
 .TP
-.B -P|--default-prj
+.BR -P | --default-prj
 Set default project quota limit.
 .TP
 .PP
 Set default project quota limit.
 .TP
 .PP
@@ -129,7 +134,7 @@ Set quotas of user `bob' to use default quota setting
 Set system default user quota: 1 GB block softlimit and 2 GB block hardlimit
 .TP
 .B $ lfs setquota -t -u --block-grace 1000 --inode-grace 1w4d /mnt/lustre
 Set system default user quota: 1 GB block softlimit and 2 GB block hardlimit
 .TP
 .B $ lfs setquota -t -u --block-grace 1000 --inode-grace 1w4d /mnt/lustre
-Set grace times for user quotas: 1000 seconds for block quotas, 1 week and 4 \
+Set grace times for user quotas: 1000 seconds for block quotas, 1 week and 4
 days for inode quotas
 .TP
 .B $ lfs setquota -u ivan --pool flash_pool -B 1G /mnt/lustre
 days for inode quotas
 .TP
 .B $ lfs setquota -u ivan --pool flash_pool -B 1G /mnt/lustre
index c706ceb..35358b1 100644 (file)
@@ -92,7 +92,7 @@ set, a default value of 100 is used, limiting the object size to 1% of available
 space.
 .TP
 .B \\--help|-h
 space.
 .TP
 .B \\--help|-h
-Display help information.
+Display usage message.
 .TP
 .B \\--no-rsync
 Do not fall back to using rsync if
 .TP
 .B \\--no-rsync
 Do not fall back to using rsync if
@@ -134,6 +134,7 @@ specified at the same time as the \fB-R \fRoption.
 .TP
 .B \\--verbose|-v
 Show verbose debug messages.
 .TP
 .B \\--verbose|-v
 Show verbose debug messages.
+.TP
 .B \\--max-free|-X \fI<max_free>
 When \fB-A \fRis set, \fImax_free \fRis the maximum amount of free space that
 can be considered available for the migration of the file on each OST.  The
 .B \\--max-free|-X \fI<max_free>
 When \fB-A \fRis set, \fImax_free \fRis the maximum amount of free space that
 can be considered available for the migration of the file on each OST.  The
@@ -147,27 +148,26 @@ Answer 'y' to usage warning without prompting (for scripts, use with caution).
 Input file names on stdin are separated by a null character.
 .SH EXAMPLES
 To rebalance all files within
 Input file names on stdin are separated by a null character.
 .SH EXAMPLES
 To rebalance all files within
-.I /testfs/jobs/2011
-(which are known not to be modified by in-use programs):
+.IR /testfs/jobs/2011 :
 .IP
 lfs_migrate /testfs/jobs/2011
 .PP
 To migrate files within the
 .I /testfs
 filesystem on OST0004 (perhaps because it is much more full than other OSTs),
 .IP
 lfs_migrate /testfs/jobs/2011
 .PP
 To migrate files within the
 .I /testfs
 filesystem on OST0004 (perhaps because it is much more full than other OSTs),
-larger than 4GB (because it is more efficient to just migrate large files),
-and older than two days (to avoid files that are in use, though this is NOT
-a guarantee the files are not being modified, that is workload specific) after
-disabling file creation on testfs-OST0004 (this is needed on all MDS nodes):
+larger than 4GB (because it is more efficient to migrate a few large files than
+many small ones), and older than two days (to avoid files that are in use) to
+use auto-restriping for these files, after disabling file creation on
+testfs-OST0004 (this is needed on all MDS nodes):
 .IP
 .nf
 mds# lctl set_param osp.testfs-OST0004*.max_create_count=0
 .IP
 .nf
 mds# lctl set_param osp.testfs-OST0004*.max_create_count=0
-client# lfs find /testfs -obd testfs-OST0004 -size +4G -mtime +2d | lfs_migrate -y
+client# lfs find /testfs -obd testfs-OST0004 -size +4G -mtime +2d | lfs_migrate -y -A
 mds# lctl set_param osp.testfs-OST0004*.max_create_count=20000
 .fi
 .PP
 mds# lctl set_param osp.testfs-OST0004*.max_create_count=20000
 .fi
 .PP
-To use automatic striping, and limit the object size per OST to 5% of current
-free space:
+To use automatic restriping, and limit the object size per OST to 5% of
+current free space:
 .IP
 lfs_migrate -A -C 20 /testfs/jobs/2011
 .SH NOTES
 .IP
 lfs_migrate -A -C 20 /testfs/jobs/2011
 .SH NOTES
index 9afbbc9..53b62f6 100644 (file)
@@ -190,54 +190,54 @@ static inline int lfs_mirror_delete(int argc, char **argv)
 
 /* Setstripe and migrate share mostly the same parameters */
 #define SSM_CMD_COMMON(cmd) \
 
 /* Setstripe and migrate share mostly the same parameters */
 #define SSM_CMD_COMMON(cmd) \
-       "usage: "cmd" [--component-end|-E <comp_end>]\n"                \
-       "                 [--stripe-count|-c <stripe_count>]\n"         \
-       "                 [--overstripe-count|-C <stripe_count>]\n"     \
-       "                 [--stripe-index|-i <start_ost_idx>]\n"        \
-       "                 [--stripe-size|-S <stripe_size>]\n"           \
-       "                 [--extension-size|--ext-size|-z]\n"           \
-       "                 [--layout|-L <pattern>]\n"                    \
-       "                 [--mirror-count|-N[mirror_count]]\n"          \
-       "                 [--ost|-o <ost_indices>]\n"                   \
-       "                 [--pool|-p <pool_name>]\n"                    \
-       "                 [--yaml|-y <yaml_template_file>]\n"           \
-       "                 [--copy=<lustre_src>]\n"
+       "usage: "cmd" [--component-end|-E COMP_END]\n"                  \
+       "                 [--stripe-count|-c STRIPE_COUNT]\n"           \
+       "                 [--overstripe-count|-C STRIPE_COUNT]\n"       \
+       "                 [--stripe-index|-i START_OST_IDX]\n"          \
+       "                 [--stripe-size|-S STRIPE_SIZE]\n"             \
+       "                 [--extension-size|--ext-size|-z]\n"           \
+       "                 [--help|-h] [--layout|-L PATTERN]\n"          \
+       "                 [--mirror_count|-N[MIRROR_COUNT]]\n"          \
+       "                 [--ost|-o OST_INDICES]\n"                     \
+       "                 [--pool|-p POOL_NAME]\n"                      \
+       "                 [--yaml|-y YAML_TEMPLATE_FILE]\n"             \
+       "                 [--copy=LUSTRE_SRC]\n"
 
 #define SSM_HELP_COMMON \
 
 #define SSM_HELP_COMMON \
-       "\tstripe_count: Number of OSTs to stripe on (0=fs default, -1 all)\n" \
+       "\tSTRIPE_COUNT: Number of OSTs to stripe on (0=fs default, -1 all)\n" \
        "\t              Using -C instead of -c allows overstriping, which\n"  \
        "\t              will place more than one stripe per OST if\n"         \
        "\t              stripe_count is greater than the number of OSTs.\n"   \
        "\t              Using -C instead of -c allows overstriping, which\n"  \
        "\t              will place more than one stripe per OST if\n"         \
        "\t              stripe_count is greater than the number of OSTs.\n"   \
-       "\tstart_ost_idx: OST index of first stripe (-1=default round robin)\n"\
-       "\tstripe_size:  Number of bytes on each OST (0=fs default)\n"         \
+       "\tSTART_OST_IDX: OST index of first stripe (-1=default round robin)\n"\
+       "\tSTRIPE_SIZE:  Number of bytes on each OST (0=fs default)\n"         \
        "\t              Optional K, M, or G suffix (for KB, MB, GB\n"         \
        "\t              respectively).  Must be a multiple of 64KiB.\n"       \
        "\t              Optional K, M, or G suffix (for KB, MB, GB\n"         \
        "\t              respectively).  Must be a multiple of 64KiB.\n"       \
-       "\textension_size:\n"                                                  \
+       "\tEXTENSION_SIZE:\n"                                                  \
        "\t              Number of bytes the previous component is extended\n" \
        "\t              each time. Optional K, M, or G suffix (for KB,\n"     \
        "\t              MB, GB respectively)\n"                               \
        "\t              Number of bytes the previous component is extended\n" \
        "\t              each time. Optional K, M, or G suffix (for KB,\n"     \
        "\t              MB, GB respectively)\n"                               \
-       "\tpool_name:    Name of OST pool to use (default none)\n"             \
-       "\tlayout:       stripe pattern type: raid0, mdt (default raid0)\n"    \
-       "\tost_indices:  List of OST indices, can be repeated multiple times\n"\
+       "\tPOOL_NAME:    Name of OST pool to use (default none)\n"             \
+       "\tLAYOUT:       stripe pattern type: raid0, mdt (default raid0)\n"    \
+       "\tOST_INDICES:  List of OST indices, can be repeated multiple times\n"\
        "\t              Indices be specified in a format of:\n"               \
        "\t              Indices be specified in a format of:\n"               \
-       "\t                -o <ost_1>,<ost_i>-<ost_j>,<ost_n>\n"               \
+       "\t                -o OST_1,OST_I-OST_J,OST_N\n"                       \
        "\t              Or:\n"                                                \
        "\t              Or:\n"                                                \
-       "\t                -o <ost_1> -o <ost_i>-<ost_j> -o <ost_n>\n"         \
+       "\t                -o OST_1 -o OST_I-OST_J -o OST_N\n"                 \
        "\t              If --pool is set with --ost then the OSTs\n"          \
        "\t              must be the members of the pool.\n"                   \
        "\t              If --pool is set with --ost then the OSTs\n"          \
        "\t              must be the members of the pool.\n"                   \
-       "\tcomp_end:     Extent end of component, start after previous end.\n" \
+       "\tCOMP_END:     Extent end of component, start after previous end.\n" \
        "\t              Optional K, M, or G suffix (for KiB, MiB, GiB), or\n" \
        "\t              -1 or 'eof' for max file size). Must be a multiple\n" \
        "\t              of stripe_size and a multiple of 64KiB.\n"            \
        "\t              Optional K, M, or G suffix (for KiB, MiB, GiB), or\n" \
        "\t              -1 or 'eof' for max file size). Must be a multiple\n" \
        "\t              of stripe_size and a multiple of 64KiB.\n"            \
-       "\tyaml_template_file:\n"                                              \
+       "\tYAML_TEMPLATE_FILE:\n"                                              \
        "\t              YAML layout template file, can't be used with -c,\n"  \
        "\t              -i, -S, -p, -o, or -E arguments.\n"                   \
        "\t              YAML layout template file, can't be used with -c,\n"  \
        "\t              -i, -S, -p, -o, or -E arguments.\n"                   \
-       "\tlustre_src:   Lustre file/dir whose layout info is used to set\n"   \
+       "\tLUSTRE_SRC:   Lustre file/dir whose layout info is used to set\n"   \
        "\t              another lustre file or directory, can't used with\n"  \
        "\t              -c, -i, -S, -p, -o, or -E arguments.\n"
 
 #define MIRROR_CREATE_HELP                                                    \
        "\t              another lustre file or directory, can't used with\n"  \
        "\t              -c, -i, -S, -p, -o, or -E arguments.\n"
 
 #define MIRROR_CREATE_HELP                                                    \
-       "\tmirror_count: Number of mirrors to be created with the upcoming\n"  \
+       "\tMIRROR_COUNT: Number of mirrors to be created with the upcoming\n"  \
        "\t              setstripe layout options\n"                           \
        "\t              It defaults to 1 if not specified; if specified,\n"   \
        "\t              it must follow the option without a space.\n"         \
        "\t              setstripe layout options\n"                           \
        "\t              It defaults to 1 if not specified; if specified,\n"   \
        "\t              it must follow the option without a space.\n"         \
@@ -247,12 +247,12 @@ static inline int lfs_mirror_delete(int argc, char **argv)
        "\t              It can be a plain layout or a composite layout.\n"    \
        "\t              If not specified, the stripe options inherited\n"     \
        "\t              from the previous component will be used.\n"          \
        "\t              It can be a plain layout or a composite layout.\n"    \
        "\t              If not specified, the stripe options inherited\n"     \
        "\t              from the previous component will be used.\n"          \
-       "\tflags:        set flags to the component of the current mirror.\n"  \
+       "\tFLAGS:        set flags to the component of the current mirror.\n"  \
        "\t              Only \"prefer\" flag is supported so far.\n"
 
 #define MIRROR_EXTEND_HELP                                                    \
        MIRROR_CREATE_HELP                                                     \
        "\t              Only \"prefer\" flag is supported so far.\n"
 
 #define MIRROR_EXTEND_HELP                                                    \
        MIRROR_CREATE_HELP                                                     \
-       "\tvictim_file:  The layout of victim_file will be split and used\n"   \
+       "\tVICTIM_FILE:  The layout of victim_file will be split and used\n"   \
        "\t              as a mirror added to the mirrored file.\n"            \
        "\tno-verify:    This option indicates not to verify the mirror(s)\n"  \
        "\t              from victim file(s) in case the victim file(s)\n"     \
        "\t              as a mirror added to the mirrored file.\n"            \
        "\tno-verify:    This option indicates not to verify the mirror(s)\n"  \
        "\t              from victim file(s) in case the victim file(s)\n"     \
@@ -261,7 +261,7 @@ static inline int lfs_mirror_delete(int argc, char **argv)
 
 #define MIRROR_EXTEND_USAGE                                                   \
        "                 {--mirror-count|-N[mirror_count]}\n"                 \
 
 #define MIRROR_EXTEND_USAGE                                                   \
        "                 {--mirror-count|-N[mirror_count]}\n"                 \
-       "                 [SETSTRIPE_OPTIONS|-f|--file <victim_file>]\n"       \
+       "                 [SETSTRIPE_OPTIONS|-f|--file VICTIM_FILE]\n"         \
        "                 [--no-verify]\n"
 
 #define SETSTRIPE_USAGE                                                        \
        "                 [--no-verify]\n"
 
 #define SETSTRIPE_USAGE                                                        \
@@ -285,11 +285,11 @@ static inline int lfs_mirror_delete(int argc, char **argv)
 
 #define SETDIRSTRIPE_USAGE                                             \
        "               [--mdt-count|-c stripe_count>\n"                \
 
 #define SETDIRSTRIPE_USAGE                                             \
        "               [--mdt-count|-c stripe_count>\n"                \
-       "               [--mdt-hash|-H mdt_hash]\n"                     \
+       "               [--help|-h] [--mdt-hash|-H mdt_hash]\n"         \
        "               [--mdt-index|-i mdt_index[,mdt_index,...]\n"    \
        "               [--default|-D] [--mode|-o mode]\n"              \
        "               [--max-inherit|-X max_inherit]\n"               \
        "               [--mdt-index|-i mdt_index[,mdt_index,...]\n"    \
        "               [--default|-D] [--mode|-o mode]\n"              \
        "               [--max-inherit|-X max_inherit]\n"               \
-       "               [--max-inherit-rr max_inherit_rr] <dir>\n"              \
+       "               [--max-inherit-rr max_inherit_rr] <dir>\n"      \
        "\tstripe_count: stripe count of the striped directory\n"       \
        "\tmdt_index: MDT index of first stripe\n"                      \
        "\tmdt_hash:  hash type of the striped directory. mdt types:\n" \
        "\tstripe_count: stripe count of the striped directory\n"       \
        "\tmdt_index: MDT index of first stripe\n"                      \
        "\tmdt_hash:  hash type of the striped directory. mdt types:\n" \
@@ -298,11 +298,11 @@ static inline int lfs_mirror_delete(int argc, char **argv)
        "       all_char  sum of characters % MDT_COUNT (not recommended)\n" \
        "\tdefault_stripe: set default dirstripe of the directory\n"    \
        "\tmode: the file access permission of the directory (octal)\n" \
        "       all_char  sum of characters % MDT_COUNT (not recommended)\n" \
        "\tdefault_stripe: set default dirstripe of the directory\n"    \
        "\tmode: the file access permission of the directory (octal)\n" \
-       "To create dir with a foreign (free format) layout :\n" \
-       "setdirstripe|mkdir --foreign[=<foreign_type>] -x|-xattr <string> " \
-               "[--mode|-o mode] [--flags <hex>] <dir>\n" \
-       "\tmode: the mode of the directory\n" \
-       "\tforeign_type: none or symlink\n"
+       "To create dir with a foreign (free format) layout :\n"         \
+       "setdirstripe|mkdir --foreign[=FOREIGN_TYPE] -x|-xattr STRING " \
+               "[--mode|-o MODE] [--flags HEX] <dir>\n" \
+       "\tmode: the file access permissions of the directory\n"        \
+       "\tforeign_type: none, daos, symlink, or numeric value\n"
 
 /**
  * command_t mirror_cmdlist - lfs mirror commands.
 
 /**
  * command_t mirror_cmdlist - lfs mirror commands.
@@ -310,56 +310,52 @@ static inline int lfs_mirror_delete(int argc, char **argv)
 command_t mirror_cmdlist[] = {
        { .pc_name = "create", .pc_func = lfs_mirror_create,
          .pc_help = "Create a mirrored file.\n"
 command_t mirror_cmdlist[] = {
        { .pc_name = "create", .pc_func = lfs_mirror_create,
          .pc_help = "Create a mirrored file.\n"
-               "usage: lfs mirror create "
-               "<--mirror-count|-N[mirror_count]> "
-               "[SETSTRIPE_OPTIONS] ... <filename|directory> ...\n"
+               "usage: lfs mirror create {--mirror-count|-N[MIRROR_COUNT]}\n"
+               "\t\t[SETSTRIPE_OPTIONS] <filename|directory> ...\n"
          MIRROR_CREATE_HELP },
        { .pc_name = "delete", .pc_func = lfs_mirror_delete,
          .pc_help = "Delete a mirror from a file.\n"
          MIRROR_CREATE_HELP },
        { .pc_name = "delete", .pc_func = lfs_mirror_delete,
          .pc_help = "Delete a mirror from a file.\n"
-       "usage: lfs mirror delete {--mirror-id <mirror_id> |\n"
-       "\t               --component-id|--comp-id|-I <comp_id> |\n"
-       "\t               -p <pool>} <mirrored_file> ...\n"
+       "usage: lfs mirror delete {--mirror-id MIRROR_ID|-p POOL|\n"
+       "\t               --component-id|--comp-id|-I COMP_ID} <mirror_file>\n"
        },
        { .pc_name = "extend", .pc_func = lfs_mirror_extend,
          .pc_help = "Extend a mirrored file.\n"
        },
        { .pc_name = "extend", .pc_func = lfs_mirror_extend,
          .pc_help = "Extend a mirrored file.\n"
-               "usage: lfs mirror extend "
-               "<--mirror-count|-N[mirror_count]> [--no-verify] "
-               "[SETSTRIPE_OPTIONS|-f <victim_file>] ... <filename> ...\n"
+               "usage: lfs mirror extend {--mirror-count|-N[MIRROR_COUNT]}\n"
+               "\t\t[--no-verify] [SETSTRIPE_OPTIONS|-f VICTIM_FILE] ... <filename> ...\n"
          MIRROR_EXTEND_HELP },
        { .pc_name = "split", .pc_func = lfs_mirror_split,
          .pc_help = "Split a mirrored file.\n"
          MIRROR_EXTEND_HELP },
        { .pc_name = "split", .pc_func = lfs_mirror_split,
          .pc_help = "Split a mirrored file.\n"
-       "usage: lfs mirror split <--mirror-id <mirror_id> |\n"
-       "\t             --component-id|-I <comp_id>|-p <pool>> [--destroy|-d]\n"
-       "\t             [-f <new_file>] <mirrored_file> ...\n"
-       "\tmirror_id:   The numerical unique identifier for a mirror. It\n"
-       "\t             can be fetched by lfs getstripe command.\n"
-       "\tcomp_id:     Unique component ID within a mirror.\n"
-       "\tpool:        Components on specified pool.\n"
-       "\tnew_file:    This option indicates the layout of the split\n"
-       "\t             mirror will be stored into. If not specified,\n"
-       "\t             a new file named <mirrored_file>.mirror~<mirror_id>\n"
-       "\t             will be used.\n" },
+       "usage: lfs mirror split [--destroy|-d] [-f NEW_FILE] [--help|-h]\n"
+       "\t\t{--mirror-id MIRROR_ID|--component-id|-I COMP_ID|-p POOL}\n"
+       "\t\t<mirrored file> ...\n"
+       "\tMIRROR_ID: The numerical unique identifier for a mirror.\n"
+       "\t           It can be fetched by the 'lfs getstripe' command.\n"
+       "\tCOMP_ID:   Unique component ID within a mirror.\n"
+       "\tPOOL:      Components using specified pool.\n"
+       "\tNEW_FILE:  This option indicates the layout of the split\n"
+       "\t           mirror will be stored into. If not specified,\n"
+       "\t           a new file named <mirrored_file>.mirror~MIRROR_ID\n"
+       "\t           will be used.\n" },
        { .pc_name = "read", .pc_func = lfs_mirror_read,
          .pc_help = "Read the content of a specified mirror of a file.\n"
        { .pc_name = "read", .pc_func = lfs_mirror_read,
          .pc_help = "Read the content of a specified mirror of a file.\n"
-               "usage: lfs mirror read <--mirror-id|-N <mirror_id> "
-               "[--outfile|-o <output_file>] <mirrored_file>\n" },
+               "usage: lfs mirror read {--mirror-id|-N MIRROR_ID}\n"
+               "\t\t[--outfile|-o <output_file>] <mirrored_file>\n" },
        { .pc_name = "write", .pc_func = lfs_mirror_write,
          .pc_help = "Write to a specified mirror of a file.\n"
        { .pc_name = "write", .pc_func = lfs_mirror_write,
          .pc_help = "Write to a specified mirror of a file.\n"
-               "usage: lfs mirror write <--mirror-id|-N <mirror_id> "
-               "[--inputfile|-i <input_file>] <mirrored_file>\n" },
+               "usage: lfs mirror write {--mirror-id|-N MIRROR_ID}\n"
+               "\t\t[--inputfile|-i <input_file>] <mirrored_file>\n" },
        { .pc_name = "copy", .pc_func = lfs_mirror_copy,
          .pc_help = "Copy a specified mirror to other mirror(s) of a file.\n"
        { .pc_name = "copy", .pc_func = lfs_mirror_copy,
          .pc_help = "Copy a specified mirror to other mirror(s) of a file.\n"
-               "usage: lfs mirror copy <--read-mirror|-i <id0>> "
-               "<--write-mirror|-o <id1,id2>> <mirrored_file>\n" },
+               "usage: lfs mirror copy {--read-mirror|-i MIRROR_ID0}\n"
+               "\t\t{--write-mirror|-o MIRROR_ID1[,...]} <mirrored_file>\n" },
        { .pc_name = "resync", .pc_func = lfs_mirror_resync,
          .pc_help = "Resynchronizes out-of-sync mirrored file(s).\n"
        { .pc_name = "resync", .pc_func = lfs_mirror_resync,
          .pc_help = "Resynchronizes out-of-sync mirrored file(s).\n"
-               "usage: lfs mirror resync [--only <mirror_id[,...]>] "
-               "<mirrored file> [<mirrored file2>...]\n"},
+               "usage: lfs mirror resync [--only MIRROR_ID[,...]>]\n"
+               "\t\t<mirrored_file> [<mirrored_file2>...]\n" },
        { .pc_name = "verify", .pc_func = lfs_mirror_verify,
          .pc_help = "Verify mirrored file(s).\n"
        { .pc_name = "verify", .pc_func = lfs_mirror_verify,
          .pc_help = "Verify mirrored file(s).\n"
-               "usage: lfs mirror verify "
-               "[--only <mirror_id,mirror_id2[,...]>] "
-               "[--verbose|-v] <mirrored_file> [<mirrored_file2> ...]\n"},
+               "usage: lfs mirror verify [--only MIRROR_ID[,...]]\n"
+               "\t\t[--verbose|-v] <mirrored_file> [<mirrored_file2> ...]\n" },
        { .pc_name = "list-commands", .pc_func = lfs_mirror_list_commands,
          .pc_help = "list commands supported by lfs mirror"},
        { .pc_name = "help", .pc_func = Parser_help, .pc_help = "help" },
        { .pc_name = "list-commands", .pc_func = lfs_mirror_list_commands,
          .pc_help = "list commands supported by lfs mirror"},
        { .pc_name = "help", .pc_func = Parser_help, .pc_help = "help" },
@@ -378,8 +374,7 @@ command_t pcc_cmdlist[] = {
                "\t-i: archive id for RW-PCC\n" },
        { .pc_name = "attach_fid", .pc_func = lfs_pcc_attach_fid,
          .pc_help = "Attach given files into PCC by FID(s).\n"
                "\t-i: archive id for RW-PCC\n" },
        { .pc_name = "attach_fid", .pc_func = lfs_pcc_attach_fid,
          .pc_help = "Attach given files into PCC by FID(s).\n"
-               "usage: lfs pcc attach_id <--id|-i NUM> <--mnt|-m mnt> "
-               "<fid> ...\n"
+               "usage: lfs pcc attach_id {--id|-i NUM} {--mnt|-m MOUNTPOINT} FID ...\n"
                "\t-i: archive id for RW-PCC\n"
                "\t-m: Lustre mount point\n" },
        { .pc_name = "state", .pc_func = lfs_pcc_state,
                "\t-i: archive id for RW-PCC\n"
                "\t-m: Lustre mount point\n" },
        { .pc_name = "state", .pc_func = lfs_pcc_state,
@@ -405,7 +400,7 @@ command_t cmdlist[] = {
         "To create a file with specified striping/composite layout, or\n"
         "create/replace the default layout on an existing directory:\n"
         SSM_CMD_COMMON("setstripe")
         "To create a file with specified striping/composite layout, or\n"
         "create/replace the default layout on an existing directory:\n"
         SSM_CMD_COMMON("setstripe")
-        "                 [--mode <mode>]\n"
+        "                 [--mode MODE]\n"
         "                 <directory|filename>\n"
         " or\n"
         "To add component(s) to an existing composite file:\n"
         "                 <directory|filename>\n"
         " or\n"
         "To add component(s) to an existing composite file:\n"
@@ -415,43 +410,43 @@ command_t cmdlist[] = {
         "usage: setstripe [--delete|-d] <directory>\n"
         " or\n"
         "To create a mirrored file or set s default mirror layout on a directory:\n"
         "usage: setstripe [--delete|-d] <directory>\n"
         " or\n"
         "To create a mirrored file or set s default mirror layout on a directory:\n"
-        "usage: setstripe {--mirror-count|-N}[mirror_count] [SETSTRIPE_OPTIONS] <directory|filename>\n"
+        "usage: setstripe {--mirror-count|-N}[MIRROR_COUNT] [SETSTRIPE_OPTIONS] <directory|filename>\n"
         " or\n"
         "To delete the last component(s) from an existing composite file\n"
         "(note that this will also delete any data in those components):\n"
         " or\n"
         "To delete the last component(s) from an existing composite file\n"
         "(note that this will also delete any data in those components):\n"
-        "usage: setstripe --component-del [--component-id|-I <comp_id>]\n"
-        "                               [--component-flags|-F <comp_flags>]\n"
+        "usage: setstripe --component-del [--component-id|-I COMP_ID]\n"
+        "                               [--component-flags|-F COMP_FLAGS]\n"
         "                               <filename>\n"
         "                               <filename>\n"
-        "\tcomp_id:     Unique component ID to delete\n"
-        "\tcomp_flags:  'init' indicating all instantiated components\n"
+        "\tCOMP_ID:     Unique component ID to delete\n"
+        "\tCOMP_FLAGS:  'init' indicating all instantiated components\n"
         "\t             '^init' indicating all uninstantiated components\n"
         "\t-I and -F cannot be specified at the same time\n"
         " or\n"
         "To set or clear flags on a specific component\n"
         "(note that this command can only be applied to mirrored files:\n"
         "\t             '^init' indicating all uninstantiated components\n"
         "\t-I and -F cannot be specified at the same time\n"
         " or\n"
         "To set or clear flags on a specific component\n"
         "(note that this command can only be applied to mirrored files:\n"
-        "usage: setstripe --comp-set {-I comp_id|--comp-flags=comp_flags}\n"
+        "usage: setstripe --comp-set {-I COMP_ID|--comp-flags=COMP_FLAGS}\n"
         "                            <filename>\n"
         " or\n"
         "To create a file with a foreign (free format) layout:\n"
         "                            <filename>\n"
         " or\n"
         "To create a file with a foreign (free format) layout:\n"
-        "usage: setstripe --foreign[=<foreign_type>]\n"
-        "                 --xattr|-x <layout_string> [--flags <hex>]\n"
-        "                 [--mode <mode>] <filename>\n"},
+        "usage: setstripe --foreign[=FOREIGN_TYPE]\n"
+        "                 --xattr|-x LAYOUT_STRING [--flags HEX]\n"
+        "                 [--mode MODE] <filename>\n"},
        {"getstripe", lfs_getstripe, 0,
         "To list the layout pattern for a given file or files in a\n"
         "directory or recursively for all files in a directory tree.\n"
        {"getstripe", lfs_getstripe, 0,
         "To list the layout pattern for a given file or files in a\n"
         "directory or recursively for all files in a directory tree.\n"
-        "usage: getstripe [--ost|-O <uuid>] [--quiet|-q] [--verbose|-v]\n"
+        "usage: getstripe [--ost|-O UUID] [--quiet|-q] [--verbose|-v]\n"
         "                 [--stripe-count|-c] [--stripe-index|-i] [--fid|-F]\n"
         "                 [--pool|-p] [--stripe-size|-S] [--directory|-d]\n"
         "                 [--mdt-index|-m] [--recursive|-r] [--raw|-R]\n"
         "                 [--layout|-L] [--generation|-g] [--yaml|-y]\n"
         "                 [--stripe-count|-c] [--stripe-index|-i] [--fid|-F]\n"
         "                 [--pool|-p] [--stripe-size|-S] [--directory|-d]\n"
         "                 [--mdt-index|-m] [--recursive|-r] [--raw|-R]\n"
         "                 [--layout|-L] [--generation|-g] [--yaml|-y]\n"
-        "                 [--component-id[=comp_id]|-I[comp_id]]\n"
-        "                 [--component-flags[=comp_flags]]\n"
+        "                 [--help|-h] [--component-id|-I[=COMP_ID]]\n"
+        "                 [--component-flags[=COMP_FLAGS]]\n"
         "                 [--component-count]\n"
         "                 [--extension-size|--ext-size|-z]\n"
         "                 [--component-count]\n"
         "                 [--extension-size|--ext-size|-z]\n"
-        "                 [--component-start[=[+-]comp_start]]\n"
-        "                 [--component-end[=[+-]comp_end]|-E[[+-]comp_end]]\n"
-        "                 [[!] --mirror-index=[+-]<index> |\n"
-        "                  [!] --mirror-id=[+-]<id>] [--mirror-count|-N]\n"
+        "                 [--component-start[=[+-]COMP_START]]\n"
+        "                 [--component-end[=[+-]COMP_END]|-E[[+-]comp_end]]\n"
+        "                 [[!] --mirror-index=[+-]INDEX |\n"
+        "                 [!] --mirror-id=[+-]MIRROR_ID] [--mirror-count|-N]\n"
         "                 <directory|filename> ..."},
        {"setdirstripe", lfs_setdirstripe, 0,
         "Create striped directory on specified MDT, same as mkdir.\n"
         "                 <directory|filename> ..."},
        {"setdirstripe", lfs_setdirstripe, 0,
         "Create striped directory on specified MDT, same as mkdir.\n"
@@ -462,7 +457,7 @@ command_t cmdlist[] = {
         "To list the layout pattern info for a given directory\n"
         "or recursively for all directories in a directory tree.\n"
         "usage: getdirstripe [--mdt-count|-c] [--mdt-index|-m|-i]\n"
         "To list the layout pattern info for a given directory\n"
         "or recursively for all directories in a directory tree.\n"
         "usage: getdirstripe [--mdt-count|-c] [--mdt-index|-m|-i]\n"
-        "                    [--mdt-hash|-H] [--obd|-O <uuid>]\n"
+        "                    [--help|-h] [--mdt-hash|-H] [--obd|-O UUID]\n"
         "                    [--recursive|-r] [--yaml|-y]\n"
         "                    [--verbose|-v] [--default|-D]\n"
         "                    [--max-inherit|-X]\n"
         "                    [--recursive|-r] [--yaml|-y]\n"
         "                    [--verbose|-v] [--default|-D]\n"
         "                    [--max-inherit|-X]\n"
@@ -490,7 +485,7 @@ command_t cmdlist[] = {
         "usage: find <directory|filename> ...\n"
         "     [[!] --atime|-A [+-]N[smhdwy]] [[!] --ctime|-C [+-]N[smhdwy]]\n"
         "     [[!] --mtime|-M [+-]N[smhdwy]]\n"
         "usage: find <directory|filename> ...\n"
         "     [[!] --atime|-A [+-]N[smhdwy]] [[!] --ctime|-C [+-]N[smhdwy]]\n"
         "     [[!] --mtime|-M [+-]N[smhdwy]]\n"
-        "     [[!] --btime|--Btime|-B [+-]N[smhdwy]]\n"
+        "     [[!] --btime|--Btime|-B [+-]N[smhdwy]] [--help|-h]\n"
         "     [[!] --newer[XY] <reference>] [[!] --blocks|-b N]\n"
         "     [--maxdepth|-D N] [[!] --mdt-index|--mdt|-m <uuid|index,...>]\n"
         "     [[!] --name|-n <pattern>] [[!] --ost|-O <uuid|index,...>]\n"
         "     [[!] --newer[XY] <reference>] [[!] --blocks|-b N]\n"
         "     [--maxdepth|-D N] [[!] --mdt-index|--mdt|-m <uuid|index,...>]\n"
         "     [[!] --name|-n <pattern>] [[!] --ost|-O <uuid|index,...>]\n"
@@ -521,7 +516,7 @@ command_t cmdlist[] = {
        {"check", lfs_check, 0,
         "Display the status of MGTs, MDTs or OSTs (as specified in the command)\n"
         "or all the servers (MGTs, MDTs and OSTs).\n"
        {"check", lfs_check, 0,
         "Display the status of MGTs, MDTs or OSTs (as specified in the command)\n"
         "or all the servers (MGTs, MDTs and OSTs).\n"
-        "usage: check <mgts|osts|mdts|all>"},
+        "usage: check {mgts|osts|mdts|all}"},
        {"osts", lfs_osts, 0, "list OSTs connected to client "
         "[for specified path only]\n" "usage: osts [path]"},
        {"mdts", lfs_mdts, 0, "list MDTs connected to client "
        {"osts", lfs_osts, 0, "list OSTs connected to client "
         "[for specified path only]\n" "usage: osts [path]"},
        {"mdts", lfs_mdts, 0, "list MDTs connected to client "
@@ -536,27 +531,27 @@ command_t cmdlist[] = {
         "Usage: getname [--help|-h] [--instance|-i] [--fsname|-n] [path ...]"},
 #ifdef HAVE_SYS_QUOTA_H
        {"setquota", lfs_setquota, 0, "Set filesystem quotas.\n"
         "Usage: getname [--help|-h] [--instance|-i] [--fsname|-n] [path ...]"},
 #ifdef HAVE_SYS_QUOTA_H
        {"setquota", lfs_setquota, 0, "Set filesystem quotas.\n"
-        "usage: setquota <-u|-g|-p> <uname>|<uid>|<gname>|<gid>|<projid>\n"
-        "                -b <block-softlimit> -B <block-hardlimit>\n"
-        "                -i <inode-softlimit> -I <inode-hardlimit> <filesystem>\n"
-        "       setquota <-u|--user|-g|--group|-p|--projid> <uname>|<uid>|<gname>|<gid>|<projid>\n"
-        "                [--block-softlimit <block-softlimit>]\n"
-        "                [--block-hardlimit <block-hardlimit>]\n"
-        "                [--inode-softlimit <inode-softlimit>]\n"
-        "                [--inode-hardlimit <inode-hardlimit>] <filesystem>\n"
-        "       setquota [-t] <-u|--user|-g|--group|-p|--projid>\n"
-        "                [--block-grace 'notify'|<block-grace>]\n"
-        "                [--inode-grace 'notify'|<inode-grace>] <filesystem>\n"
-        "       setquota <-U|-G|-P>\n"
-        "                -b <block-softlimit> -B <block-hardlimit>\n"
-        "                -i <inode-softlimit> -I <inode-hardlimit> <filesystem>\n"
-        "       setquota <-U|--default-usr|-G|--default-grp|-P|--default-prj>\n"
-        "                [--block-softlimit <block-softlimit>]\n"
-        "                [--block-hardlimit <block-hardlimit>]\n"
-        "                [--inode-softlimit <inode-softlimit>]\n"
-        "                [--inode-hardlimit <inode-hardlimit>] <filesystem>\n"
-        "       setquota <-u|-g|-p> <uname>|<uid>|<gname>|<gid>|<projid>\n"
-        "                <-d|--default>\n"
+        "usage: setquota {-u|-g|-p} UNAME|UID|GNAME|GID|PROJID\n"
+        "                -b BLOCK_SOFTLIMIT -B BLOCK_HARDLIMIT\n"
+        "                -i INODE_SOFTLIMIT -I INODE_HARDLIMIT <filesystem>\n"
+        "       setquota {-u|--user USER|UID|-g|--group GROUP|GID|-p|--projid PROJID}\n"
+        "                [--block-softlimit BLOCK_SOFTLIMIT]\n"
+        "                [--block-hardlimit BLOCK_HARDLIMIT]\n"
+        "                [--inode-softlimit INODE_SOFTLIMIT]\n"
+        "                [--inode-hardlimit INODE_HARDLIMIT] <filesystem>\n"
+        "       setquota [-t] {-h|--help|-u|--user|-g|--group|-p|--projid}\n"
+        "                [--block-grace 'notify'|BLOCK_GRACE]\n"
+        "                [--inode-grace 'notify'|INODE_GRACE] <filesystem>\n"
+        "       setquota {-U|-G|-P}\n"
+        "                -b BLOCK_SOFTLIMIT -B BLOCK_HARDLIMIT\n"
+        "                -i INODE_SOFTLIMIT -I INODE_HARDLIMIT <filesystem>\n"
+        "       setquota {-U|--default-usr|-G|--default-grp|-P|--default-prj}\n"
+        "                [--block-softlimit BLOCK_SOFTLIMIT]\n"
+        "                [--block-hardlimit BLOCK_HARDLIMIT]\n"
+        "                [--inode-softlimit INODE_SOFTLIMIT]\n"
+        "                [--inode-hardlimit INODE_HARDLIMIT] <filesystem>\n"
+        "       setquota {-u|-g|-p} UNAME|UID|GNAME|GID|PROJID\n"
+        "                {-d|--default}\n"
         "       -b can be used instead of --block-softlimit/--block-grace\n"
         "       -B can be used instead of --block-hardlimit\n"
         "       -i can be used instead of --inode-softlimit/--inode-grace\n"
         "       -b can be used instead of --block-softlimit/--block-grace\n"
         "       -B can be used instead of --block-hardlimit\n"
         "       -i can be used instead of --inode-softlimit/--inode-grace\n"
@@ -574,11 +569,10 @@ command_t cmdlist[] = {
         "      be notified after the quota is over soft limit but prevents\n"
         "      the soft limit from becoming the hard limit."},
        {"quota", lfs_quota, 0, "Display disk usage and limits.\n"
         "      be notified after the quota is over soft limit but prevents\n"
         "      the soft limit from becoming the hard limit."},
        {"quota", lfs_quota, 0, "Display disk usage and limits.\n"
-        "usage: quota [-q] [-v] [-h] [-o <obd_uuid>|-i <mdt_idx>|-I "
-                      "<ost_idx>]\n"
-        "             [<-u|-g|-p> <uname>|<uid>|<gname>|<gid>|<projid>] <filesystem>\n"
-        "       quota [-o <obd_uuid>|-i <mdt_idx>|-I <ost_idx>] -t <-u|-g|-p> <filesystem>\n"
-       "        quota [-q] [-v] [h] <-U|-G|-P> <filesystem>"},
+        "usage: quota [-q] [-v] [-h] [-o OBD_UUID|-i MDT_IDX|-I OST_IDX]\n"
+        "             [{-u|-g|-p} UNAME|UID|GNAME|GID|PROJID] <filesystem>\n"
+        "       quota [-o OBD_UUID|-i MDT_IDX|-I OST_IDX] -t {-u|-g|-p} <filesystem>\n"
+       "        quota [-q] [-v] [h] {-U|-G|-P} <filesystem>"},
        {"project", lfs_project, 0,
         "Change or list project attribute for specified file or directory.\n"
         "usage: project [-d|-r] <file|directory...>\n"
        {"project", lfs_project, 0,
         "Change or list project attribute for specified file or directory.\n"
         "usage: project [-d|-r] <file|directory...>\n"
@@ -652,11 +646,10 @@ command_t cmdlist[] = {
         "usage: swap_layouts <path1> <path2>"},
        {"migrate", lfs_setstripe_migrate, 0,
         "migrate a directory between MDTs.\n"
         "usage: swap_layouts <path1> <path2>"},
        {"migrate", lfs_setstripe_migrate, 0,
         "migrate a directory between MDTs.\n"
-        "usage: migrate [--mdt-count|-c] <stripe_count>\n"
-        "               [--mdt-hash|-H] <hash_type>\n"
-        "               [--mdt-index|-m] <start_mdt_index>\n"
-        "               [--verbose|-v]\n"
-        "               <directory>\n"
+        "usage: migrate [--mdt-count|-c STRIPE_COUNT]\n"
+        "               [--mdt-hash|-H HASH_TYPE]\n"
+        "               [--mdt-index|-m START_MDT_INDEX] [--verbose|-v]\n"
+        "               <directory>\n"
         "\tmdt:        MDTs to stripe over, if only one MDT is specified\n"
         "                      it's the MDT index of first stripe\n"
         "\tmdt_count:  number of MDTs to stripe a directory over\n"
         "\tmdt:        MDTs to stripe over, if only one MDT is specified\n"
         "                      it's the MDT index of first stripe\n"
         "\tmdt_count:  number of MDTs to stripe a directory over\n"
@@ -667,21 +660,17 @@ command_t cmdlist[] = {
         "\n"
         "migrate file objects from one OST "
         "layout\nto another (may be not safe with concurent writes).\n"
         "\n"
         "migrate file objects from one OST "
         "layout\nto another (may be not safe with concurent writes).\n"
-        "usage: migrate  "
-        "[--stripe-count|-c] <stripe_count>\n"
-        "[--overstripe-count|-C] <stripe_count>\n"
-        "              [--stripe-index|-i] <start_ost_index>\n"
-        "              [--stripe-size|-S] <stripe_size>\n"
-        "              [--pool|-p] <pool_name>\n"
-        "              [--ost|-o] <ost_indices>\n"
-        "              [--block|-b]\n"
-        "              [--non-block|-n]\n"
-        "              [--non-direct|-D]\n"
-        "              <file|directory>\n"
-        "\tstripe_count:     number of OSTs to stripe a file over\n"
-        "\t              Using -C instead of -c allows overstriping, which\n"
-        "\t              will place more than one stripe per OST if\n"
-        "\t              stripe_count is greater than the number of OSTs\n"
+        "usage: migrate [--stripe-count|-c STRIPE_COUNT]\n"
+        "               [--overstripe-count|-C STRIPE_COUNT]\n"
+        "               [--stripe-index|-i START_OST_INDEX]\n"
+        "               [--stripe-size|-S STRIPE_SIZE]\n"
+        "               [--pool|-p <pool_name>] [--ost|-o OST_INDICES]\n"
+        "               [--block|-b] [--non-block|-n] [--non-direct|-D]\n"
+        "               <file|directory>\n"
+        "\tstripe_count:   number of OSTs to stripe a file over\n"
+        "\t                Using -C instead of -c allows overstriping, which\n"
+        "\t                will place more than one stripe per OST if\n"
+        "\t                stripe_count is greater than the number of OSTs\n"
         "\tstripe_ost_index: index of the first OST to stripe a file over\n"
         "\tstripe_size:      number of bytes to store before moving to the next OST\n"
         "\tpool_name:        name of the predefined pool of OSTs\n"
         "\tstripe_ost_index: index of the first OST to stripe a file over\n"
         "\tstripe_size:      number of bytes to store before moving to the next OST\n"
         "\tpool_name:        name of the predefined pool of OSTs\n"
@@ -692,13 +681,13 @@ command_t cmdlist[] = {
        {"mv", lfs_mv, 0,
         "To move directories between MDTs. This command is deprecated, "
         "use \"migrate\" instead.\n"
        {"mv", lfs_mv, 0,
         "To move directories between MDTs. This command is deprecated, "
         "use \"migrate\" instead.\n"
-        "usage: mv <directory|filename> [--mdt-index|-m] <mdt_index> "
+        "usage: mv <directory|filename> [--mdt-index|-m MDT_INDEX] "
         "[--verbose|-v]\n"},
        {"ladvise", lfs_ladvise, 0,
         "Provide servers with advice about access patterns for a file.\n"
         "usage: ladvise [--advice|-a ADVICE] [--start|-s START[kMGT]]\n"
         "               [--background|-b] [--unset|-u]\n\n"
         "[--verbose|-v]\n"},
        {"ladvise", lfs_ladvise, 0,
         "Provide servers with advice about access patterns for a file.\n"
         "usage: ladvise [--advice|-a ADVICE] [--start|-s START[kMGT]]\n"
         "               [--background|-b] [--unset|-u]\n\n"
-        "               {[--end|-e END[kMGT]] | [--length|-l LENGTH[kMGT]]}\n"
+        "               {--end|-e END[kMGT]|--length|-l LENGTH[kMGT]}\n"
         "               {[--mode|-m [READ,WRITE]}\n"
         "               <file> ...\n"},
        {"mirror", lfs_mirror, mirror_cmdlist,
         "               {[--mode|-m [READ,WRITE]}\n"
         "               <file> ...\n"},
        {"mirror", lfs_mirror, mirror_cmdlist,
@@ -3491,7 +3480,7 @@ static int lfs_setstripe_internal(int argc, char **argv,
 /* find        { .val = 'F',   .name = "fid",          .has_arg = no_argument }, */
 /* find        { .val = 'g',   .name = "gid",          .has_arg = no_argument }, */
 /* find        { .val = 'G',   .name = "group",        .has_arg = required_argument }*/
 /* find        { .val = 'F',   .name = "fid",          .has_arg = no_argument }, */
 /* find        { .val = 'g',   .name = "gid",          .has_arg = no_argument }, */
 /* find        { .val = 'G',   .name = "group",        .has_arg = required_argument }*/
-/* find        { .val = 'h',   .name = "help",         .has_arg = no_argument }, */
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
        { .val = 'H',   .name = "mdt-hash",     .has_arg = required_argument},
        { .val = 'i',   .name = "stripe-index", .has_arg = required_argument},
        { .val = 'i',   .name = "stripe_index", .has_arg = required_argument},
        { .val = 'H',   .name = "mdt-hash",     .has_arg = required_argument},
        { .val = 'i',   .name = "stripe-index", .has_arg = required_argument},
        { .val = 'i',   .name = "stripe_index", .has_arg = required_argument},
@@ -3543,7 +3532,7 @@ static int lfs_setstripe_internal(int argc, char **argv,
        snprintf(cmd, sizeof(cmd), "%s %s", progname, argv[0]);
        progname = cmd;
        while ((c = getopt_long(argc, argv,
        snprintf(cmd, sizeof(cmd), "%s %s", progname, argv[0]);
        progname = cmd;
        while ((c = getopt_long(argc, argv,
-                               "bc:C:dDE:f:H:i:I:m:N::no:p:L:s:S:vx:y:z:",
+                               "bc:C:dDE:f:hH:i:I:m:N::no:p:L:s:S:vx:y:z:",
                                long_opts, NULL)) >= 0) {
                size_units = 1;
                switch (c) {
                                long_opts, NULL)) >= 0) {
                size_units = 1;
                switch (c) {
@@ -3866,9 +3855,9 @@ static int lfs_setstripe_internal(int argc, char **argv,
                                                lsa.lsa_nr_tgts, optarg, NULL);
                        if (lsa.lsa_nr_tgts < 0) {
                                fprintf(stderr,
                                                lsa.lsa_nr_tgts, optarg, NULL);
                        if (lsa.lsa_nr_tgts < 0) {
                                fprintf(stderr,
-                                       "%s %s: invalid MDT target(s) '%s'\n",
-                                       progname, argv[0], optarg);
-                               return CMD_HELP;
+                                       "%s: invalid MDT target(s) '%s'\n",
+                                       progname, optarg);
+                               goto usage_error;
                        }
 
                        lsa.lsa_tgts = tgts;
                        }
 
                        lsa.lsa_tgts = tgts;
@@ -4019,8 +4008,9 @@ static int lfs_setstripe_internal(int argc, char **argv,
                        lsa.lsa_extension_comp = true;
                        break;
                default:
                        lsa.lsa_extension_comp = true;
                        break;
                default:
-                       fprintf(stderr, "%s %s: unrecognized option '%s'\n",
-                               progname, argv[0], argv[optind - 1]);
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+               case 'h':
                        goto usage_error;
                }
        }
                        goto usage_error;
                }
        }
@@ -4364,7 +4354,7 @@ static int lfs_setstripe_internal(int argc, char **argv,
                } else if (opc == SO_MIRROR_SPLIT || opc == SO_MIRROR_DELETE) {
                        if (!mirror_id && !comp_id && !lsa.lsa_pool_name) {
                                fprintf(stderr,
                } else if (opc == SO_MIRROR_SPLIT || opc == SO_MIRROR_DELETE) {
                        if (!mirror_id && !comp_id && !lsa.lsa_pool_name) {
                                fprintf(stderr,
-                                       "%s: no mirror specified to delete from '%s'\n",
+                                       "%s: no mirror id, component id, or pool name specified to delete from '%s'\n",
                                        progname, fname);
                                goto usage_error;
                        }
                                        progname, fname);
                                goto usage_error;
                        }
@@ -4920,6 +4910,7 @@ static int lfs_find(int argc, char **argv)
                        .name = "foreign",      .has_arg = optional_argument},
        { .val = 'g',   .name = "gid",          .has_arg = required_argument },
        { .val = 'G',   .name = "group",        .has_arg = required_argument },
                        .name = "foreign",      .has_arg = optional_argument},
        { .val = 'g',   .name = "gid",          .has_arg = required_argument },
        { .val = 'G',   .name = "group",        .has_arg = required_argument },
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
        { .val = 'H',   .name = "mdt-hash",     .has_arg = required_argument },
        { .val = 'i',   .name = "stripe-index", .has_arg = required_argument },
        { .val = 'i',   .name = "stripe_index", .has_arg = required_argument },
        { .val = 'H',   .name = "mdt-hash",     .has_arg = required_argument },
        { .val = 'i',   .name = "stripe-index", .has_arg = required_argument },
        { .val = 'i',   .name = "stripe_index", .has_arg = required_argument },
@@ -4974,7 +4965,7 @@ static int lfs_find(int argc, char **argv)
 
        /* when getopt_long_only() hits '!' it returns 1, puts "!" in optarg */
        while ((c = getopt_long_only(argc, argv,
 
        /* when getopt_long_only() hits '!' it returns 1, puts "!" in optarg */
        while ((c = getopt_long_only(argc, argv,
-               "-0A:b:B:c:C:D:E:g:G:H:i:L:m:M:n:N:O:Ppqrs:S:t:T:u:U:vz:",
+               "-0A:b:B:c:C:D:E:g:G:hH:i:L:m:M:n:N:O:Ppqrs:S:t:T:u:U:vz:",
                long_opts, &optidx)) >= 0) {
                xtime = NULL;
                xsign = NULL;
                long_opts, &optidx)) >= 0) {
                xtime = NULL;
                xsign = NULL;
@@ -5644,11 +5635,11 @@ err_free:
                                param.fp_type = S_IFSOCK;
                                break;
                        default:
                                param.fp_type = S_IFSOCK;
                                break;
                        default:
-                               fprintf(stderr, "error: %s: bad type '%s'\n",
-                                       argv[0], optarg);
+                               fprintf(stderr, "%s: bad type '%s'\n",
+                                       progname, optarg);
                                ret = CMD_HELP;
                                goto err;
                                ret = CMD_HELP;
                                goto err;
-                       };
+                       }
                        break;
                case LFS_FIND_PERM:
                        param.fp_exclude_perm = !!neg_opt;
                        break;
                case LFS_FIND_PERM:
                        param.fp_exclude_perm = !!neg_opt;
@@ -5711,9 +5702,12 @@ err_free:
                        param.fp_exclude_ext_size = !!neg_opt;
                        break;
                default:
                        param.fp_exclude_ext_size = !!neg_opt;
                        break;
                default:
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+               case 'h':
                        ret = CMD_HELP;
                        goto err;
                        ret = CMD_HELP;
                        goto err;
-               };
+               }
        }
 
        if (pathstart == -1) {
        }
 
        if (pathstart == -1) {
@@ -5782,6 +5776,7 @@ static int lfs_getstripe_internal(int argc, char **argv,
        { .val = 'F',   .name = "fid",          .has_arg = no_argument },
        { .val = 'g',   .name = "generation",   .has_arg = no_argument },
 /* find        { .val = 'G',   .name = "group",        .has_arg = required_argument }*/
        { .val = 'F',   .name = "fid",          .has_arg = no_argument },
        { .val = 'g',   .name = "generation",   .has_arg = no_argument },
 /* find        { .val = 'G',   .name = "group",        .has_arg = required_argument }*/
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
 /* dirstripe { .val = 'H', .name = "mdt-hash", .has_arg = required_argument }*/
        { .val = 'i',   .name = "stripe-index", .has_arg = no_argument },
        { .val = 'i',   .name = "stripe_index", .has_arg = no_argument },
 /* dirstripe { .val = 'H', .name = "mdt-hash", .has_arg = required_argument }*/
        { .val = 'i',   .name = "stripe-index", .has_arg = no_argument },
        { .val = 'i',   .name = "stripe_index", .has_arg = no_argument },
@@ -6105,6 +6100,9 @@ static int lfs_getstripe_internal(int argc, char **argv,
                        }
                        break;
                default:
                        }
                        break;
                default:
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+               case 'h':
                        return CMD_HELP;
                }
        }
                        return CMD_HELP;
                }
        }
@@ -6194,6 +6192,7 @@ static int lfs_getdirstripe(int argc, char **argv)
        struct option long_opts[] = {
        { .val = 'c',   .name = "mdt-count",     .has_arg = no_argument },
        { .val = 'D',   .name = "default",       .has_arg = no_argument },
        struct option long_opts[] = {
        { .val = 'c',   .name = "mdt-count",     .has_arg = no_argument },
        { .val = 'D',   .name = "default",       .has_arg = no_argument },
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
        { .val = 'H',   .name = "mdt-hash",      .has_arg = no_argument },
        { .val = 'i',   .name = "mdt-index",     .has_arg = no_argument },
        { .val = 'm',   .name = "mdt-index",     .has_arg = no_argument },
        { .val = 'H',   .name = "mdt-hash",      .has_arg = no_argument },
        { .val = 'i',   .name = "mdt-index",     .has_arg = no_argument },
        { .val = 'm',   .name = "mdt-index",     .has_arg = no_argument },
@@ -6211,7 +6210,7 @@ static int lfs_getdirstripe(int argc, char **argv)
        param.fp_get_lmv = 1;
 
        while ((c = getopt_long(argc, argv,
        param.fp_get_lmv = 1;
 
        while ((c = getopt_long(argc, argv,
-                               "cDHimO:rtTvXy", long_opts, NULL)) != -1) {
+                               "cDhHimO:rtTvXy", long_opts, NULL)) != -1) {
                switch (c) {
                case 'c':
                case 'T':
                switch (c) {
                case 'c':
                case 'T':
@@ -6220,23 +6219,24 @@ static int lfs_getdirstripe(int argc, char **argv)
                case 'D':
                        param.fp_get_default_lmv = 1;
                        break;
                case 'D':
                        param.fp_get_default_lmv = 1;
                        break;
-               case 'i':
-               case 'm':
-                       param.fp_verbose |= VERBOSE_STRIPE_OFFSET;
-                       break;
 #if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(3, 0, 53, 0)
                case 't':
                        fprintf(stderr,
                                "warning: '-t' deprecated, use '--mdt-hash' or '-H' instead\n");
 #if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(3, 0, 53, 0)
                case 't':
                        fprintf(stderr,
                                "warning: '-t' deprecated, use '--mdt-hash' or '-H' instead\n");
+                       /* fallthrough */
 #endif
                case 'H':
                        param.fp_verbose |= VERBOSE_HASH_TYPE;
                        break;
 #endif
                case 'H':
                        param.fp_verbose |= VERBOSE_HASH_TYPE;
                        break;
+               case 'i': /* fallthrough */
+               case 'm':
+                       param.fp_verbose |= VERBOSE_STRIPE_OFFSET;
+                       break;
                case 'O':
                        if (param.fp_obd_uuid) {
                                fprintf(stderr,
                case 'O':
                        if (param.fp_obd_uuid) {
                                fprintf(stderr,
-                                       "error: %s: only one obduuid allowed",
-                                       argv[0]);
+                                       "%s: only one obduuid allowed",
+                                       progname);
                                return CMD_HELP;
                        }
                        param.fp_obd_uuid = (struct obd_uuid *)optarg;
                                return CMD_HELP;
                        }
                        param.fp_obd_uuid = (struct obd_uuid *)optarg;
@@ -6257,8 +6257,10 @@ static int lfs_getdirstripe(int argc, char **argv)
                        param.fp_yaml = 1;
                        break;
                default:
                        param.fp_yaml = 1;
                        break;
                default:
-                       fprintf(stderr, "%s %s: unrecognized option '%s'\n",
-                               progname, argv[0], argv[optind - 1]);
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
                        return CMD_HELP;
                }
        }
                        return CMD_HELP;
                }
        }
@@ -6650,6 +6652,7 @@ static int lfs_setdirstripe(int argc, char **argv)
                        .name = "flags",        .has_arg = required_argument },
        { .val = LFS_LAYOUT_FOREIGN_OPT,
                        .name = "foreign",      .has_arg = optional_argument},
                        .name = "flags",        .has_arg = required_argument },
        { .val = LFS_LAYOUT_FOREIGN_OPT,
                        .name = "foreign",      .has_arg = optional_argument},
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
        { .val = 'H',   .name = "mdt-hash",     .has_arg = required_argument },
 #if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 17, 53, 0)
        { .val = 'i',   .name = "mdt-index",    .has_arg = required_argument },
        { .val = 'H',   .name = "mdt-hash",     .has_arg = required_argument },
 #if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 17, 53, 0)
        { .val = 'i',   .name = "mdt-index",    .has_arg = required_argument },
@@ -6677,7 +6680,7 @@ static int lfs_setdirstripe(int argc, char **argv)
 
        setstripe_args_init(&lsa);
 
 
        setstripe_args_init(&lsa);
 
-       while ((c = getopt_long(argc, argv, "c:dDi:H:m:o:t:T:x:X:",
+       while ((c = getopt_long(argc, argv, "c:dDi:hH:m:o:t:T:x:X:",
                                long_opts, NULL)) >= 0) {
                switch (c) {
                case 0:
                                long_opts, NULL)) >= 0) {
                switch (c) {
                case 0:
@@ -6691,8 +6694,8 @@ static int lfs_setdirstripe(int argc, char **argv)
                            lsa.lsa_stripe_count < -1 ||
                            lsa.lsa_stripe_count > LOV_MAX_STRIPE_COUNT) {
                                fprintf(stderr,
                            lsa.lsa_stripe_count < -1 ||
                            lsa.lsa_stripe_count > LOV_MAX_STRIPE_COUNT) {
                                fprintf(stderr,
-                                       "%s %s: invalid stripe count '%s'\n",
-                                       progname, argv[0], optarg);
+                                       "%s: invalid stripe count '%s'\n",
+                                       progname, optarg);
                                return CMD_HELP;
                        }
                        break;
                                return CMD_HELP;
                        }
                        break;
@@ -6747,6 +6750,7 @@ static int lfs_setdirstripe(int argc, char **argv)
                case 't':
                        fprintf(stderr,
                                "warning: '--hash-type' and '-t' deprecated, use '--mdt-hash' or '-H' instead\n");
                case 't':
                        fprintf(stderr,
                                "warning: '--hash-type' and '-t' deprecated, use '--mdt-hash' or '-H' instead\n");
+                       /* fallthrough */
 #endif
                case 'H':
                        lsa.lsa_pattern = check_hashtype(optarg);
 #endif
                case 'H':
                        lsa.lsa_pattern = check_hashtype(optarg);
@@ -6847,8 +6851,10 @@ static int lfs_setdirstripe(int argc, char **argv)
                        }
                        break;
                default:
                        }
                        break;
                default:
-                       fprintf(stderr, "%s %s: unrecognized option '%s'\n",
-                               progname, argv[0], argv[optind - 1]);
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
                        return CMD_HELP;
                }
        }
                        return CMD_HELP;
                }
        }
@@ -7189,13 +7195,15 @@ static int lfs_df(int argc, char **argv)
                        flags |= MNTDF_VERBOSE;
                        break;
                default:
                        flags |= MNTDF_VERBOSE;
                        break;
                default:
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
                        return CMD_HELP;
                }
        }
        if (optind < argc && !realpath(argv[optind], path)) {
                rc = -errno;
                        return CMD_HELP;
                }
        }
        if (optind < argc && !realpath(argv[optind], path)) {
                rc = -errno;
-               fprintf(stderr, "error: invalid path '%s': %s\n",
-                       argv[optind], strerror(-rc));
+               fprintf(stderr, "%s: invalid path '%s': %s\n",
+                       progname, argv[optind], strerror(-rc));
                return rc;
        }
 
                return rc;
        }
 
@@ -7265,8 +7273,11 @@ static int lfs_getname(int argc, char **argv)
                case 'n':
                        opt_fsname = true;
                        break;
                case 'n':
                        opt_fsname = true;
                        break;
-               case 'h':
                default:
                default:
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
                        return CMD_HELP;
                }
        }
                        return CMD_HELP;
                }
        }
@@ -7467,6 +7478,7 @@ int lfs_setquota_times(int argc, char **argv, struct if_quotactl *qctl)
        struct option long_opts[] = {
        { .val = 'b',   .name = "block-grace",  .has_arg = required_argument },
        { .val = 'g',   .name = "group",        .has_arg = no_argument },
        struct option long_opts[] = {
        { .val = 'b',   .name = "block-grace",  .has_arg = required_argument },
        { .val = 'g',   .name = "group",        .has_arg = no_argument },
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
        { .val = 'i',   .name = "inode-grace",  .has_arg = required_argument },
        { .val = 'p',   .name = "projid",       .has_arg = no_argument },
        { .val = 't',   .name = "times",        .has_arg = no_argument },
        { .val = 'i',   .name = "inode-grace",  .has_arg = required_argument },
        { .val = 'p',   .name = "projid",       .has_arg = no_argument },
        { .val = 't',   .name = "times",        .has_arg = no_argument },
@@ -7479,7 +7491,7 @@ int lfs_setquota_times(int argc, char **argv, struct if_quotactl *qctl)
        qctl->qc_cmd  = LUSTRE_Q_SETINFO;
        qctl->qc_type = ALLQUOTA;
 
        qctl->qc_cmd  = LUSTRE_Q_SETINFO;
        qctl->qc_type = ALLQUOTA;
 
-       while ((c = getopt_long(argc, argv, "b:gi:ptu",
+       while ((c = getopt_long(argc, argv, "b:ghi:ptu",
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'u':
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'u':
@@ -7493,7 +7505,8 @@ int lfs_setquota_times(int argc, char **argv, struct if_quotactl *qctl)
 quota_type:
                        if (qctl->qc_type != ALLQUOTA) {
                                fprintf(stderr,
 quota_type:
                        if (qctl->qc_type != ALLQUOTA) {
                                fprintf(stderr,
-                                       "error: -u/g/p can't be used more than once\n");
+                                       "%s: -u/g/p cannot be used more than once\n",
+                                       progname);
                                return CMD_HELP;
                        }
                        qctl->qc_type = qtype;
                                return CMD_HELP;
                        }
                        qctl->qc_type = qtype;
@@ -7506,8 +7519,8 @@ quota_type:
                                dqi->dqi_bgrace = str2sec(optarg);
                                if (dqi->dqi_bgrace >= NOTIFY_GRACE_TIME) {
                                        fprintf(stderr,
                                dqi->dqi_bgrace = str2sec(optarg);
                                if (dqi->dqi_bgrace >= NOTIFY_GRACE_TIME) {
                                        fprintf(stderr,
-                                               "error: bad block-grace: %s\n",
-                                               optarg);
+                                               "%s: bad block-grace: %s\n",
+                                               progname, optarg);
                                        return CMD_HELP;
                                }
                        }
                                        return CMD_HELP;
                                }
                        }
@@ -7521,8 +7534,8 @@ quota_type:
                                dqi->dqi_igrace = str2sec(optarg);
                                if (dqi->dqi_igrace >= NOTIFY_GRACE_TIME) {
                                        fprintf(stderr,
                                dqi->dqi_igrace = str2sec(optarg);
                                if (dqi->dqi_igrace >= NOTIFY_GRACE_TIME) {
                                        fprintf(stderr,
-                                               "error: bad inode-grace: %s\n",
-                                               optarg);
+                                               "%s: bad inode-grace: %s\n",
+                                               progname, optarg);
                                        return CMD_HELP;
                                }
                        }
                                        return CMD_HELP;
                                }
                        }
@@ -7538,17 +7551,23 @@ quota_type:
                        break;
                /* getopt prints error message for us when opterr != 0 */
                default:
                        break;
                /* getopt prints error message for us when opterr != 0 */
                default:
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
                        return CMD_HELP;
                }
        }
 
        if (qctl->qc_type == ALLQUOTA) {
                        return CMD_HELP;
                }
        }
 
        if (qctl->qc_type == ALLQUOTA) {
-               fprintf(stderr, "error: neither -u, -g nor -p specified\n");
+               fprintf(stderr, "%s: neither -u, -g nor -p specified\n",
+                       progname);
                return CMD_HELP;
        }
 
        if (optind != argc - 1) {
                return CMD_HELP;
        }
 
        if (optind != argc - 1) {
-               fprintf(stderr, "error: unexpected parameters encountered\n");
+               fprintf(stderr, "%s: unexpected parameter '%s'\n",
+                       progname, argv[optind + 1]);
                return CMD_HELP;
        }
 
                return CMD_HELP;
        }
 
@@ -7584,6 +7603,7 @@ int lfs_setquota(int argc, char **argv)
        { .val = 'd',   .name = "default",      .has_arg = no_argument },
        { .val = 'g',   .name = "group",        .has_arg = required_argument },
        { .val = 'G',   .name = "default-grp",  .has_arg = no_argument },
        { .val = 'd',   .name = "default",      .has_arg = no_argument },
        { .val = 'g',   .name = "group",        .has_arg = required_argument },
        { .val = 'G',   .name = "default-grp",  .has_arg = no_argument },
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
        { .val = 'i',   .name = "inode-softlimit",
                                                .has_arg = required_argument },
        { .val = 'I',   .name = "inode-hardlimit",
        { .val = 'i',   .name = "inode-softlimit",
                                                .has_arg = required_argument },
        { .val = 'I',   .name = "inode-hardlimit",
@@ -7619,7 +7639,7 @@ int lfs_setquota(int argc, char **argv)
                                   * isn't reinitialized from command line
                                   */
 
                                   * isn't reinitialized from command line
                                   */
 
-       while ((c = getopt_long(argc, argv, "b:B:dg:Gi:I:p:Pu:U",
+       while ((c = getopt_long(argc, argv, "b:B:dg:Ghi:I:p:Pu:U",
                long_opts, NULL)) != -1) {
                switch (c) {
                case 'U':
                long_opts, NULL)) != -1) {
                switch (c) {
                case 'U':
@@ -7742,6 +7762,8 @@ quota_type_def:
                        fprintf(stderr,
                                "%s setquota: unrecognized option '%s'\n",
                                progname, argv[optind - 1]);
                        fprintf(stderr,
                                "%s setquota: unrecognized option '%s'\n",
                                progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
                        rc = CMD_HELP;
                        goto out;
                }
                        rc = CMD_HELP;
                        goto out;
                }
@@ -9331,20 +9353,20 @@ static int lfs_rmfid(int argc, char **argv)
 
 static int lfs_data_version(int argc, char **argv)
 {
 
 static int lfs_data_version(int argc, char **argv)
 {
-       char *path;
+       int data_version_flags = LL_DV_RD_FLUSH; /* Read by default */
        __u64 data_version;
        __u64 data_version;
+       char *path;
        int fd;
        int rc;
        int c;
        int fd;
        int rc;
        int c;
-       int data_version_flags = LL_DV_RD_FLUSH; /* Read by default */
 
        if (argc < 2) {
 
        if (argc < 2) {
-               fprintf(stderr, "%s data_version: FILE must be specified\n",
+               fprintf(stderr, "%s: FILE must be specified\n",
                        progname);
                return CMD_HELP;
        }
 
                        progname);
                return CMD_HELP;
        }
 
-       while ((c = getopt(argc, argv, "nrw")) != -1) {
+       while ((c = getopt(argc, argv, "hnrw")) != -1) {
                switch (c) {
                case 'n':
                        data_version_flags = 0;
                switch (c) {
                case 'n':
                        data_version_flags = 0;
@@ -9359,6 +9381,8 @@ static int lfs_data_version(int argc, char **argv)
                        fprintf(stderr,
                                "%s data_version: unrecognized option '%s'\n",
                                progname, argv[optind - 1]);
                        fprintf(stderr,
                                "%s data_version: unrecognized option '%s'\n",
                                progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
                        return CMD_HELP;
                }
        }
                        return CMD_HELP;
                }
        }
@@ -9453,11 +9477,11 @@ static int lfs_hsm_change_flags(int argc, char **argv, int mode)
        { .val = 'a',   .name = "noarchive",    .has_arg = no_argument },
        { .val = 'd',   .name = "dirty",        .has_arg = no_argument },
        { .val = 'e',   .name = "exists",       .has_arg = no_argument },
        { .val = 'a',   .name = "noarchive",    .has_arg = no_argument },
        { .val = 'd',   .name = "dirty",        .has_arg = no_argument },
        { .val = 'e',   .name = "exists",       .has_arg = no_argument },
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
+       { .val = 'i',   .name = "archive-id",   .has_arg = required_argument },
        { .val = 'l',   .name = "lost",         .has_arg = no_argument },
        { .val = 'r',   .name = "norelease",    .has_arg = no_argument },
        { .val = 'l',   .name = "lost",         .has_arg = no_argument },
        { .val = 'r',   .name = "norelease",    .has_arg = no_argument },
-       { .val = 'i',   .name = "archive-id",   .has_arg = required_argument },
        { .name = NULL } };
        { .name = NULL } };
-       char short_opts[] = "lraAdei:";
        __u64 mask = 0;
        int c, rc;
        char *path;
        __u64 mask = 0;
        int c, rc;
        char *path;
@@ -9467,7 +9491,7 @@ static int lfs_hsm_change_flags(int argc, char **argv, int mode)
        if (argc < 3)
                return CMD_HELP;
 
        if (argc < 3)
                return CMD_HELP;
 
-       while ((c = getopt_long(argc, argv, short_opts,
+       while ((c = getopt_long(argc, argv, "aAdehi:lr",
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'l':
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'l':
@@ -9492,16 +9516,17 @@ static int lfs_hsm_change_flags(int argc, char **argv, int mode)
                        errno = 0;
                        archive_id = strtol(optarg, &end, 10);
                        if (errno != 0 || *end != '\0' || archive_id < 0) {
                        errno = 0;
                        archive_id = strtol(optarg, &end, 10);
                        if (errno != 0 || *end != '\0' || archive_id < 0) {
-                               fprintf(stderr, "invalid archive_id: '%s'\n",
-                                       end);
+                               fprintf(stderr,
+                                       "%s: invalid archive_id: '%s'\n",
+                                       progname, end);
                                return CMD_HELP;
                        }
                        break;
                                return CMD_HELP;
                        }
                        break;
-               case '?':
-                       return CMD_HELP;
                default:
                default:
-                       fprintf(stderr, "error: %s: option '%s' unrecognized\n",
-                               argv[0], argv[optind - 1]);
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
                        return CMD_HELP;
                }
        }
                        return CMD_HELP;
                }
        }
@@ -9683,11 +9708,11 @@ static int lfs_hsm_request(int argc, char **argv, int action)
        struct option long_opts[] = {
        { .val = 'a',   .name = "archive",      .has_arg = required_argument },
        { .val = 'D',   .name = "data",         .has_arg = required_argument },
        struct option long_opts[] = {
        { .val = 'a',   .name = "archive",      .has_arg = required_argument },
        { .val = 'D',   .name = "data",         .has_arg = required_argument },
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
        { .val = 'l',   .name = "filelist",     .has_arg = required_argument },
        { .val = 'm',   .name = "mntpath",      .has_arg = required_argument },
        { .name = NULL } };
        dev_t last_dev = 0;
        { .val = 'l',   .name = "filelist",     .has_arg = required_argument },
        { .val = 'm',   .name = "mntpath",      .has_arg = required_argument },
        { .name = NULL } };
        dev_t last_dev = 0;
-       char short_opts[] = "l:D:a:m:";
        struct hsm_user_request *hur, *oldhur;
        int c, i;
        size_t len;
        struct hsm_user_request *hur, *oldhur;
        int c, i;
        size_t len;
@@ -9707,7 +9732,7 @@ static int lfs_hsm_request(int argc, char **argv, int action)
        if (argc < 2)
                return CMD_HELP;
 
        if (argc < 2)
                return CMD_HELP;
 
-       while ((c = getopt_long(argc, argv, short_opts,
+       while ((c = getopt_long(argc, argv, "a:D:hl:m:",
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'l':
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'l':
@@ -9731,11 +9756,11 @@ static int lfs_hsm_request(int argc, char **argv, int action)
                                some_file = strdup(optarg);
                        }
                        break;
                                some_file = strdup(optarg);
                        }
                        break;
-               case '?':
-                       return CMD_HELP;
                default:
                default:
-                       fprintf(stderr, "error: %s: option '%s' unrecognized\n",
-                               argv[0], argv[optind - 1]);
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
                        return CMD_HELP;
                }
        }
                        return CMD_HELP;
                }
        }
@@ -9915,7 +9940,7 @@ int lfs_get_mode(const char *string)
        for (mode = 0; mode < ARRAY_SIZE(lock_mode_names); mode++) {
                if (lock_mode_names[mode] == NULL)
                        continue;
        for (mode = 0; mode < ARRAY_SIZE(lock_mode_names); mode++) {
                if (lock_mode_names[mode] == NULL)
                        continue;
-               if (strcmp(string, lock_mode_names[mode]) == 0)
+               if (strcasecmp(string, lock_mode_names[mode]) == 0)
                        return mode;
        }
 
                        return mode;
        }
 
@@ -9943,27 +9968,25 @@ static int lfs_ladvise(int argc, char **argv)
        { .val = 'a',   .name = "advice",       .has_arg = required_argument },
        { .val = 'b',   .name = "background",   .has_arg = no_argument },
        { .val = 'e',   .name = "end",          .has_arg = required_argument },
        { .val = 'a',   .name = "advice",       .has_arg = required_argument },
        { .val = 'b',   .name = "background",   .has_arg = no_argument },
        { .val = 'e',   .name = "end",          .has_arg = required_argument },
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
        { .val = 'l',   .name = "length",       .has_arg = required_argument },
        { .val = 'm',   .name = "mode",         .has_arg = required_argument },
        { .val = 's',   .name = "start",        .has_arg = required_argument },
        { .val = 'u',   .name = "unset",        .has_arg = no_argument },
        { .name = NULL } };
        { .val = 'l',   .name = "length",       .has_arg = required_argument },
        { .val = 'm',   .name = "mode",         .has_arg = required_argument },
        { .val = 's',   .name = "start",        .has_arg = required_argument },
        { .val = 'u',   .name = "unset",        .has_arg = no_argument },
        { .name = NULL } };
-       char                     short_opts[] = "a:be:l:m:s:u";
-       int                      c;
-       int                      rc = 0;
-       const char              *path;
-       int                      fd;
-       struct llapi_lu_ladvise  advice;
-       enum lu_ladvise_type     advice_type = LU_LADVISE_INVALID;
-       unsigned long long       start = 0;
-       unsigned long long       end = LUSTRE_EOF;
-       unsigned long long       length = 0;
-       unsigned long long       size_units;
-       unsigned long long       flags = 0;
-       int                      mode = 0;
+       struct llapi_lu_ladvise advice;
+       enum lu_ladvise_type advice_type = LU_LADVISE_INVALID;
+       unsigned long long start = 0;
+       unsigned long long end = LUSTRE_EOF;
+       unsigned long long length = 0;
+       unsigned long long size_units;
+       unsigned long long flags = 0;
+       int c, fd, rc = 0;
+       const char *path;
+       int mode = 0;
 
        optind = 0;
 
        optind = 0;
-       while ((c = getopt_long(argc, argv, short_opts,
+       while ((c = getopt_long(argc, argv, "a:be:hl:m:s:u",
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'a':
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'a':
@@ -9971,7 +9994,7 @@ static int lfs_ladvise(int argc, char **argv)
                        if (advice_type == LU_LADVISE_INVALID) {
                                fprintf(stderr,
                                        "%s: invalid advice type '%s'\n",
                        if (advice_type == LU_LADVISE_INVALID) {
                                fprintf(stderr,
                                        "%s: invalid advice type '%s'\n",
-                                       argv[0], optarg);
+                                       progname, optarg);
                                fprintf(stderr, "Valid types:");
 
                                for (advice_type = 0;
                                fprintf(stderr, "Valid types:");
 
                                for (advice_type = 0;
@@ -10033,11 +10056,11 @@ static int lfs_ladvise(int argc, char **argv)
                                return CMD_HELP;
                        }
                        break;
                                return CMD_HELP;
                        }
                        break;
-               case '?':
-                       return CMD_HELP;
                default:
                default:
-                       fprintf(stderr, "%s: option '%s' unrecognized\n",
-                               argv[0], argv[optind - 1]);
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
                        return CMD_HELP;
                }
        }
                        return CMD_HELP;
                }
        }
@@ -10196,6 +10219,7 @@ static int lfs_heat_set(int argc, char **argv)
 {
        struct option long_opts[] = {
        { .val = 'c',   .name = "clear",        .has_arg = no_argument },
 {
        struct option long_opts[] = {
        { .val = 'c',   .name = "clear",        .has_arg = no_argument },
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
        { .val = 'o',   .name = "off",          .has_arg = no_argument },
        { .val = 'O',   .name = "on",           .has_arg = no_argument },
        { .name = NULL } };
        { .val = 'o',   .name = "off",          .has_arg = no_argument },
        { .val = 'O',   .name = "on",           .has_arg = no_argument },
        { .name = NULL } };
@@ -10209,7 +10233,7 @@ static int lfs_heat_set(int argc, char **argv)
                return CMD_HELP;
 
        optind = 0;
                return CMD_HELP;
 
        optind = 0;
-       while ((c = getopt_long(argc, argv, "coO", long_opts, NULL)) != -1) {
+       while ((c = getopt_long(argc, argv, "choO", long_opts, NULL)) != -1) {
                switch (c) {
                case 'c':
                        flags |= LU_HEAT_FLAG_CLEAR;
                switch (c) {
                case 'c':
                        flags |= LU_HEAT_FLAG_CLEAR;
@@ -10221,11 +10245,11 @@ static int lfs_heat_set(int argc, char **argv)
                case 'O':
                        flags &= ~LU_HEAT_FLAG_OFF;
                        break;
                case 'O':
                        flags &= ~LU_HEAT_FLAG_OFF;
                        break;
-               case '?':
-                       return CMD_HELP;
                default:
                default:
-                       fprintf(stderr, "%s: option '%s' unrecognized\n",
-                               argv[0], argv[optind - 1]);
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
                        return CMD_HELP;
                }
        }
                        return CMD_HELP;
                }
        }
@@ -10637,17 +10661,17 @@ error:
 
 static inline int lfs_mirror_resync(int argc, char **argv)
 {
 
 static inline int lfs_mirror_resync(int argc, char **argv)
 {
+       struct option long_opts[] = {
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
+       { .val = 'o',   .name = "only",         .has_arg = required_argument },
+       { .name = NULL } };
        struct ll_ioc_lease *ioc = NULL;
        __u16 mirror_ids[128] = { 0 };
        int ids_nr = 0;
        int c;
        int rc = 0;
 
        struct ll_ioc_lease *ioc = NULL;
        __u16 mirror_ids[128] = { 0 };
        int ids_nr = 0;
        int c;
        int rc = 0;
 
-       struct option long_opts[] = {
-       { .val = 'o',   .name = "only",         .has_arg = required_argument },
-       { .name = NULL } };
-
-       while ((c = getopt_long(argc, argv, "o:", long_opts, NULL)) >= 0) {
+       while ((c = getopt_long(argc, argv, "ho:", long_opts, NULL)) >= 0) {
                switch (c) {
                case 'o':
                        rc = parse_mirror_ids(mirror_ids,
                switch (c) {
                case 'o':
                        rc = parse_mirror_ids(mirror_ids,
@@ -10662,9 +10686,11 @@ static inline int lfs_mirror_resync(int argc, char **argv)
                        ids_nr = rc;
                        break;
                default:
                        ids_nr = rc;
                        break;
                default:
-                       fprintf(stderr, "%s: options '%s' unrecognized.\n",
-                               argv[0], argv[optind - 1]);
-                       rc = -EINVAL;
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
+                       rc = CMD_HELP;
                        goto error;
                }
        }
                        goto error;
                }
        }
@@ -10777,11 +10803,12 @@ static inline int lfs_mirror_read(int argc, char **argv)
        const size_t buflen = 4 << 20;
        off_t pos;
        struct option long_opts[] = {
        const size_t buflen = 4 << 20;
        off_t pos;
        struct option long_opts[] = {
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
        { .val = 'N',   .name = "mirror-id",    .has_arg = required_argument },
        { .val = 'o',   .name = "outfile",      .has_arg = required_argument },
        { .name = NULL } };
 
        { .val = 'N',   .name = "mirror-id",    .has_arg = required_argument },
        { .val = 'o',   .name = "outfile",      .has_arg = required_argument },
        { .name = NULL } };
 
-       while ((c = getopt_long(argc, argv, "N:o:", long_opts, NULL)) >= 0) {
+       while ((c = getopt_long(argc, argv, "hN:o:", long_opts, NULL)) >= 0) {
                char *end;
 
                switch (c) {
                char *end;
 
                switch (c) {
@@ -10805,9 +10832,11 @@ static inline int lfs_mirror_read(int argc, char **argv)
                        outfile = optarg;
                        break;
                default:
                        outfile = optarg;
                        break;
                default:
-                       fprintf(stderr, "%s: option '%s' unrecognized.\n",
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
                                progname, argv[optind - 1]);
                                progname, argv[optind - 1]);
-                       return -EINVAL;
+                       /* fallthrough */
+               case 'h':
+                       return CMD_HELP;
                }
        }
 
                }
        }
 
@@ -10938,13 +10967,13 @@ static inline int lfs_mirror_write(int argc, char **argv)
        off_t pos;
        size_t page_size = sysconf(_SC_PAGESIZE);
        struct ll_ioc_lease_id ioc;
        off_t pos;
        size_t page_size = sysconf(_SC_PAGESIZE);
        struct ll_ioc_lease_id ioc;
-
        struct option long_opts[] = {
        struct option long_opts[] = {
-       { .val = 'N',   .name = "mirror-id",    .has_arg = required_argument },
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
        { .val = 'i',   .name = "inputfile",    .has_arg = required_argument },
        { .val = 'i',   .name = "inputfile",    .has_arg = required_argument },
+       { .val = 'N',   .name = "mirror-id",    .has_arg = required_argument },
        { .name = NULL } };
 
        { .name = NULL } };
 
-       while ((c = getopt_long(argc, argv, "N:i:", long_opts, NULL)) >= 0) {
+       while ((c = getopt_long(argc, argv, "hi:N:", long_opts, NULL)) >= 0) {
                char *end;
 
                switch (c) {
                char *end;
 
                switch (c) {
@@ -10968,9 +10997,11 @@ static inline int lfs_mirror_write(int argc, char **argv)
                        inputfile = optarg;
                        break;
                default:
                        inputfile = optarg;
                        break;
                default:
-                       fprintf(stderr, "%s: option '%s' unrecognized\n",
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
                                progname, argv[optind - 1]);
                                progname, argv[optind - 1]);
-                       return -EINVAL;
+                       /* fallthrough */
+               case 'h':
+                       return CMD_HELP;
                }
        }
 
                }
        }
 
@@ -11169,13 +11200,16 @@ static inline int lfs_mirror_copy(int argc, char **argv)
        ssize_t copied;
        struct ll_ioc_lease *ioc = NULL;
        struct ll_ioc_lease_id *resync_ioc;
        ssize_t copied;
        struct ll_ioc_lease *ioc = NULL;
        struct ll_ioc_lease_id *resync_ioc;
-
        struct option long_opts[] = {
        struct option long_opts[] = {
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
        { .val = 'i',   .name = "read-mirror",  .has_arg = required_argument },
        { .val = 'o',   .name = "write-mirror", .has_arg = required_argument },
        { .name = NULL } };
        { .val = 'i',   .name = "read-mirror",  .has_arg = required_argument },
        { .val = 'o',   .name = "write-mirror", .has_arg = required_argument },
        { .name = NULL } };
+       char cmd[PATH_MAX];
 
 
-       while ((c = getopt_long(argc, argv, "i:o:", long_opts, NULL)) >= 0) {
+       snprintf(cmd, sizeof(cmd), "%s %s", progname, argv[0]);
+       progname = cmd;
+       while ((c = getopt_long(argc, argv, "hi:o:", long_opts, NULL)) >= 0) {
                char *end;
 
                switch (c) {
                char *end;
 
                switch (c) {
@@ -11187,8 +11221,8 @@ static inline int lfs_mirror_copy(int argc, char **argv)
                        if (errno != 0 || *end != '\0' || id == 0 ||
                            id > UINT16_MAX) {
                                fprintf(stderr,
                        if (errno != 0 || *end != '\0' || id == 0 ||
                            id > UINT16_MAX) {
                                fprintf(stderr,
-                                       "%s %s: invalid read mirror ID '%s'\n",
-                                       progname, argv[0], optarg);
+                                       "%s: invalid read mirror ID '%s'\n",
+                                       progname, optarg);
                                return rc;
                        }
 
                                return rc;
                        }
 
@@ -11209,9 +11243,11 @@ static inline int lfs_mirror_copy(int argc, char **argv)
                        }
                        break;
                default:
                        }
                        break;
                default:
-                       fprintf(stderr, "%s: option '%s' unrecognized\n",
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
                                progname, argv[optind - 1]);
                                progname, argv[optind - 1]);
-                       return -EINVAL;
+                       /* fallthrough */
+               case 'h':
+                       return CMD_HELP;
                }
        }
 
                }
        }
 
@@ -11940,13 +11976,14 @@ static inline int lfs_mirror_verify(int argc, char **argv)
        char cmd[PATH_MAX];
 
        struct option long_opts[] = {
        char cmd[PATH_MAX];
 
        struct option long_opts[] = {
+       { .val = 'h',   .name = "help",         .has_arg = no_argument },
        { .val = 'o',   .name = "only",         .has_arg = required_argument },
        { .val = 'v',   .name = "verbose",      .has_arg = no_argument },
        { .name = NULL } };
 
        snprintf(cmd, sizeof(cmd), "%s %s", progname, argv[0]);
        progname = cmd;
        { .val = 'o',   .name = "only",         .has_arg = required_argument },
        { .val = 'v',   .name = "verbose",      .has_arg = no_argument },
        { .name = NULL } };
 
        snprintf(cmd, sizeof(cmd), "%s %s", progname, argv[0]);
        progname = cmd;
-       while ((c = getopt_long(argc, argv, "o:v", long_opts, NULL)) >= 0) {
+       while ((c = getopt_long(argc, argv, "ho:v", long_opts, NULL)) >= 0) {
                switch (c) {
                case 'o':
                        rc = parse_mirror_ids(mirror_ids,
                switch (c) {
                case 'o':
                        rc = parse_mirror_ids(mirror_ids,
@@ -11971,9 +12008,11 @@ static inline int lfs_mirror_verify(int argc, char **argv)
                        verbose++;
                        break;
                default:
                        verbose++;
                        break;
                default:
-                       fprintf(stderr, "%s: option '%s' unrecognized.\n",
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
                                progname, argv[optind - 1]);
                                progname, argv[optind - 1]);
-                       rc = -EINVAL;
+                       /* fallthrough */
+               case 'h':
+                       rc = CMD_HELP;
                        goto error;
                }
        }
                        goto error;
                }
        }
@@ -12064,20 +12103,22 @@ static int lfs_getsom(int argc, char **argv)
        enum lfs_som_type type = LFS_SOM_ATTR_ALL;
        int rc = 0, c;
 
        enum lfs_som_type type = LFS_SOM_ATTR_ALL;
        int rc = 0, c;
 
-       while ((c = getopt(argc, argv, "sbf")) != -1) {
+       while ((c = getopt(argc, argv, "bfhs")) != -1) {
                switch (c) {
                switch (c) {
-               case 's':
-                       type = LFS_SOM_SIZE;
-                       break;
                case 'b':
                        type = LFS_SOM_BLOCKS;
                        break;
                case 'f':
                        type = LFS_SOM_FLAGS;
                        break;
                case 'b':
                        type = LFS_SOM_BLOCKS;
                        break;
                case 'f':
                        type = LFS_SOM_FLAGS;
                        break;
+               case 's':
+                       type = LFS_SOM_SIZE;
+                       break;
                default:
                default:
-                       fprintf(stderr, "%s: invalid option '%c'\n",
-                               progname, optopt);
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
                        return CMD_HELP;
                }
        }
                        return CMD_HELP;
                }
        }
@@ -12150,6 +12191,7 @@ static int lfs_mirror_list_commands(int argc, char **argv)
 static int lfs_pcc_attach(int argc, char **argv)
 {
        struct option long_opts[] = {
 static int lfs_pcc_attach(int argc, char **argv)
 {
        struct option long_opts[] = {
+       { .val = 'h',   .name = "help", .has_arg = no_argument },
        { .val = 'i',   .name = "id",   .has_arg = required_argument },
        { .name = NULL } };
        int c;
        { .val = 'i',   .name = "id",   .has_arg = required_argument },
        { .name = NULL } };
        int c;
@@ -12161,7 +12203,7 @@ static int lfs_pcc_attach(int argc, char **argv)
        enum lu_pcc_type type = LU_PCC_READWRITE;
 
        optind = 0;
        enum lu_pcc_type type = LU_PCC_READWRITE;
 
        optind = 0;
-       while ((c = getopt_long(argc, argv, "i:",
+       while ((c = getopt_long(argc, argv, "hi:",
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'i':
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'i':
@@ -12171,15 +12213,15 @@ static int lfs_pcc_attach(int argc, char **argv)
                            archive_id == 0 || archive_id > UINT32_MAX) {
                                fprintf(stderr,
                                        "error: %s: bad archive ID '%s'\n",
                            archive_id == 0 || archive_id > UINT32_MAX) {
                                fprintf(stderr,
                                        "error: %s: bad archive ID '%s'\n",
-                                       argv[0], optarg);
+                                       progname, optarg);
                                return CMD_HELP;
                        }
                        break;
                                return CMD_HELP;
                        }
                        break;
-               case '?':
-                       return CMD_HELP;
                default:
                default:
-                       fprintf(stderr, "%s: option '%s' unrecognized\n",
-                               argv[0], argv[optind - 1]);
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
                        return CMD_HELP;
                }
        }
                        return CMD_HELP;
                }
        }
@@ -12222,20 +12264,20 @@ static int lfs_pcc_attach(int argc, char **argv)
 static int lfs_pcc_attach_fid(int argc, char **argv)
 {
        struct option long_opts[] = {
 static int lfs_pcc_attach_fid(int argc, char **argv)
 {
        struct option long_opts[] = {
+       { .val = 'h',   .name = "help", .has_arg = no_argument },
        { .val = 'i',   .name = "id",   .has_arg = required_argument },
        { .val = 'm',   .name = "mnt",  .has_arg = required_argument },
        { .name = NULL } };
        { .val = 'i',   .name = "id",   .has_arg = required_argument },
        { .val = 'm',   .name = "mnt",  .has_arg = required_argument },
        { .name = NULL } };
-       char                     short_opts[] = "i:m:";
-       int                      c;
-       int                      rc = 0;
-       __u32                    archive_id = 0;
-       char                    *end;
-       const char              *mntpath = NULL;
-       const char              *fidstr;
-       enum lu_pcc_type         type = LU_PCC_READWRITE;
+       int c;
+       int rc = 0;
+       __u32 archive_id = 0;
+       char *end;
+       const char *mntpath = NULL;
+       const char *fidstr;
+       enum lu_pcc_type type = LU_PCC_READWRITE;
 
        optind = 0;
 
        optind = 0;
-       while ((c = getopt_long(argc, argv, short_opts,
+       while ((c = getopt_long(argc, argv, "hi:m:",
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'i':
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'i':
@@ -12252,11 +12294,11 @@ static int lfs_pcc_attach_fid(int argc, char **argv)
                case 'm':
                        mntpath = optarg;
                        break;
                case 'm':
                        mntpath = optarg;
                        break;
-               case '?':
-                       return CMD_HELP;
                default:
                default:
-                       fprintf(stderr, "%s: option '%s' unrecognized\n",
-                               argv[0], argv[optind - 1]);
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
                        return CMD_HELP;
                }
        }
                        return CMD_HELP;
                }
        }
@@ -12299,27 +12341,27 @@ static int lfs_pcc_attach_fid(int argc, char **argv)
 static int lfs_pcc_detach(int argc, char **argv)
 {
        struct option long_opts[] = {
 static int lfs_pcc_detach(int argc, char **argv)
 {
        struct option long_opts[] = {
+       { .val = 'h',   .name = "help", .has_arg = no_argument },
        { .val = 'k',   .name = "keep", .has_arg = no_argument },
        { .name = NULL } };
        { .val = 'k',   .name = "keep", .has_arg = no_argument },
        { .name = NULL } };
-       char                     short_opts[] = "k";
-       int                      c;
-       int                      rc = 0;
-       const char              *path;
-       char                     fullpath[PATH_MAX];
-       __u32                    detach_opt = PCC_DETACH_OPT_UNCACHE;
+       int c;
+       int rc = 0;
+       const char *path;
+       char fullpath[PATH_MAX];
+       __u32 detach_opt = PCC_DETACH_OPT_UNCACHE;
 
        optind = 0;
 
        optind = 0;
-       while ((c = getopt_long(argc, argv, short_opts,
+       while ((c = getopt_long(argc, argv, "hk",
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'k':
                        detach_opt = PCC_DETACH_OPT_NONE;
                        break;
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'k':
                        detach_opt = PCC_DETACH_OPT_NONE;
                        break;
-               case '?':
-                       return CMD_HELP;
                default:
                default:
-                       fprintf(stderr, "%s: option '%s' unrecognized\n",
-                               argv[0], argv[optind - 1]);
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
                        return CMD_HELP;
                }
        }
                        return CMD_HELP;
                }
        }
@@ -12352,27 +12394,27 @@ static int lfs_pcc_detach(int argc, char **argv)
 static int lfs_pcc_detach_fid(int argc, char **argv)
 {
        struct option long_opts[] = {
 static int lfs_pcc_detach_fid(int argc, char **argv)
 {
        struct option long_opts[] = {
+       { .val = 'h',   .name = "help", .has_arg = no_argument },
        { .val = 'k',   .name = "keep", .has_arg = no_argument },
        { .name = NULL } };
        { .val = 'k',   .name = "keep", .has_arg = no_argument },
        { .name = NULL } };
-       char             short_opts[] = "k";
-       int              c;
-       int              rc = 0;
-       const char      *fid;
-       const char      *mntpath;
-       __u32            detach_opt = PCC_DETACH_OPT_UNCACHE;
+       int c;
+       int rc = 0;
+       const char *fid;
+       const char *mntpath;
+       __u32 detach_opt = PCC_DETACH_OPT_UNCACHE;
 
        optind = 0;
 
        optind = 0;
-       while ((c = getopt_long(argc, argv, short_opts,
+       while ((c = getopt_long(argc, argv, "hk",
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'k':
                        detach_opt = PCC_DETACH_OPT_NONE;
                        break;
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'k':
                        detach_opt = PCC_DETACH_OPT_NONE;
                        break;
-               case '?':
-                       return CMD_HELP;
                default:
                default:
-                       fprintf(stderr, "%s: option '%s' unrecognized\n",
-                               argv[0], argv[optind - 1]);
+                       fprintf(stderr, "%s: unrecognized option '%s'\n",
+                               progname, argv[optind - 1]);
+                       /* fallthrough */
+               case 'h':
                        return CMD_HELP;
                }
        }
                        return CMD_HELP;
                }
        }
@@ -12398,16 +12440,16 @@ static int lfs_pcc_detach_fid(int argc, char **argv)
 
 static int lfs_pcc_state(int argc, char **argv)
 {
 
 static int lfs_pcc_state(int argc, char **argv)
 {
-       int                      rc = 0;
-       const char              *path;
-       char                     fullpath[PATH_MAX];
-       struct lu_pcc_state      state;
+       int rc = 0;
+       const char *path;
+       char fullpath[PATH_MAX];
+       struct lu_pcc_state state;
 
        optind = 1;
 
        if (argc <= 1) {
                fprintf(stderr, "%s: must specify one or more file names\n",
 
        optind = 1;
 
        if (argc <= 1) {
                fprintf(stderr, "%s: must specify one or more file names\n",
-                       argv[0]);
+                       progname);
                return CMD_HELP;
        }
 
                return CMD_HELP;
        }