From: Brian Foster <bfoster@redhat.com>
To: Zorro Lang <zlang@redhat.com>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH] io/mremap: modify argument errors of mremap command
Date: Wed, 16 Mar 2016 08:31:26 -0400 [thread overview]
Message-ID: <20160316123126.GC8096@bfoster.bfoster> (raw)
In-Reply-To: <1458120707-25219-1-git-send-email-zlang@redhat.com>
On Wed, Mar 16, 2016 at 05:31:47PM +0800, Zorro Lang wrote:
> There're 2 argument errors in mremap command:
> 1. If run "mremap 1024 8192", it won't return error and try to
> do "mremap 1024" silently.
>
> 2. The "-f" option can't be used, due to it need a new address
> argument as the fifth argument of mremap() syscall(man mremap).
>
> This patch try to fix above two problems.
>
> Signed-off-by: Zorro Lang <zlang@redhat.com>
> ---
A couple nits...
>
> Hi,
>
> I'm not sure pass a address argument to mremap command is right or
> wrong. And maybe I should use strtoul() to instead of cvtnum() for
> address argument.
>
> At least I did some simple test with this patch on my machine, results are:
> "mremap -f 139946004389888 2048" PASS
> "mremap -f 4096k 2048" PASS
> "mremap -f 1g 2048" PASS
> "mremap -f 4096 2048" FAIL as 'Permission denied'
>
> What do you think of this patch?
>
> Thanks,
> Zorro
>
>
> io/mmap.c | 22 +++++++++++++++-------
> man/man8/xfs_io.8 | 5 ++++-
> 2 files changed, 19 insertions(+), 8 deletions(-)
>
> diff --git a/io/mmap.c b/io/mmap.c
> index 5970069..672ee61 100644
> --- a/io/mmap.c
> +++ b/io/mmap.c
> @@ -589,7 +589,7 @@ mremap_help(void)
> "\n"
> " Resizes the mappping, growing or shrinking from the current size.\n"
> " The default stored value is 'X', repeated to fill the range specified.\n"
> -" -f -- use the MREMAP_FIXED flag\n"
> +" -f <new_address> -- use the MREMAP_FIXED flag to mremap on the new address\n"
Exceeds 80 chars.
> " -m -- use the MREMAP_MAYMOVE flag\n"
> "\n"));
> }
> @@ -600,15 +600,18 @@ mremap_f(
> char **argv)
> {
> ssize_t new_length;
> - void *new_addr;
> + void *new_addr = NULL;
> int flags = 0;
> int c;
> size_t blocksize, sectsize;
>
> - while ((c = getopt(argc, argv, "fm")) != EOF) {
> + init_cvtnum(&blocksize, §size);
> +
> + while ((c = getopt(argc, argv, "f:m")) != EOF) {
> switch (c) {
> case 'f':
> flags = MREMAP_FIXED|MREMAP_MAYMOVE;
> + new_addr = (void *)cvtnum(blocksize, sectsize, optarg);
> break;
> case 'm':
> flags = MREMAP_MAYMOVE;
> @@ -618,7 +621,9 @@ mremap_f(
> }
> }
>
> - init_cvtnum(&blocksize, §size);
> + if (optind != argc - 1)
> + return command_usage(&mremap_cmd);
> +
> new_length = cvtnum(blocksize, sectsize, argv[optind]);
> if (new_length < 0) {
> printf(_("non-numeric offset argument -- %s\n"),
> @@ -626,7 +631,10 @@ mremap_f(
> return 0;
> }
>
> - new_addr = mremap(mapping->addr, mapping->length, new_length, flags);
> + if (!new_addr)
> + new_addr = mremap(mapping->addr, mapping->length, new_length, flags);
> + else
> + new_addr = mremap(mapping->addr, mapping->length, new_length, flags, new_addr);
Both mremap() calls above exceed 80 chars. Otherwise, this looks Ok to
me:
Reviewed-by: Brian Foster <bfoster@redhat.com>
> if (new_addr == MAP_FAILED)
> perror("mremap");
> else {
> @@ -697,9 +705,9 @@ mmap_init(void)
> mremap_cmd.altname = "mrm";
> mremap_cmd.cfunc = mremap_f;
> mremap_cmd.argmin = 1;
> - mremap_cmd.argmax = 2;
> + mremap_cmd.argmax = 3;
> mremap_cmd.flags = CMD_NOFILE_OK | CMD_FOREIGN_OK;
> - mremap_cmd.args = _("[-m|-f] newsize");
> + mremap_cmd.args = _("[-m|-f <new_address>] newsize");
> mremap_cmd.oneline =
> _("alters the size of the current memory mapping");
> mremap_cmd.help = mremap_help;
> diff --git a/man/man8/xfs_io.8 b/man/man8/xfs_io.8
> index 33fbe6a..984b551 100644
> --- a/man/man8/xfs_io.8
> +++ b/man/man8/xfs_io.8
> @@ -581,7 +581,7 @@ See the
> .B mmap
> command.
> .TP
> -.BI "mremap [ \-f ] [ \-m ] " new_length
> +.BI "mremap [ \-f <new_address> ] [ \-m ] " new_length
> Changes the current mapping size to
> .IR new_length .
> Whether the mapping may be moved is controlled by the flags passed;
> @@ -589,6 +589,9 @@ MREMAP_FIXED
> .RB ( \-f ),
> or MREMAP_MAYMOVE
> .RB ( \-m ).
> +.IR new_length
> +specifies a page-aligned address to which the mapping must be moved. It
> +can be setted to 139946004389888, 4096k or 1g etc.
> .TP
> .B mrm
> See the
> --
> 2.5.0
>
> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2016-03-16 12:31 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-16 9:31 [PATCH] io/mremap: modify argument errors of mremap command Zorro Lang
2016-03-16 12:31 ` Brian Foster [this message]
2016-03-16 14:00 ` Zorro Lang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160316123126.GC8096@bfoster.bfoster \
--to=bfoster@redhat.com \
--cc=xfs@oss.sgi.com \
--cc=zlang@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.