From: Tejun Heo <tj@kernel.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH 10/14] dlm: don't use idr_remove_all()
Date: Thu, 31 Jan 2013 16:18:41 -0800 [thread overview]
Message-ID: <20130201001841.GP6824@mtj.dyndns.org> (raw)
In-Reply-To: <20130131235320.GN6824@mtj.dyndns.org>
Hello, David.
On Thu, Jan 31, 2013 at 03:53:20PM -0800, Tejun Heo wrote:
> The function description is misleading. The function does search
> inclusive range and needs explicit cursor increment to make progress.
> Weird that it doesn't work. Looking into it. I'll write when I know
> more.
It looks a bit weird to me that ls->ls_recover_list_count is also
incremented by recover_list_add(). The two code paths don't seem to
be interlocke at least upon my very shallow glance. Is it that only
either the list or idr is in use?
Anyways, can you please apply the following patch and see which IDs
are leaking from the iteration? The patch too is only compile tested
so I might have done something stupid but it hopefully shouldn't be
too difficult to make it work.
Thanks!
---
fs/dlm/recover.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
--- a/fs/dlm/recover.c
+++ b/fs/dlm/recover.c
@@ -351,6 +351,12 @@ static struct dlm_rsb *recover_idr_find(
return r;
}
+static int dlm_dump_idr(int id, void *p, void *data)
+{
+ pr_cont(" %d", id);
+ return 0;
+}
+
static void recover_idr_clear(struct dlm_ls *ls)
{
struct dlm_rsb *r;
@@ -358,7 +364,9 @@ static void recover_idr_clear(struct dlm
spin_lock(&ls->ls_recover_idr_lock);
+ pr_info("XXX clearing:");
idr_for_each_entry(&ls->ls_recover_idr, r, id) {
+ pr_cont(" %d", id);
idr_remove(&ls->ls_recover_idr, id);
r->res_id = 0;
r->res_recover_locks_count = 0;
@@ -366,10 +374,14 @@ static void recover_idr_clear(struct dlm
dlm_put_rsb(r);
}
+ pr_cont("\n");
if (ls->ls_recover_list_count != 0) {
log_error(ls, "warning: recover_list_count %d",
ls->ls_recover_list_count);
+ pr_info("XXX leftovers: ");
+ idr_for_each(&ls->ls_recover_idr, dlm_dump_idr, NULL);
+ pr_cont("\n");
ls->ls_recover_list_count = 0;
}
spin_unlock(&ls->ls_recover_idr_lock);
next prev parent reply other threads:[~2013-02-01 0:18 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1359163872-1949-1-git-send-email-tj@kernel.org>
2013-01-26 1:31 ` [Cluster-devel] [PATCH 09/14] dlm: use idr_for_each_entry() in recover_idr_clear() error path Tejun Heo
2013-01-28 15:55 ` David Teigland
2013-01-26 1:31 ` [Cluster-devel] [PATCH 10/14] dlm: don't use idr_remove_all() Tejun Heo
2013-01-28 15:57 ` David Teigland
2013-01-29 15:13 ` David Teigland
2013-01-30 21:24 ` David Teigland
2013-01-31 23:53 ` Tejun Heo
2013-02-01 0:18 ` Tejun Heo [this message]
2013-02-01 17:44 ` David Teigland
2013-02-01 18:00 ` Tejun Heo
2013-02-02 23:10 ` [Cluster-devel] [PATCH] idr: fix a subtle bug in idr_get_next() Tejun Heo
2013-02-02 23:11 ` Tejun Heo
2013-02-03 2:15 ` Randy Dunlap
2013-02-03 17:53 ` Hugh Dickins
2013-02-05 15:36 ` David Teigland
2013-02-04 3:39 ` Li Zefan
2013-02-04 17:44 ` Tejun Heo
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=20130201001841.GP6824@mtj.dyndns.org \
--to=tj@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;
as well as URLs for NNTP newsgroup(s).