public inbox for util-linux@vger.kernel.org
 help / color / mirror / Atom feed
* swapon: fix -d short option
@ 2014-10-21  8:02 Robert Milasan
  2014-10-21  9:55 ` Karel Zak
  0 siblings, 1 reply; 5+ messages in thread
From: Robert Milasan @ 2014-10-21  8:02 UTC (permalink / raw)
  To: util-linux

[-- Attachment #1: Type: text/plain, Size: 663 bytes --]

When -d option is used with swapon, is expected that there is an equal
'=' which at least according to the man page it doesn't make sense or
it's not properly explained.

If we use -d as we should, then swapon takes 'once' or 'pages' as an
actual device:

dhcp33:~ # swapon -p -2 -d once /dev/sdb1
swapon: stat failed once: No such file or directory

The short option -d, should be something like "swapon -d once ...." not
"swapon -d=once ...."

I've attached the patch to fix this small issue.


-- 
Robert Milasan

L3 Support Engineer
SUSE Linux (http://www.suse.com)
email: rmilasan@suse.com
GPG fingerprint: B6FE F4A8 0FA3 3040 3402  6FE7 2F64 167C 1909 6D1A

[-- Attachment #2: swapon_fix-d-short-option.patch --]
[-- Type: text/x-patch, Size: 631 bytes --]

diff --git a/sys-utils/swapon.c b/sys-utils/swapon.c
index 8609ea2..20baea3 100644
--- a/sys-utils/swapon.c
+++ b/sys-utils/swapon.c
@@ -846,12 +846,9 @@ int main(int argc, char *argv[])
 		case 'd':
 			discard |= SWAP_FLAG_DISCARD;
 			if (optarg) {
-				if (*optarg == '=')
-					optarg++;
-
-				if (strcmp(optarg, "once") == 0)
+				if (strncmp(optarg, "once", 4) == 0)
 					discard |= SWAP_FLAG_DISCARD_ONCE;
-				else if (strcmp(optarg, "pages") == 0)
+				else if (strncmp(optarg, "pages", 5) == 0)
 					discard |= SWAP_FLAG_DISCARD_PAGES;
 				else
 					errx(EXIT_FAILURE, _("unsupported discard policy: %s"), optarg);

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: swapon: fix -d short option
  2014-10-21  8:02 swapon: fix -d short option Robert Milasan
@ 2014-10-21  9:55 ` Karel Zak
  2014-10-21 10:07   ` Robert Milasan
  0 siblings, 1 reply; 5+ messages in thread
From: Karel Zak @ 2014-10-21  9:55 UTC (permalink / raw)
  To: Robert Milasan; +Cc: util-linux

On Tue, Oct 21, 2014 at 10:02:46AM +0200, Robert Milasan wrote:
> When -d option is used with swapon, is expected that there is an equal
> '=' which at least according to the man page it doesn't make sense or
> it's not properly explained.

Well, in the man page there was incorrectly extra space between -d and
the optional argument. Fixed yesterday.

> If we use -d as we should, then swapon takes 'once' or 'pages' as an
> actual device:
> 
> dhcp33:~ # swapon -p -2 -d once /dev/sdb1
> swapon: stat failed once: No such file or directory
> 
> The short option -d, should be something like "swapon -d once ...." not
> "swapon -d=once ...."

What? The argument for -d is optional, it's reason why we care about
'='. I think it's obvious from the code.

   swapon -p -2 -d /dev/sdb1 

is pretty valid.

Note that -d,--discard has been implemented in 2010, and extended by
'once' and 'pages' later in 2013.

> I've attached the patch to fix this small issue.

Sorry, but the patch does not make sense.

    Karel

-- 
 Karel Zak  <kzak@redhat.com>
 http://karelzak.blogspot.com

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: swapon: fix -d short option
  2014-10-21  9:55 ` Karel Zak
@ 2014-10-21 10:07   ` Robert Milasan
  2014-10-21 10:38     ` Karel Zak
  0 siblings, 1 reply; 5+ messages in thread
From: Robert Milasan @ 2014-10-21 10:07 UTC (permalink / raw)
  To: Karel Zak; +Cc: util-linux

On Tue, 21 Oct 2014 11:55:25 +0200
"Karel Zak" <kzak@redhat.com> wrote:

> On Tue, Oct 21, 2014 at 10:02:46AM +0200, Robert Milasan wrote:
> > When -d option is used with swapon, is expected that there is an
> > equal '=' which at least according to the man page it doesn't make
> > sense or it's not properly explained.
> 
> Well, in the man page there was incorrectly extra space between -d and
> the optional argument. Fixed yesterday.
> 
> > If we use -d as we should, then swapon takes 'once' or 'pages' as an
> > actual device:
> > 
> > dhcp33:~ # swapon -p -2 -d once /dev/sdb1
> > swapon: stat failed once: No such file or directory
> > 
> > The short option -d, should be something like "swapon -d once ...."
> > not "swapon -d=once ...."
> 
> What? The argument for -d is optional, it's reason why we care about
> '='. I think it's obvious from the code.
> 
>    swapon -p -2 -d /dev/sdb1 
> 
> is pretty valid.
> 
> Note that -d,--discard has been implemented in 2010, and extended by
> 'once' and 'pages' later in 2013.
> 
> > I've attached the patch to fix this small issue.
> 
> Sorry, but the patch does not make sense.
> 
>     Karel
> 

Sorry, but the option doesn't make sense eider. First is not documented
properly or at all and with my patch -d option without any argument
still works.

Thanks anyway!

-- 
Robert Milasan

L3 Support Engineer
SUSE Linux (http://www.suse.com)
email: rmilasan@suse.com
GPG fingerprint: B6FE F4A8 0FA3 3040 3402  6FE7 2F64 167C 1909 6D1A

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: swapon: fix -d short option
  2014-10-21 10:07   ` Robert Milasan
@ 2014-10-21 10:38     ` Karel Zak
  2014-10-21 19:41       ` Benno Schulenberg
  0 siblings, 1 reply; 5+ messages in thread
From: Karel Zak @ 2014-10-21 10:38 UTC (permalink / raw)
  To: Robert Milasan; +Cc: util-linux

On Tue, Oct 21, 2014 at 12:07:41PM +0200, Robert Milasan wrote:
> On Tue, 21 Oct 2014 11:55:25 +0200
> "Karel Zak" <kzak@redhat.com> wrote:
> 
> > On Tue, Oct 21, 2014 at 10:02:46AM +0200, Robert Milasan wrote:
> > > When -d option is used with swapon, is expected that there is an
> > > equal '=' which at least according to the man page it doesn't make
> > > sense or it's not properly explained.
> > 
> > Well, in the man page there was incorrectly extra space between -d and
> > the optional argument. Fixed yesterday.
> > 
> > > If we use -d as we should, then swapon takes 'once' or 'pages' as an
> > > actual device:
> > > 
> > > dhcp33:~ # swapon -p -2 -d once /dev/sdb1
> > > swapon: stat failed once: No such file or directory
> > > 
> > > The short option -d, should be something like "swapon -d once ...."
> > > not "swapon -d=once ...."
> > 
> > What? The argument for -d is optional, it's reason why we care about
> > '='. I think it's obvious from the code.
> > 
> >    swapon -p -2 -d /dev/sdb1 
> > 
> > is pretty valid.
> > 
> > Note that -d,--discard has been implemented in 2010, and extended by
> > 'once' and 'pages' later in 2013.
> > 
> > > I've attached the patch to fix this small issue.
> > 
> > Sorry, but the patch does not make sense.
> > 
> >     Karel
> > 
> 
> Sorry, but the option doesn't make sense eider. First is not documented

current git tree:

-d, --discard[=policy]
      Enable  swap  discards, if the swap backing device supports the discard or trim operation.
      This may improve performance on some Solid State Devices, but often it does not.  The option
      allows  one to select between two available swap discard policies: --discard=once to perform
      a single-time discard operation for the whole swap area at  swapon;  or  --discard=pages  to
      discard  freed swap pages before they are reused, while swapping.  If no policy is selected,
      the default behavior is to enable both discard types.  The /etc/fstab mount options discard,
      discard=once, or discard=pages may also be used to enable discard flags.

Maybe we can add something like

     Note that the optional policy argument cannot be separated from the -d option by a space, 
     the correct form is for example '-d=pages'.

to make it more obvious.


> properly or at all and with my patch -d option without any argument
> still works.

You want to use 

   "-d once"

for optional arguments, but this is not compatible with libc getopt().
We use '=' on many other paces... because:

man getopt:
  Two colons mean an option takes an optional arg; if there is text in the 
  current argv-element (i.e., in the same word as the option name itself, 
                                     ^^^^^^^^^
  for example, "-oarg"), then it is returned in optarg, otherwise optarg
  is set to zero.  


for example ("once" is swapfile name):

 mkswap once
 swapon -d once

I think -d=once to specify discard policy is more robust.

    Karel

-- 
 Karel Zak  <kzak@redhat.com>
 http://karelzak.blogspot.com

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: swapon: fix -d short option
  2014-10-21 10:38     ` Karel Zak
@ 2014-10-21 19:41       ` Benno Schulenberg
  0 siblings, 0 replies; 5+ messages in thread
From: Benno Schulenberg @ 2014-10-21 19:41 UTC (permalink / raw)
  To: Karel Zak; +Cc: Robert Milasan, Util-Linux


On Tue, Oct 21, 2014, at 12:38, Karel Zak wrote:
> Maybe we can add something like
> 
>      Note that the optional policy argument cannot be separated from the -d option by a space, 

It shouldn't be needed to mention this.  It is just common sense that
when an option argument is optional, you cannot separate it from the
option itself by any whitespace because then the parsing cannot decide
whether the thing is the optional option argument or simply another
plain argument.

>      the correct form is for example '-d=pages'.

Another correct form is '-dpages'.  For the short forms of the options
the '=' is not required.

Benno

-- 
http://www.fastmail.fm - Faster than the air-speed velocity of an
                          unladen european swallow


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-10-21 19:41 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-21  8:02 swapon: fix -d short option Robert Milasan
2014-10-21  9:55 ` Karel Zak
2014-10-21 10:07   ` Robert Milasan
2014-10-21 10:38     ` Karel Zak
2014-10-21 19:41       ` Benno Schulenberg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox