From: Eric Sandeen <sandeen@redhat.com>
To: xfs-oss <xfs@oss.sgi.com>
Subject: [PATCH] xfs_io: add mremap command
Date: Wed, 10 Sep 2014 22:25:04 -0500 [thread overview]
Message-ID: <54111610.4080604@redhat.com> (raw)
This adds a simple mremap command to xfs_io.
It does not take a start address; it uses the existing
start address, so the sized passed will be the new total
size of the mapping.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---
diff --git a/io/mmap.c b/io/mmap.c
index ea7498f..565a541 100644
--- a/io/mmap.c
+++ b/io/mmap.c
@@ -29,6 +29,7 @@ static cmdinfo_t mread_cmd;
static cmdinfo_t msync_cmd;
static cmdinfo_t munmap_cmd;
static cmdinfo_t mwrite_cmd;
+static cmdinfo_t mremap_cmd;
mmap_region_t *maptable;
int mapcount;
@@ -574,6 +575,66 @@ mwrite_f(
return 0;
}
+static void
+mremap_help(void)
+{
+ printf(_(
+"\n"
+" resizes the current memory mapping\n"
+"\n"
+" Examples:\n"
+" 'mremap 8192' - resizes the current mapping to 8192 bytes.\n"
+"\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"
+" -m -- use the MREMAP_MAYMOVE flag\n"
+"\n"));
+}
+
+int
+mremap_f(
+ int argc,
+ char **argv)
+{
+ ssize_t new_length;
+ void *new_addr;
+ int flags = 0;
+ int c;
+ size_t blocksize, sectsize;
+
+ while ((c = getopt(argc, argv, "fm")) != EOF) {
+ switch (c) {
+ case 'f':
+ flags = MREMAP_FIXED|MREMAP_MAYMOVE;
+ break;
+ case 'm':
+ flags = MREMAP_MAYMOVE;
+ break;
+ default:
+ return command_usage(&mremap_cmd);
+ }
+ }
+
+ init_cvtnum(&blocksize, §size);
+ new_length = cvtnum(blocksize, sectsize, argv[optind]);
+ if (new_length < 0) {
+ printf(_("non-numeric offset argument -- %s\n"),
+ argv[optind]);
+ return 0;
+ }
+
+ new_addr = mremap(mapping->addr, mapping->length, new_length, flags);
+ if (new_addr == MAP_FAILED)
+ perror("mremap");
+ else {
+ mapping->addr = new_addr;
+ mapping->length = new_length;
+ }
+
+ return 0;
+}
+
void
mmap_init(void)
{
@@ -628,9 +689,21 @@ mmap_init(void)
_("writes data into a region in the current memory mapping");
mwrite_cmd.help = mwrite_help;
+ mremap_cmd.name = "mremap";
+ mremap_cmd.altname = "mrm";
+ mremap_cmd.cfunc = mremap_f;
+ mremap_cmd.argmin = 1;
+ mremap_cmd.argmax = 2;
+ mremap_cmd.flags = CMD_NOFILE_OK | CMD_FOREIGN_OK;
+ mremap_cmd.args = _("[-f|-m] newsize");
+ mremap_cmd.oneline =
+ _("alters the size of the current memory mapping");
+ mremap_cmd.help = mremap_help;
+
add_command(&mmap_cmd);
add_command(&mread_cmd);
add_command(&msync_cmd);
add_command(&munmap_cmd);
add_command(&mwrite_cmd);
+ add_command(&mremap_cmd);
}
diff --git a/man/man8/xfs_io.8 b/man/man8/xfs_io.8
index e1a3e1a..e40fbf9 100644
--- a/man/man8/xfs_io.8
+++ b/man/man8/xfs_io.8
@@ -501,6 +501,20 @@ See the
.B mmap
command.
.TP
+.BI "mremap [ \-f ] [ \-m ] " new_length
+Changes the current mapping size to
+.IR new_length .
+Whether the mapping may be moved is controlled by the flags passed;
+MREMAP_FIXED
+.RB ( \-f ),
+or MREMAP_MAYMOVE
+.RB ( \-m ).
+.TP
+.B mrm
+See the
+.B mremap
+command.
+.TP
.B munmap
Unmaps the current memory mapping.
.TP
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next reply other threads:[~2014-09-11 3:25 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-11 3:25 Eric Sandeen [this message]
2014-09-11 3:29 ` [PATCH V2] xfs_io: add mremap command Eric Sandeen
2014-09-12 16:22 ` Eric Sandeen
2014-09-12 16:54 ` [PATCH V3] " Eric Sandeen
2014-09-13 19:45 ` Christoph Hellwig
2014-09-13 20:12 ` Eric Sandeen
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=54111610.4080604@redhat.com \
--to=sandeen@redhat.com \
--cc=xfs@oss.sgi.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox