From patchwork Mon Sep 28 22:33:04 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?R2FicsOtZWwgQXJ0aMO6ciBQw6l0dXJzc29u?= X-Patchwork-Id: 7281311 Return-Path: X-Original-To: patchwork-linux-btrfs@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id C373DBEEA4 for ; Mon, 28 Sep 2015 22:33:17 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id E2D9A20723 for ; Mon, 28 Sep 2015 22:33:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id ECD20206EB for ; Mon, 28 Sep 2015 22:33:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754410AbbI1WdM (ORCPT ); Mon, 28 Sep 2015 18:33:12 -0400 Received: from mail-wi0-f177.google.com ([209.85.212.177]:38515 "EHLO mail-wi0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754134AbbI1WdM (ORCPT ); Mon, 28 Sep 2015 18:33:12 -0400 Received: by wiclk2 with SMTP id lk2so121501798wic.1 for ; Mon, 28 Sep 2015 15:33:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=system.is; s=google; h=from:to:cc:subject:date:message-id; bh=B4LMzwzuYVpyqvX/8IN/ml+ZOYha0gt9aFrG8mbef2I=; b=d/4+HlFqoQAqrnzKThumNeFCfEGk6q9usDTUVM5kAaRUN7/otwrVdPag4fjJ7NBTBr ibIkxgfjGRCCWaGjSx04XSygD6sl+QG/WPqgVP8ehYct+NbE3Tut/i/xrtswKlEkeWFZ atyaUM+QKEsTc8oqwlGUv7V81c7X5i6EKb/fM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=B4LMzwzuYVpyqvX/8IN/ml+ZOYha0gt9aFrG8mbef2I=; b=gr4dex0uYNcSSB9gmtq8+zOClr3zLLNlwTCdgT8OQkqEjfDZTjpht+0b1b8xeR+RmX 5oLqQgoEBxehYxJxB/w7Pv5neMxb373xYoqhV/POcdRDYtvxZ4Ump9xKY36rEJ6JkBLm aRxbgkwgUJimsU1oa67y5ziYLdV4h7G6FicSHqvVsjrjCRmQtKu++6IDMLxKPO4TIVNO grzdtkU0XT3v7N0oLlOEgQNl5b4lVXb6SSuZbreiazSiunQ16xPEH9pE9yBvOgE43SCa W5ObwPW0ulc2Es+OueLncH2lvbrO6M8AOKhkIXNUv/SZt/KUx8MubJC11/bhCTT6Prdn GvWg== X-Gm-Message-State: ALoCoQmWpPoy0X/91BDt5rqZpIsWSvEC9ABxkH19LqevmVZy0Ml8Trj7Y8AGvxyPVrVx2d3xR1F6 X-Received: by 10.194.71.39 with SMTP id r7mr27753461wju.120.1443479590690; Mon, 28 Sep 2015 15:33:10 -0700 (PDT) Received: from localhost.localdomain (185-105-22-46.fiber.hringdu.is. [46.22.105.185]) by smtp.gmail.com with ESMTPSA id bk4sm15032398wjc.1.2015.09.28.15.33.09 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 28 Sep 2015 15:33:09 -0700 (PDT) From: =?UTF-8?q?Gabr=C3=ADel=20Arth=C3=BAr=20P=C3=A9tursson?= To: linux-btrfs@vger.kernel.org Cc: =?UTF-8?q?Gabr=C3=ADel=20Arth=C3=BAr=20P=C3=A9tursson?= Subject: [PATCH] btrfs-progs: add stripes filter Date: Mon, 28 Sep 2015 22:33:04 +0000 Message-Id: <1443479584-869-1-git-send-email-gabriel@system.is> X-Mailer: git-send-email 2.5.3 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID,T_RP_MATCHES_RCVD,UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP --- Documentation/btrfs-balance.asciidoc | 4 ++++ cmds-balance.c | 24 ++++++++++++++++++++++++ ioctl.h | 6 +++++- volumes.h | 1 + 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/Documentation/btrfs-balance.asciidoc b/Documentation/btrfs-balance.asciidoc index 6d2fd0c..8663855 100644 --- a/Documentation/btrfs-balance.asciidoc +++ b/Documentation/btrfs-balance.asciidoc @@ -110,6 +110,10 @@ Process only given number of chunks, after all filters apply. This can be used to specifically target a chunk in connection with other filters (drange, vrange) or just simply limit the amount of work done by a single balance run. +*stripes*:: +Balances only block groups which have the given number of stripes. The +parameter is either a range specified as , or a single integer. + *soft*:: Takes no parameters. Only has meaning when converting between profiles. When doing convert from one profile to another and soft mode is on, diff --git a/cmds-balance.c b/cmds-balance.c index 9af218b..c47f8b7 100644 --- a/cmds-balance.c +++ b/cmds-balance.c @@ -226,6 +226,21 @@ static int parse_filters(char *filters, struct btrfs_balance_args *args) return 1; } args->flags |= BTRFS_BALANCE_ARGS_LIMIT; + } else if (!strcmp(this_char, "stripes")) { + if (!value || !*value) { + fprintf(stderr, + "the stripes filter requires an argument\n"); + return 1; + } + if (parse_u64(value, &args->sstart)) { + if (parse_range(value, &args->sstart, &args->send)) { + fprintf(stderr, "Invalid stripes argument\n"); + return 1; + } + } else { + args->send = args->sstart; + } + args->flags |= BTRFS_BALANCE_ARGS_STRIPES; } else { fprintf(stderr, "Unrecognized balance option '%s'\n", this_char); @@ -262,6 +277,15 @@ static void dump_balance_args(struct btrfs_balance_args *args) (unsigned long long)args->vend); if (args->flags & BTRFS_BALANCE_ARGS_LIMIT) printf(", limit=%llu", (unsigned long long)args->limit); + if (args->flags & BTRFS_BALANCE_ARGS_STRIPES) { + if (args->sstart == args->send) { + printf(", stripes=%llu", (unsigned long long)args->sstart); + } else { + printf(", stripes=%llu..%llu", + (unsigned long long)args->sstart, + (unsigned long long)args->send); + } + } printf("\n"); } diff --git a/ioctl.h b/ioctl.h index dff015a..c1f6aec 100644 --- a/ioctl.h +++ b/ioctl.h @@ -228,7 +228,11 @@ struct btrfs_balance_args { __u64 flags; __u64 limit; /* limit number of processed chunks */ - __u64 unused[7]; + + __u64 sstart; + __u64 send; + + __u64 unused[5]; } __attribute__ ((__packed__)); /* report balance progress to userspace */ diff --git a/volumes.h b/volumes.h index 4ecb993..a809a78 100644 --- a/volumes.h +++ b/volumes.h @@ -136,6 +136,7 @@ struct map_lookup { #define BTRFS_BALANCE_ARGS_DRANGE (1ULL << 3) #define BTRFS_BALANCE_ARGS_VRANGE (1ULL << 4) #define BTRFS_BALANCE_ARGS_LIMIT (1ULL << 5) +#define BTRFS_BALANCE_ARGS_STRIPES (1ULL << 6) /* * Profile changing flags. When SOFT is set we won't relocate chunk if