CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL45 Changes by: [EMAIL PROTECTED] 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; }