* [Cluster-devel] cluster/dlm-kernel/src proc.c
@ 2007-08-06 18:28 cfeist
0 siblings, 0 replies; 3+ messages in thread
From: cfeist @ 2007-08-06 18:28 UTC (permalink / raw)
To: cluster-devel.redhat.com
CVSROOT: /cvs/cluster
Module name: cluster
Branch: RHEL45
Changes by: cfeist at sourceware.org 2007-08-06 18:28:25
Modified files:
dlm-kernel/src : proc.c
Log message:
Fixes bz #240356 (cat /proc/cluster/dlm_locks crashes system)
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm-kernel/src/proc.c.diff?cvsroot=cluster&only_with_tag=RHEL45&r1=1.12.2.1&r2=1.12.2.1.4.1
--- 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/08/06 18:28:25 1.12.2.1.4.1
@@ -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;
}
^ permalink raw reply [flat|nested] 3+ messages in thread* [Cluster-devel] cluster/dlm-kernel/src proc.c
@ 2007-07-02 13:53 teigland
0 siblings, 0 replies; 3+ messages in thread
From: teigland @ 2007-07-02 13:53 UTC (permalink / raw)
To: cluster-devel.redhat.com
CVSROOT: /cvs/cluster
Module name: cluster
Branch: RHEL4
Changes by: teigland at sourceware.org 2007-07-02 13:53:28
Modified files:
dlm-kernel/src : proc.c
Log message:
Print the owner pid of each lock when dumping /proc/cluster/dlm_locks.
This changes the format of the proc output in case anyone is parsing it.
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.2&r2=1.12.2.3
--- cluster/dlm-kernel/src/Attic/proc.c 2007/05/30 18:04:17 1.12.2.2
+++ cluster/dlm-kernel/src/Attic/proc.c 2007/07/02 13:53:28 1.12.2.3
@@ -232,6 +232,8 @@
|| lkb->lkb_status == GDLM_LKSTS_WAITING)
seq_printf(s, " (%s)", print_lockmode(lkb->lkb_rqmode));
+ seq_printf(s, " %u", lkb->lkb_ownpid);
+
if (lkb->lkb_range) {
/* This warns on Alpha. Tough. Only I see it */
if (lkb->lkb_status == GDLM_LKSTS_CONVERT
^ permalink raw reply [flat|nested] 3+ messages in thread* [Cluster-devel] cluster/dlm-kernel/src proc.c
@ 2007-05-30 18:04 teigland
0 siblings, 0 replies; 3+ messages in thread
From: teigland @ 2007-05-30 18:04 UTC (permalink / raw)
To: cluster-devel.redhat.com
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;
}
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2007-08-06 18:28 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-06 18:28 [Cluster-devel] cluster/dlm-kernel/src proc.c cfeist
-- strict thread matches above, loose matches on Subject: below --
2007-07-02 13:53 teigland
2007-05-30 18:04 teigland
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).