xfs
[Top] [All Lists]

Re: different error messages for mkfs.xfs -ssize

To: Wengang Wang <wen.gang.wang@xxxxxxxxxx>
Subject: Re: different error messages for mkfs.xfs -ssize
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Thu, 22 Apr 2010 12:46:32 -0400
Cc: xfs@xxxxxxxxxxx, greg.marsden@xxxxxxxxxx, joe.jin@xxxxxxxxxx
In-reply-to: <20100422153636.GB3822@xxxxxxxxxxxxxxxxx>
References: <20100422153636.GB3822@xxxxxxxxxxxxxxxxx>
User-agent: Mutt/1.5.19 (2009-01-05)
On Thu, Apr 22, 2010 at 11:36:36PM +0800, Wengang Wang wrote:
> Hi experts,
> 
> I got different error messages when provide different value for -ssize.
> Why the error messages are different? They are different but no one is
> containing more info than the other.
> 
> [root@desk test-xfsprogs]# mkfs.xfs -ssize=256 /dev/sda10 -f 2>&1 |head -n 1
> illegal sector size 256
> [root@desk test-xfsprogs]# mkfs.xfs -ssize=3072 /dev/sda10 -f 2>&1 |head -n 1
> Illegal value 3072 for -s sectsize option

It's because we have an early test that just tests for the value beeing
negative or not a power of two, and a later one that checks for the
exact range.  The untested patch below cleans this up a bit, but once
I get started on this I might do an even bigger sweep on the mkfs
option parsing and error handling..

Index: xfsprogs-dev/mkfs/xfs_mkfs.c
===================================================================
--- xfsprogs-dev.orig/mkfs/xfs_mkfs.c   2010-04-22 18:32:16.708004506 +0200
+++ xfsprogs-dev/mkfs/xfs_mkfs.c        2010-04-22 18:36:49.217255590 +0200
@@ -1540,8 +1540,6 @@ main(
                                                conflict('s', sopts, S_SECTSIZE,
                                                         S_SECTLOG);
                                        sectorlog = atoi(value);
-                                       if (sectorlog <= 0)
-                                               illegal(value, "s sectlog");
                                        lsectorlog = sectorlog;
                                        sectorsize = 1 << sectorlog;
                                        lsectorsize = sectorsize;
@@ -1558,9 +1556,6 @@ main(
                                                         S_SECTSIZE);
                                        sectorsize = cvtnum(
                                                blocksize, sectorsize, value);
-                                       if (sectorsize <= 0 ||
-                                           !ispow2(sectorsize))
-                                               illegal(value, "s sectsize");
                                        lsectorsize = sectorsize;
                                        sectorlog =
                                                libxfs_highbit32(sectorsize);
@@ -1637,7 +1632,9 @@ main(
        }
 
        if (sectorsize < XFS_MIN_SECTORSIZE ||
-           sectorsize > XFS_MAX_SECTORSIZE || sectorsize > blocksize) {
+           sectorsize > XFS_MAX_SECTORSIZE ||
+           sectorsize > blocksize ||
+           !ispow2(sectorsize)) {
                fprintf(stderr, _("illegal sector size %d\n"), sectorsize);
                usage();
        }
@@ -1647,7 +1644,9 @@ main(
                usage();
        }
        if (lsectorsize < XFS_MIN_SECTORSIZE ||
-           lsectorsize > XFS_MAX_SECTORSIZE || lsectorsize > blocksize) {
+           lsectorsize > XFS_MAX_SECTORSIZE ||
+           lsectorsize > blocksize ||
+           !ispow2(lsectorsize)) {
                fprintf(stderr, _("illegal log sector size %d\n"), lsectorsize);
                usage();
        } else if (lsectorsize > XFS_MIN_SECTORSIZE && !lsu && !lsunit) {

<Prev in Thread] Current Thread [Next in Thread>