From: teigland@sourceware.org <teigland@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] cluster/dlm-kernel/src proc.c
Date: 30 May 2007 18:04:18 -0000 [thread overview]
Message-ID: <20070530180418.14549.qmail@sourceware.org> (raw)
CVSROOT: /cvs/cluster
Module name: cluster
Branch: RHEL4
Changes by: teigland at sourceware.org 2007-05-30 18:04:17
Modified files:
dlm-kernel/src : proc.c
Log message:
From jwhiter at redhat.com in bz 240356:
Basically when you cat /proc/cluster/dlm_locks theres a possibility that while
traversing the rsb list that an rsb could end up deleted before you print it
out. This patch moves the assigning of the di->rsb under the rsbtbl lock for
that list and then grabs a reference to that rsb so it does not get removed out
from underneath us, then we release the reference to the rsb after we've
grabbed the next one.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm-kernel/src/proc.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.12.2.1&r2=1.12.2.2
--- cluster/dlm-kernel/src/Attic/proc.c 2006/02/15 18:43:28 1.12.2.1
+++ cluster/dlm-kernel/src/Attic/proc.c 2007/05/30 18:04:17 1.12.2.2
@@ -18,6 +18,7 @@
#include <linux/module.h>
#include "dlm_internal.h"
+#include "rsb.h"
#include "lockspace.h"
#if defined(DLM_DEBUG)
@@ -102,6 +103,9 @@
read_lock(&di->ls->ls_rsbtbl[i].lock);
if (!list_empty(&di->ls->ls_rsbtbl[i].list)) {
di->next = di->ls->ls_rsbtbl[i].list.next;
+ di->rsb = list_entry(di->next, struct dlm_rsb,
+ res_hashchain);
+ hold_rsb(di->rsb);
read_unlock(&di->ls->ls_rsbtbl[i].lock);
break;
}
@@ -112,6 +116,7 @@
if (di->entry >= di->ls->ls_rsbtbl_size)
return NULL; /* End of hash list */
} else { /* Find the next entry in the list */
+ struct dlm_rsb *old = di->rsb;
i = di->entry;
read_lock(&di->ls->ls_rsbtbl[i].lock);
di->next = di->next->next;
@@ -120,11 +125,14 @@
di->next = NULL;
di->entry++;
read_unlock(&di->ls->ls_rsbtbl[i].lock);
+ release_rsb(old);
return next_rsb(di); /* do the top half of this conditional */
}
+ di->rsb = list_entry(di->next, struct dlm_rsb, res_hashchain);
+ hold_rsb(di->rsb);
read_unlock(&di->ls->ls_rsbtbl[i].lock);
+ release_rsb(old);
}
- di->rsb = list_entry(di->next, struct dlm_rsb, res_hashchain);
return di;
}
next reply other threads:[~2007-05-30 18:04 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-30 18:04 teigland [this message]
-- strict thread matches above, loose matches on Subject: below --
2007-07-02 13:53 [Cluster-devel] cluster/dlm-kernel/src proc.c teigland
2007-08-06 18:28 cfeist
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=20070530180418.14549.qmail@sourceware.org \
--to=teigland@sourceware.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).