From: David Sterba <dsterba@suse.cz>
To: Josef Bacik <josef@toxicpanda.com>
Cc: linux-btrfs@vger.kernel.org, kernel-team@fb.com
Subject: Re: [PATCH 2/2] btrfs: pretty print leaked root name
Date: Mon, 7 Sep 2020 14:28:54 +0200 [thread overview]
Message-ID: <20200907122853.GZ28318@twin.jikos.cz> (raw)
In-Reply-To: <d749b9482370c5c32d32fb9e8e2a6d4671b19732.1599157686.git.josef@toxicpanda.com>
On Thu, Sep 03, 2020 at 02:29:51PM -0400, Josef Bacik wrote:
> I'm a actual human being so am incapable of converting u64 to s64 in my
> head, so add a helper to get the pretty name of a root objectid and use
> that helper to spit out the name for any special roots for leaked roots,
> so I don't have to scratch my head and figure out which root I messed up
> the refs for.
>
> Signed-off-by: Josef Bacik <josef@toxicpanda.com>
> ---
> fs/btrfs/disk-io.c | 6 ++++--
> fs/btrfs/print-tree.c | 39 +++++++++++++++++++++++++++++++++++++++
> fs/btrfs/print-tree.h | 3 +++
> 3 files changed, 46 insertions(+), 2 deletions(-)
>
> diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
> index 7147237d9bf0..71beb9493ab4 100644
> --- a/fs/btrfs/disk-io.c
> +++ b/fs/btrfs/disk-io.c
> @@ -1504,10 +1504,12 @@ void btrfs_check_leaked_roots(struct btrfs_fs_info *fs_info)
> struct btrfs_root *root;
>
> while (!list_empty(&fs_info->allocated_roots)) {
> + char buf[BTRFS_ROOT_NAME_BUF_LEN];
> +
> root = list_first_entry(&fs_info->allocated_roots,
> struct btrfs_root, leak_list);
> - btrfs_err(fs_info, "leaked root %llu-%llu refcount %d",
> - root->root_key.objectid, root->root_key.offset,
> + btrfs_err(fs_info, "leaked root %s refcount %d",
> + btrfs_root_name(root->root_key.objectid, buf),
> refcount_read(&root->refs));
> while (refcount_read(&root->refs) > 1)
> btrfs_put_root(root);
> diff --git a/fs/btrfs/print-tree.c b/fs/btrfs/print-tree.c
> index 80567c11ec12..d0370075a719 100644
> --- a/fs/btrfs/print-tree.c
> +++ b/fs/btrfs/print-tree.c
> @@ -7,6 +7,45 @@
> #include "disk-io.h"
> #include "print-tree.h"
>
> +struct name_map {
> + u64 id;
> + char *name;
const char* or maybe even a fixed length string, removing the
_TREE suffix
> +};
> +
> +static const struct name_map root_map[] = {
> + { BTRFS_ROOT_TREE_OBJECTID, "ROOT_TREE" },
> + { BTRFS_EXTENT_TREE_OBJECTID, "EXTENT_TREE" },
> + { BTRFS_CHUNK_TREE_OBJECTID, "CHUNK_TREE" },
> + { BTRFS_DEV_TREE_OBJECTID, "DEV_TREE" },
> + { BTRFS_FS_TREE_OBJECTID, "FS_TREE" },
> + { BTRFS_ROOT_TREE_DIR_OBJECTID, "ROOT_TREE_DIR" },
This is not a tree id
> + { BTRFS_CSUM_TREE_OBJECTID, "CSUM_TREE" },
> + { BTRFS_TREE_LOG_OBJECTID, "TREE_LOG" },
> + { BTRFS_QUOTA_TREE_OBJECTID, "QUOTA_TREE" },
> + { BTRFS_UUID_TREE_OBJECTID, "UUID_TREE" },
> + { BTRFS_FREE_SPACE_TREE_OBJECTID, "FREE_SPACE_TREE" },
> + { BTRFS_DATA_RELOC_TREE_OBJECTID, "DATA_RELOC_TREE" },
I've noticed we have the id -> str mapping already in
btrfs_lockdep_keysets, so there could be just one such structure and
we'd add wrappers around that.
Also the C99 initializers should be used.
> +};
> +
> +char *btrfs_root_name(u64 objectid, char *buf)
> +{
> + int i;
> +
> + if (objectid == BTRFS_TREE_RELOC_OBJECTID) {
> + snprintf(buf, BTRFS_ROOT_NAME_BUF_LEN,
> + "TREE_RELOC offset=%llu", objectid);
The reloc tree is an outlier here so I wonder if we'd rather have a nice
pretty printer of the tree root name and deal with the oddities where
required rather than inside the helper. In this case there would have to
be some conditionals in btrfs_check_leaked_roots, as we can't do that in
the format string.
next prev parent reply other threads:[~2020-09-07 12:31 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-03 18:29 [PATCH 0/2][v3] Some leaked root fixes Josef Bacik
2020-09-03 18:29 ` [PATCH 1/2] btrfs: free fs roots on failed mount Josef Bacik
2020-09-07 12:50 ` David Sterba
2020-09-03 18:29 ` [PATCH 2/2] btrfs: pretty print leaked root name Josef Bacik
2020-09-07 12:28 ` David Sterba [this message]
2020-09-09 7:37 ` David Sterba
-- strict thread matches above, loose matches on Subject: below --
2020-08-20 20:00 [PATCH 0/2][v2] Some leaked root fixes Josef Bacik
2020-08-20 20:00 ` [PATCH 2/2] btrfs: pretty print leaked root name Josef Bacik
2020-08-21 7:35 ` Nikolay Borisov
2020-08-21 10:13 ` David Sterba
2020-08-21 10:25 ` Nikolay Borisov
2020-08-21 14:00 ` Josef Bacik
2020-08-24 11:30 ` David Sterba
2020-08-24 12:46 ` David Sterba
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=20200907122853.GZ28318@twin.jikos.cz \
--to=dsterba@suse.cz \
--cc=josef@toxicpanda.com \
--cc=kernel-team@fb.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox