From 66f92c5a237fe24066c4f2482a6ff464c15b1bae Mon Sep 17 00:00:00 2001 From: deen <deen> Date: Thu, 30 Aug 2007 08:20:08 +0000 Subject: [PATCH] Make lfs setstripe understand 'k', 'm' and 'g' for stripe size. i=adilger i=green b=12786 --- lustre/ChangeLog | 5 +++++ lustre/utils/lfs.c | 24 +++++++++++++++++++----- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/lustre/ChangeLog b/lustre/ChangeLog index f910801096..51703384f9 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -185,6 +185,11 @@ Details : with NFS, the anon dentry's parent was set to itself in d_alloc_anon(), so in MDS, we use rec->ur_fid1 to find the corresponding dentry other than use rec->ur_name. +Severity : enhancement +Bugzilla : 12786 +Description: lfs setstripe enhancement +Details : Make lfs setstripe understand 'k', 'm' and 'g' for stripe size. + -------------------------------------------------------------------------------- 2007-08-10 Cluster File Systems, Inc. <info@clusterfs.com> diff --git a/lustre/utils/lfs.c b/lustre/utils/lfs.c index 181b1c9a18..588b5ec2e9 100644 --- a/lustre/utils/lfs.c +++ b/lustre/utils/lfs.c @@ -89,6 +89,7 @@ command_t cmdlist[] = { " or \n" " setstripe -d <dirname> (to delete default striping)\n" "\tstripe_size: Number of bytes on each OST (0 filesystem default)\n" + "\t Can be specified with k, m or g (in KB, MB and GB respectively)\n" "\tstripe_index: OST index of first stripe (-1 filesystem default)\n" "\tstripe_count: Number of OSTs to stripe over (0 default, -1 all)"}, {"getstripe", lfs_getstripe, 0, @@ -163,7 +164,7 @@ static int lfs_setstripe(int argc, char **argv) { char *fname; int result; - long st_size; + unsigned long st_size; int st_offset, st_count; char *end; int c; @@ -255,11 +256,24 @@ static int lfs_setstripe(int argc, char **argv) if (stripe_size_arg != NULL) { st_size = strtoul(stripe_size_arg, &end, 0); if (*end != '\0') { - fprintf(stderr, "error: %s: bad stripe size '%s'\n", - argv[0], stripe_size_arg); - return CMD_HELP; + if ((*end == 'k' || *end == 'K') && + *(end+1) == '\0' && + (st_size & (~0UL << (32 - 10))) == 0) { + st_size <<= 10; + } else if ((*end == 'm' || *end == 'M') && + *(end+1) == '\0' && + (st_size & (~0UL << (32 - 20))) == 0) { + st_size <<= 20; + } else if ((*end == 'g' || *end == 'G') && + *(end+1) == '\0' && + (st_size & (~0UL << (32 - 30))) == 0) { + st_size <<= 30; + } else { + fprintf(stderr, "error: %s: bad stripe size '%s'\n", + argv[0], stripe_size_arg); + return CMD_HELP; + } } - } /* get the stripe offset */ if (stripe_off_arg != NULL) { -- GitLab