From patchwork Mon Nov 7 21:40:49 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adam Borowski X-Patchwork-Id: 9416119 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id A8A326048F for ; Mon, 7 Nov 2016 21:41:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9B4C42895D for ; Mon, 7 Nov 2016 21:41:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8FCC828E3C; Mon, 7 Nov 2016 21:41:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0CDAB2895D for ; Mon, 7 Nov 2016 21:41:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751605AbcKGVlK (ORCPT ); Mon, 7 Nov 2016 16:41:10 -0500 Received: from tartarus.angband.pl ([89.206.35.136]:42840 "EHLO tartarus.angband.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750981AbcKGVlJ (ORCPT ); Mon, 7 Nov 2016 16:41:09 -0500 Received: from umbar.angband.pl ([2001:6a0:118::6]) by tartarus.angband.pl with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1c3rf3-0007at-VR; Mon, 07 Nov 2016 22:41:04 +0100 Received: from kilobyte by umbar.angband.pl with local (Exim 4.87) (envelope-from ) id 1c3rf3-00019O-Hn; Mon, 07 Nov 2016 22:41:01 +0100 From: Adam Borowski To: David Sterba , Josef Bacik , linux-btrfs@vger.kernel.org Cc: Adam Borowski Date: Mon, 7 Nov 2016 22:40:49 +0100 Message-Id: <20161107214049.4378-1-kilobyte@angband.pl> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20161107213810.GA25649@angband.pl> References: <20161107213810.GA25649@angband.pl> X-SA-Exim-Connect-IP: 2001:6a0:118::6 X-SA-Exim-Mail-From: kilobyte@angband.pl Subject: [PATCH v2] btrfs: make block group flags in balance printks human-readable X-SA-Exim-Version: 4.2.1 (built Mon, 26 Dec 2011 16:24:06 +0000) X-SA-Exim-Scanned: Yes (on tartarus.angband.pl) Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP They're not even documented anywhere, letting users with no recourse but to RTFS. It's no big burden to output the bitfield as words. Also, display unknown flags as hex. Signed-off-by: Adam Borowski --- fs/btrfs/relocation.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index c4af0cd..b5d2a00 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -4333,6 +4333,42 @@ static struct reloc_control *alloc_reloc_control(struct btrfs_fs_info *fs_info) } /* + * explain bit flags, prefixed by a '|' that'll be dropped + */ +static char *describe_block_group_flags(char *buf, u64 flags) +{ +#define BUF_SIZE 128 + char *buf0 = buf = kmalloc(BUF_SIZE, GFP_NOFS); + + if (!buf) + return 0; + + if (!flags) { + strcpy(buf, "|NONE"); + return buf0; + } +#define DESCRIBE_FLAG(f, d) \ + if (flags & BTRFS_BLOCK_GROUP_##f) { \ + buf += snprintf(buf, buf0 - buf + BUF_SIZE, "|%s", d); \ + flags &= ~BTRFS_BLOCK_GROUP_##f; \ + } + DESCRIBE_FLAG(DATA, "data"); + DESCRIBE_FLAG(SYSTEM, "system"); + DESCRIBE_FLAG(METADATA, "metadata"); + DESCRIBE_FLAG(RAID0, "raid0"); + DESCRIBE_FLAG(RAID1, "raid1"); + DESCRIBE_FLAG(DUP, "dup"); + DESCRIBE_FLAG(RAID10, "raid10"); + DESCRIBE_FLAG(RAID5, "raid5"); + DESCRIBE_FLAG(RAID6, "raid6"); + if (flags) + buf += snprintf(buf, buf0 - buf + BUF_SIZE, "|0x%llx", flags); + return buf0; +#undef DESCRIBE_FLAG +#undef BUF_SIZE +} + +/* * function to relocate all extents in a block group. */ int btrfs_relocate_block_group(struct btrfs_root *extent_root, u64 group_start) @@ -4344,6 +4380,7 @@ int btrfs_relocate_block_group(struct btrfs_root *extent_root, u64 group_start) int ret; int rw = 0; int err = 0; + char *flags_str; rc = alloc_reloc_control(fs_info); if (!rc) @@ -4388,9 +4425,19 @@ int btrfs_relocate_block_group(struct btrfs_root *extent_root, u64 group_start) goto out; } - btrfs_info(extent_root->fs_info, - "relocating block group %llu flags %llu", - rc->block_group->key.objectid, rc->block_group->flags); + if ((flags_str = describe_block_group_flags(flags_str, + rc->block_group->flags))) { + btrfs_info(extent_root->fs_info, + "relocating block group %llu flags %s", + rc->block_group->key.objectid, + flags_str+1); + kfree(flags_str); + } else { + btrfs_info(extent_root->fs_info, + "relocating block group %llu flags %llx", + rc->block_group->key.objectid, + rc->block_group->flags); + } btrfs_wait_block_group_reservations(rc->block_group); btrfs_wait_nocow_writers(rc->block_group);