All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Sterba <dsterba@suse.cz>
To: linux-btrfs@vger.kernel.org
Cc: David Sterba <dsterba@suse.cz>, Ilya Dryomov <idryomov@gmail.com>,
	Hugo Mills <hugo@carfax.org.uk>
Subject: [PATCH] btrfs-progs: balance filter: add limit of processed chunks
Date: Wed,  7 May 2014 17:38:00 +0200	[thread overview]
Message-ID: <1399477080-15846-1-git-send-email-dsterba@suse.cz> (raw)

Add more control to the balance behaviour.

Usage filter may not be finegrained enough and can lead to moving too
many chunks at once. Another example use is in connection with
drange+devid or vrange filters that allow to work with a specific chunk
or even with a chunk on a given device.

The limit filter applies last, the value of 0 means no limiting.

CC: Ilya Dryomov <idryomov@gmail.com>
CC: Hugo Mills <hugo@carfax.org.uk>
Signed-off-by: David Sterba <dsterba@suse.cz>
---
 cmds-balance.c | 14 ++++++++++++++
 ioctl.h        |  4 +++-
 volumes.h      |  1 +
 3 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/cmds-balance.c b/cmds-balance.c
index 8a743ecabd33..5de51bd463c4 100644
--- a/cmds-balance.c
+++ b/cmds-balance.c
@@ -218,6 +218,18 @@ static int parse_filters(char *filters, struct btrfs_balance_args *args)
 			args->flags |= BTRFS_BALANCE_ARGS_CONVERT;
 		} else if (!strcmp(this_char, "soft")) {
 			args->flags |= BTRFS_BALANCE_ARGS_SOFT;
+		} else if (!strcmp(this_char, "limit")) {
+			if (!value || !*value) {
+				fprintf(stderr,
+					"the limit filter requires an argument\n");
+				return 1;
+			}
+			if (parse_u64(value, &args->limit)) {
+				fprintf(stderr, "Invalid limit argument: %s\n",
+				       value);
+				return 1;
+			}
+			args->flags |= BTRFS_BALANCE_ARGS_LIMIT;
 		} else {
 			fprintf(stderr, "Unrecognized balance option '%s'\n",
 				this_char);
@@ -252,6 +264,8 @@ static void dump_balance_args(struct btrfs_balance_args *args)
 		printf(", vrange=%llu..%llu",
 		       (unsigned long long)args->vstart,
 		       (unsigned long long)args->vend);
+	if (args->flags & BTRFS_BALANCE_ARGS_LIMIT)
+		printf(", limit=%llu", (unsigned long long)args->limit);
 
 	printf("\n");
 }
diff --git a/ioctl.h b/ioctl.h
index 9627e8d1bac6..f0fc06086c3e 100644
--- a/ioctl.h
+++ b/ioctl.h
@@ -194,7 +194,9 @@ struct btrfs_balance_args {
 
 	__u64 flags;
 
-	__u64 unused[8];
+	__u64 limit;
+
+	__u64 unused[7];
 } __attribute__ ((__packed__));
 
 struct btrfs_balance_progress {
diff --git a/volumes.h b/volumes.h
index b1ff3d04f931..8405aef2cc0a 100644
--- a/volumes.h
+++ b/volumes.h
@@ -130,6 +130,7 @@ struct map_lookup {
 #define BTRFS_BALANCE_ARGS_DEVID	(1ULL << 2)
 #define BTRFS_BALANCE_ARGS_DRANGE	(1ULL << 3)
 #define BTRFS_BALANCE_ARGS_VRANGE	(1ULL << 4)
+#define BTRFS_BALANCE_ARGS_LIMIT	(1ULL << 5)
 
 /*
  * Profile changing flags.  When SOFT is set we won't relocate chunk if
-- 
1.9.0


                 reply	other threads:[~2014-05-07 15:38 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=1399477080-15846-1-git-send-email-dsterba@suse.cz \
    --to=dsterba@suse.cz \
    --cc=hugo@carfax.org.uk \
    --cc=idryomov@gmail.com \
    --cc=linux-btrfs@vger.kernel.org \
    /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.