From: Liu Bo <bo.li.liu@oracle.com>
To: Alex Lyakas <alex.btrfs@zadarastorage.com>
Cc: Jan Schmidt <list.btrfs@jan-o-sch.net>,
linux-btrfs <linux-btrfs@vger.kernel.org>
Subject: Re: [PATCH v7 04/13] Btrfs: disable qgroups accounting when quata_enable is 0
Date: Fri, 13 Dec 2013 13:42:57 +0800 [thread overview]
Message-ID: <20131213054256.GA14429@localhost.localdomain> (raw)
In-Reply-To: <CAOcd+r17jar_CxrYhwQX4eeKLiFgjHDuLdptes04gG_LXtozrg@mail.gmail.com>
On Tue, Dec 03, 2013 at 07:13:48PM +0200, Alex Lyakas wrote:
> Hi Liu, Jan,
>
> What happens to "struct qgroup_update"s sitting in
> trans->qgroup_ref_list in case the transaction aborts? It seems that
> they are not freed.
>
> For example, if we are in btrfs_commit_transaction() and:
> - call create_pending_snapshots()
> - call btrfs_run_delayed_items() and this fails
> So we go to cleanup_transaction() without calling
> btrfs_delayed_refs_qgroup_accounting(), which would have been called
> by btrfs_run_delayed_refs().
>
> I receive kmemleak warnings about these thingies not being freed,
> although on an older kernel. However, looking at Josef's tree, this
> still seems to be the case.
I think you're right, but I'm sure because I cannot reproduce that somehow,
so I suggest to add a assert_qgroups_uptodate() in cleanup_transaction() in
order to catch that leak if there is.
thanks,
-liubo
>
> Thanks,
> Alex.
>
>
> On Mon, Oct 14, 2013 at 7:59 AM, Liu Bo <bo.li.liu@oracle.com> wrote:
> > It's unnecessary to do qgroups accounting without enabling quota.
> >
> > Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
> > ---
> > fs/btrfs/ctree.c | 2 +-
> > fs/btrfs/delayed-ref.c | 18 ++++++++++++++----
> > fs/btrfs/qgroup.c | 3 +++
> > 3 files changed, 18 insertions(+), 5 deletions(-)
> >
> > diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
> > index 61b5bcd..fb89235 100644
> > --- a/fs/btrfs/ctree.c
> > +++ b/fs/btrfs/ctree.c
> > @@ -407,7 +407,7 @@ u64 btrfs_get_tree_mod_seq(struct btrfs_fs_info *fs_info,
> >
> > tree_mod_log_write_lock(fs_info);
> > spin_lock(&fs_info->tree_mod_seq_lock);
> > - if (!elem->seq) {
> > + if (elem && !elem->seq) {
> > elem->seq = btrfs_inc_tree_mod_seq_major(fs_info);
> > list_add_tail(&elem->list, &fs_info->tree_mod_seq_list);
> > }
> > diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c
> > index 9e1a1c9..3ec3d08 100644
> > --- a/fs/btrfs/delayed-ref.c
> > +++ b/fs/btrfs/delayed-ref.c
> > @@ -691,8 +691,13 @@ static noinline void add_delayed_tree_ref(struct btrfs_fs_info *fs_info,
> > ref->is_head = 0;
> > ref->in_tree = 1;
> >
> > - if (need_ref_seq(for_cow, ref_root))
> > - seq = btrfs_get_tree_mod_seq(fs_info, &trans->delayed_ref_elem);
> > + if (need_ref_seq(for_cow, ref_root)) {
> > + struct seq_list *elem = NULL;
> > +
> > + if (fs_info->quota_enabled)
> > + elem = &trans->delayed_ref_elem;
> > + seq = btrfs_get_tree_mod_seq(fs_info, elem);
> > + }
> > ref->seq = seq;
> >
> > full_ref = btrfs_delayed_node_to_tree_ref(ref);
> > @@ -750,8 +755,13 @@ static noinline void add_delayed_data_ref(struct btrfs_fs_info *fs_info,
> > ref->is_head = 0;
> > ref->in_tree = 1;
> >
> > - if (need_ref_seq(for_cow, ref_root))
> > - seq = btrfs_get_tree_mod_seq(fs_info, &trans->delayed_ref_elem);
> > + if (need_ref_seq(for_cow, ref_root)) {
> > + struct seq_list *elem = NULL;
> > +
> > + if (fs_info->quota_enabled)
> > + elem = &trans->delayed_ref_elem;
> > + seq = btrfs_get_tree_mod_seq(fs_info, elem);
> > + }
> > ref->seq = seq;
> >
> > full_ref = btrfs_delayed_node_to_data_ref(ref);
> > diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
> > index 4e6ef49..1cb58f9 100644
> > --- a/fs/btrfs/qgroup.c
> > +++ b/fs/btrfs/qgroup.c
> > @@ -1188,6 +1188,9 @@ int btrfs_qgroup_record_ref(struct btrfs_trans_handle *trans,
> > {
> > struct qgroup_update *u;
> >
> > + if (!trans->root->fs_info->quota_enabled)
> > + return 0;
> > +
> > BUG_ON(!trans->delayed_ref_elem.seq);
> > u = kmalloc(sizeof(*u), GFP_NOFS);
> > if (!u)
> > --
> > 1.7.7
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2013-12-13 5:43 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-14 4:59 [RFC PATCH v7 00/13] Online(inband) data deduplication Liu Bo
2013-10-14 4:59 ` [PATCH v7 01/13] Btrfs: skip merge part for delayed data refs Liu Bo
2013-10-14 4:59 ` [PATCH v7 02/13] Btrfs: improve the delayed refs process in rm case Liu Bo
2013-10-22 20:58 ` Josef Bacik
2013-10-14 4:59 ` [PATCH v7 03/13] Btrfs: introduce a head ref rbtree Liu Bo
2013-10-14 4:59 ` [PATCH v7 04/13] Btrfs: disable qgroups accounting when quata_enable is 0 Liu Bo
2013-12-03 17:13 ` Alex Lyakas
2013-12-03 18:58 ` Alex Lyakas
2013-12-13 5:42 ` Liu Bo [this message]
2013-12-13 6:04 ` Liu Bo
2013-10-14 4:59 ` [PATCH v7 05/13] Btrfs: introduce dedup tree and relatives Liu Bo
2013-10-14 4:59 ` [PATCH v7 06/13] Btrfs: introduce dedup tree operations Liu Bo
2013-10-14 4:59 ` [PATCH v7 07/13] Btrfs: introduce dedup state Liu Bo
2013-10-14 4:59 ` [PATCH v7 08/13] Btrfs: make ordered extent aware of dedup Liu Bo
2013-10-14 4:59 ` [PATCH v7 09/13] Btrfs: online(inband) data dedup Liu Bo
2013-10-14 4:59 ` [PATCH v7 10/13] Btrfs: skip dedup reference during backref walking Liu Bo
2013-10-14 4:59 ` [PATCH v7 11/13] Btrfs: don't return space for dedup extent Liu Bo
2013-10-14 4:59 ` [PATCH v7 12/13] Btrfs: fix a crash of dedup ref Liu Bo
2013-10-14 4:59 ` [PATCH v7 13/13] Btrfs: add ioctl of dedup control Liu Bo
2013-10-14 4:59 ` [PATCH v3] Btrfs-progs: add dedup subcommand Liu Bo
2013-10-22 18:55 ` [RFC PATCH v7 00/13] Online(inband) data deduplication Aurelien Jarno
2013-10-23 2:26 ` Liu Bo
2013-10-23 2:36 ` Liu Bo
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=20131213054256.GA14429@localhost.localdomain \
--to=bo.li.liu@oracle.com \
--cc=alex.btrfs@zadarastorage.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=list.btrfs@jan-o-sch.net \
/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.