Whamcloud - gitweb
LU-4028 quota: fix output of 'lfs quota' 07/8407/4
authorNiu Yawei <yawei.niu@intel.com>
Wed, 27 Nov 2013 03:27:01 +0000 (22:27 -0500)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 21 Mar 2014 14:04:01 +0000 (14:04 +0000)
Fix the output of 'lfs quota' when '-h' option is specified:
- total allocated block limit should be converted after calculation;
- show 1~3 digit after the decimal point;

Signed-off-by: Niu Yawei <yawei.niu@intel.com>
Change-Id: I90a8087dc15153c1b0b895c8081fe2882d6d01e6
Reviewed-on: http://review.whamcloud.com/8407
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Johann Lombardi <johann.lombardi@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
lustre/tests/sanity-quota.sh
lustre/utils/lfs.c

index 3648a61..634d7f9 100644 (file)
@@ -2017,9 +2017,17 @@ test_27c() {
                error "lfs setquota failed"
 
        limit=$($LFS quota -u $TSTID -v -h $DIR | grep $DIR | awk '{print $3}')
                error "lfs setquota failed"
 
        limit=$($LFS quota -u $TSTID -v -h $DIR | grep $DIR | awk '{print $3}')
-       [ $limit != "30M" ] && error "softlimit isn't human-readable"
+       [ $limit != "30M" ] && error "softlimit $limit isn't human-readable"
        limit=$($LFS quota -u $TSTID -v -h $DIR | grep $DIR | awk '{print $4}')
        limit=$($LFS quota -u $TSTID -v -h $DIR | grep $DIR | awk '{print $4}')
-       [ $limit != "3T" ] && error "hardlimit isn't human-readable"
+       [ $limit != "3T" ] && error "hardlimit $limit isn't human-readable"
+
+       $LFS setquota -u $TSTID -b 1500M -B 18500G $DIR ||
+               error "lfs setquota for $TSTID failed"
+
+       limit=$($LFS quota -u $TSTID -v -h $DIR | grep $DIR | awk '{print $3}')
+       [ $limit != "1.465G" ] && error "wrong softlimit $limit"
+       limit=$($LFS quota -u $TSTID -v -h $DIR | grep $DIR | awk '{print $4}')
+       [ $limit != "18.07T" ] && error "wrong hardlimit $limit"
 
        $LFS quota -u $TSTID -v -h $DIR | grep -q "Total allocated" ||
                error "total allocated inode/block limit not printed"
 
        $LFS quota -u $TSTID -v -h $DIR | grep -q "Total allocated" ||
                error "total allocated inode/block limit not printed"
index 025c01d..6e48c4f 100644 (file)
@@ -2633,13 +2633,13 @@ static void kbytes2str(__u64 num, char *buf, bool h)
                sprintf(buf, LPU64, num);
        } else {
                if (num >> 30)
                sprintf(buf, LPU64, num);
        } else {
                if (num >> 30)
-                       sprintf(buf, LPU64"%s", num >> 30, "T");
+                       sprintf(buf, "%5.4gT", (double)num / (1 << 30));
                else if (num >> 20)
                else if (num >> 20)
-                       sprintf(buf, LPU64"%s", num >> 20, "G");
+                       sprintf(buf, "%5.4gG", (double)num / (1 << 20));
                else if (num >> 10)
                else if (num >> 10)
-                       sprintf(buf, LPU64"%s", num >> 10, "M");
+                       sprintf(buf, "%5.4gM", (double)num / (1 << 10));
                else
                else
-                       sprintf(buf, LPU64"%s", num, "K");
+                       sprintf(buf, LPU64"%s", num, "k");
        }
 }
 
        }
 }
 
@@ -2930,11 +2930,11 @@ ug_output:
            verbose) {
                char strbuf[32];
 
            verbose) {
                char strbuf[32];
 
-               kbytes2str(total_balloc, strbuf, human_readable);
                rc2 = print_obd_quota(mnt, &qctl, 1, human_readable,
                                      &total_ialloc);
                rc3 = print_obd_quota(mnt, &qctl, 0, human_readable,
                                      &total_balloc);
                rc2 = print_obd_quota(mnt, &qctl, 1, human_readable,
                                      &total_ialloc);
                rc3 = print_obd_quota(mnt, &qctl, 0, human_readable,
                                      &total_balloc);
+               kbytes2str(total_balloc, strbuf, human_readable);
                printf("Total allocated inode limit: "LPU64", total "
                       "allocated block limit: %s\n", total_ialloc, strbuf);
        }
                printf("Total allocated inode limit: "LPU64", total "
                       "allocated block limit: %s\n", total_ialloc, strbuf);
        }