]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_io: make various commands one-shot only
authorDave Chinner <dchinner@redhat.com>
Thu, 12 Jan 2017 20:12:41 +0000 (14:12 -0600)
committerEric Sandeen <sandeen@redhat.com>
Thu, 12 Jan 2017 20:12:41 +0000 (14:12 -0600)
It makes no sense to iterate the file table for some xfs_io
commands. Some commands are already marked in this way, but lots of
them are not and this leads to bad behaviour. For example, the open
command will run until the process fd table is full and EMFILE is
returned rather than just opening the specified file once.

Signed-Off-By: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
12 files changed:
io/file.c
io/freeze.c
io/getrusage.c
io/imap.c
io/inject.c
io/link.c
io/mmap.c
io/open.c
io/reflink.c
io/resblks.c
io/shutdown.c
io/sync.c

index 8e3f07122922a16c90d1b43e5b9b591212ae0f7b..349b19cdc4200c9ece5ac206377977e4452d503f 100644 (file)
--- a/io/file.c
+++ b/io/file.c
@@ -95,7 +95,7 @@ file_init(void)
        file_cmd.cfunc = file_f;
        file_cmd.argmin = 0;
        file_cmd.argmax = 1;
-       file_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK;
+       file_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK | CMD_FLAG_ONESHOT;
        file_cmd.oneline = _("set the current file");
 
        print_cmd.name = "print";
index 3d0d2a4b56011c14df387334a62b5daabb9ce275..0305713d99e8738e144b60e4816c37d135383bd6 100644 (file)
@@ -65,14 +65,14 @@ freeze_init(void)
        freeze_cmd.cfunc = freeze_f;
        freeze_cmd.argmin = 0;
        freeze_cmd.argmax = 0;
-       freeze_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK;
+       freeze_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK | CMD_FLAG_ONESHOT;
        freeze_cmd.oneline = _("freeze filesystem of current file");
 
        thaw_cmd.name = "thaw";
        thaw_cmd.cfunc = thaw_f;
        thaw_cmd.argmin = 0;
        thaw_cmd.argmax = 0;
-       thaw_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK;
+       thaw_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK | CMD_FLAG_ONESHOT;
        thaw_cmd.oneline = _("unfreeze filesystem of current file");
 
        if (expert) {
index bccf94cbc3020a6bb9adb2b5d0dbd48ef7ce3a70..cf1f2afd19a88e1bcf44dd6f3bb285d2ef2b7a86 100644 (file)
@@ -113,7 +113,8 @@ getrusage_init(void)
        getrusage_cmd.argmin = 0;
        getrusage_cmd.argmax = -1;
        getrusage_cmd.cfunc = getrusage_f;
-       getrusage_cmd.flags = CMD_NOFILE_OK | CMD_NOMAP_OK | CMD_FOREIGN_OK;
+       getrusage_cmd.flags = CMD_NOFILE_OK | CMD_NOMAP_OK |
+                             CMD_FOREIGN_OK | CMD_FLAG_ONESHOT;
        getrusage_cmd.oneline = _("report process resource usage");
 
        if (expert)
index 7123432f411f8f895db1f6aaa9df18e3cbb61ed4..f52238e0c45075c20d81cc7c5f56550fe792c09d 100644 (file)
--- a/io/imap.c
+++ b/io/imap.c
@@ -72,7 +72,7 @@ imap_init(void)
        imap_cmd.argmin = 0;
        imap_cmd.argmax = 1;
        imap_cmd.args = _("[nentries]");
-       imap_cmd.flags = CMD_NOMAP_OK;
+       imap_cmd.flags = CMD_NOMAP_OK | CMD_FLAG_ONESHOT;
        imap_cmd.oneline = _("inode map for filesystem of current file");
 
        if (expert)
index 5d5e4aef3dfca2d728e3d9fec039fff7128ccb04..25c70218a1ef7e2aec72a9c80cb9b06170f6cef3 100644 (file)
@@ -163,7 +163,7 @@ inject_init(void)
        inject_cmd.cfunc = inject_f;
        inject_cmd.argmin = 0;
        inject_cmd.argmax = -1;
-       inject_cmd.flags = CMD_NOMAP_OK;
+       inject_cmd.flags = CMD_NOMAP_OK | CMD_FLAG_ONESHOT;
        inject_cmd.args = _("[tag ...]");
        inject_cmd.oneline = _("inject errors into a filesystem");
        inject_cmd.help = inject_help;
index ccf8e691bb1dba61a7971c549b7466c3e632a37f..9b2e8a970942577dd88e1f80f5952454a3407559 100644 (file)
--- a/io/link.c
+++ b/io/link.c
@@ -59,7 +59,7 @@ flink_init(void)
        flink_cmd.cfunc = flink_f;
        flink_cmd.argmin = 1;
        flink_cmd.argmax = 1;
-       flink_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK;
+       flink_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK | CMD_FLAG_ONESHOT;
        flink_cmd.args = _("filename");
        flink_cmd.oneline =
                _("link the open file descriptor to the supplied filename");
index dc188d0557cf1b78acdc9bc85a2badc2e788e368..e2d8d5a92326435c98ac3078b43ac02b6ad28ffb 100644 (file)
--- a/io/mmap.c
+++ b/io/mmap.c
@@ -674,7 +674,8 @@ mmap_init(void)
        mmap_cmd.cfunc = mmap_f;
        mmap_cmd.argmin = 0;
        mmap_cmd.argmax = -1;
-       mmap_cmd.flags = CMD_NOMAP_OK | CMD_NOFILE_OK | CMD_FOREIGN_OK;
+       mmap_cmd.flags = CMD_NOMAP_OK | CMD_NOFILE_OK |
+                        CMD_FOREIGN_OK | CMD_FLAG_ONESHOT;
        mmap_cmd.args = _("[N] | [-rwx] [-s size] [off len]");
        mmap_cmd.oneline =
                _("mmap a range in the current file, show mappings");
index 722d0f9eacf55c5c2726abce3d7205e6c34f7b82..a12f4a2ba528dc74894f07a3aa56ff0bcbea1a68 100644 (file)
--- a/io/open.c
+++ b/io/open.c
@@ -918,7 +918,8 @@ open_init(void)
        open_cmd.cfunc = open_f;
        open_cmd.argmin = 0;
        open_cmd.argmax = -1;
-       open_cmd.flags = CMD_NOMAP_OK | CMD_NOFILE_OK | CMD_FOREIGN_OK;
+       open_cmd.flags = CMD_NOMAP_OK | CMD_NOFILE_OK |
+                        CMD_FOREIGN_OK | CMD_FLAG_ONESHOT;
        open_cmd.args = _("[-acdrstxT] [-m mode] [path]");
        open_cmd.oneline = _("open the file specified by path");
        open_cmd.help = open_help;
@@ -936,7 +937,7 @@ open_init(void)
        close_cmd.cfunc = close_f;
        close_cmd.argmin = 0;
        close_cmd.argmax = 0;
-       close_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK;
+       close_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK | CMD_FLAG_ONESHOT;
        close_cmd.oneline = _("close the current open file");
 
        statfs_cmd.name = "statfs";
@@ -980,7 +981,7 @@ open_init(void)
        inode_cmd.args = _("[-nv] [num]");
        inode_cmd.argmin = 0;
        inode_cmd.argmax = 3;
-       inode_cmd.flags = CMD_NOMAP_OK;
+       inode_cmd.flags = CMD_NOMAP_OK | CMD_FLAG_ONESHOT;
        inode_cmd.oneline =
                _("Query inode number usage in the filesystem");
        inode_cmd.help = inode_help;
index 4c822b39dce772de02956c916cfde6251bc9d36a..fe05d1eb162d33c39630f970eab7f29123a2458a 100644 (file)
@@ -304,7 +304,7 @@ reflink_init(void)
        reflink_cmd.cfunc = reflink_f;
        reflink_cmd.argmin = 1;
        reflink_cmd.argmax = -1;
-       reflink_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK;
+       reflink_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK | CMD_FLAG_ONESHOT;
        reflink_cmd.args =
 _("infile [src_off dst_off len]");
        reflink_cmd.oneline =
@@ -318,7 +318,7 @@ _("infile [src_off dst_off len]");
        dedupe_cmd.cfunc = dedupe_f;
        dedupe_cmd.argmin = 4;
        dedupe_cmd.argmax = -1;
-       dedupe_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK;
+       dedupe_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK | CMD_FLAG_ONESHOT;
        dedupe_cmd.args =
 _("infile src_off dst_off len");
        dedupe_cmd.oneline =
index 73318ae03fd267120f0fb4083236c6de217fa3d8..06903f5bb7481b8a358a746da221cdd196f6f47a 100644 (file)
@@ -61,7 +61,7 @@ resblks_init(void)
        resblks_cmd.cfunc = resblks_f;
        resblks_cmd.argmin = 0;
        resblks_cmd.argmax = 1;
-       resblks_cmd.flags = CMD_NOMAP_OK;
+       resblks_cmd.flags = CMD_NOMAP_OK | CMD_FLAG_ONESHOT;
        resblks_cmd.args = _("[blocks]");
        resblks_cmd.oneline =
                _("get and/or set count of reserved filesystem blocks");
index d8507cc78af70a09e840aef717fc0e93bfb2647b..d9cd520d11e2d79c29e53d88504ae4e4093993bd 100644 (file)
@@ -54,7 +54,7 @@ shutdown_init(void)
        shutdown_cmd.cfunc = shutdown_f;
        shutdown_cmd.argmin = 0;
        shutdown_cmd.argmax = 1;
-       shutdown_cmd.flags = CMD_NOMAP_OK;
+       shutdown_cmd.flags = CMD_NOMAP_OK | CMD_FLAG_ONESHOT;
        shutdown_cmd.args = _("[-f]");
        shutdown_cmd.oneline =
                _("shuts down the filesystem where the current file resides");
index 28e3a15e0a96c274733d22220a6681a0ea032bc3..c77263804a3536dcf19b46321a37d72ca615d215 100644 (file)
--- a/io/sync.c
+++ b/io/sync.c
@@ -52,7 +52,8 @@ sync_init(void)
 {
        sync_cmd.name = "sync";
        sync_cmd.cfunc = sync_f;
-       sync_cmd.flags = CMD_NOMAP_OK | CMD_NOFILE_OK | CMD_FOREIGN_OK;
+       sync_cmd.flags = CMD_NOMAP_OK | CMD_NOFILE_OK |
+                        CMD_FOREIGN_OK | CMD_FLAG_ONESHOT;
        sync_cmd.oneline =
                _("calls sync(2) to flush all in-core filesystem state to disk");