From patchwork Mon Sep 28 22:32:41 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: 7281301 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 251B6BEEA4 for ; Mon, 28 Sep 2015 22:32:58 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 6B8D120737 for ; Mon, 28 Sep 2015 22:32:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E9E80206EB for ; Mon, 28 Sep 2015 22:32:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754341AbbI1Wcv (ORCPT ); Mon, 28 Sep 2015 18:32:51 -0400 Received: from mail-wi0-f175.google.com ([209.85.212.175]:34229 "EHLO mail-wi0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754063AbbI1Wcu (ORCPT ); Mon, 28 Sep 2015 18:32:50 -0400 Received: by wicfx3 with SMTP id fx3so125150464wic.1 for ; Mon, 28 Sep 2015 15:32:48 -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=XiFQ/GJQlmB11Z7pgpQoP4MFUSOu+05UzUVztYOPyQA=; b=He1xBA4O0GxeGTkLdJHk58o84hEOHHRAKq/kGXi2pRtzow+08TAopxN6bhGbDKQq3L 4DMQyEiQS2k1BMdfHSkCB81VSgKtEvtMBR/WTiXEAMT55Mg42ZPA/oZbzmWFJENrKOGD f+lenbs6kxU7FImg5nsXA15he7t50xqKX3MN8= 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=XiFQ/GJQlmB11Z7pgpQoP4MFUSOu+05UzUVztYOPyQA=; b=iXAfblq8yOMWLVks1RT9aNCbeDQUDfFze5e9YrBU7k5rnqoV71kXy0GOXMtLHBt8yI PQVsJ+Qf/BasT24V97EnvaDYNvK7cSK42TN6HpNDz6k7MMbPBe0Lp4wiaF1Jpi9zENTQ HfZ01Jk2DYhlFZGhfmwSxS6Ob9AGChU5FOpJV8ou5K8+D9yskSuZE2nYlRGQ0bvg5JUa hwoPxhwVdx1qrcs29jEi5Ktc9iIRtnAYmoQ+ImdKxqB93do6atW2r19oAtQN32t3WunR Zz/IiaHIlEAe0Y8zqZrguCRpG13PhCda50xjbjas5965h5VndDaPAk9MoJWDJ3tMC6wX IuiQ== X-Gm-Message-State: ALoCoQnwWILrbVuIJwPhk42kjUJdEuUnpyirqH2ZeO3zW/Pbk6PRaKQ/sLv/ISK+4PaAE7N/vyrO X-Received: by 10.180.39.193 with SMTP id r1mr20328243wik.57.1443479568822; Mon, 28 Sep 2015 15:32:48 -0700 (PDT) Received: from localhost.localdomain (185-105-22-46.fiber.hringdu.is. [46.22.105.185]) by smtp.gmail.com with ESMTPSA id cv4sm20591165wjc.17.2015.09.28.15.32.47 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 28 Sep 2015 15:32:48 -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: add stripes filter Date: Mon, 28 Sep 2015 22:32:41 +0000 Message-Id: <1443479561-785-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 --- fs/btrfs/ctree.h | 6 +++++- fs/btrfs/volumes.c | 18 ++++++++++++++++++ fs/btrfs/volumes.h | 1 + include/uapi/linux/btrfs.h | 6 +++++- 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 938efe3..78573e5 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -849,7 +849,11 @@ struct btrfs_disk_balance_args { /* BTRFS_BALANCE_ARGS_LIMIT value */ __le64 limit; - __le64 unused[7]; + /* btrfs stripes filter */ + __le64 sstart; + __le64 send; + + __le64 unused[5]; } __attribute__ ((__packed__)); /* diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 6fc73586..dc65fbb 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -3170,6 +3170,18 @@ static int chunk_vrange_filter(struct extent_buffer *leaf, return 1; } +static int chunk_stripes_filter(struct extent_buffer *leaf, + struct btrfs_chunk *chunk, + struct btrfs_balance_args *bargs) +{ + int num_stripes = btrfs_chunk_num_stripes(leaf, chunk); + + if (bargs->sstart <= num_stripes && num_stripes <= bargs->send) + return 0; + + return 1; +} + static int chunk_soft_convert_filter(u64 chunk_type, struct btrfs_balance_args *bargs) { @@ -3236,6 +3248,12 @@ static int should_balance_chunk(struct btrfs_root *root, return 0; } + /* stripes filter */ + if ((bargs->flags & BTRFS_BALANCE_ARGS_STRIPES) && + chunk_stripes_filter(leaf, chunk, bargs)) { + return 0; + } + /* soft profile changing mode */ if ((bargs->flags & BTRFS_BALANCE_ARGS_SOFT) && chunk_soft_convert_filter(chunk_type, bargs)) { diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h index 2ca784a..fb6b89a 100644 --- a/fs/btrfs/volumes.h +++ b/fs/btrfs/volumes.h @@ -375,6 +375,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 diff --git a/include/uapi/linux/btrfs.h b/include/uapi/linux/btrfs.h index b6dec05..a7819d0 100644 --- a/include/uapi/linux/btrfs.h +++ b/include/uapi/linux/btrfs.h @@ -218,7 +218,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 */