[SSI] openssi/kernel/cluster/ssi/vproc dvp_debug.c, 1.11, 1.12 dvp_init.c, 1.11, 1.12 dvp_misc.c, 1.13, 1.14 dvp_pvpsops.c, 1.16, 1.17 dvp_vpops.c, 1.38, 1.39 nd_setup.c, 1.8, 1.9 nd_slave.c, 1.9, 1.10 nsc_initproc.c, 1.21, 1.22 procfs_subr.c, 1.12, 1.13 rproc_svr_vproc.c, 1.14, 1.15 vp_init.c, 1.7, 1.8 vp_subr.c, 1.16, 1.17

Roger Tsang <[email protected]>
Newsgroups gmane.linux.cluster.ssic.cvs
Message-ID <[email protected]>
Update of /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc
In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv8304/cluster/ssi/vproc

Modified Files:
      Tag: OPENSSI-FC
	dvp_debug.c dvp_init.c dvp_misc.c dvp_pvpsops.c dvp_vpops.c 
	nd_setup.c nd_slave.c nsc_initproc.c procfs_subr.c 
	rproc_svr_vproc.c vp_init.c vp_subr.c 
Log Message:
IPC:
- Fix uninitialized list_head in rmtunix_socket_info structure; SSI-1.9.0 bug. (#ifdef IPC_STALE_RMTUNIX_CACHE_FIX)

VPROC:
- Remove deprecated RW semaphore implementation of vproc list lock.
- Regression:
  - semi-deadlock in vproc_slave_carelist_create(); might sleep
    while holding vproc list lock. (#ifdef VPROC_LIST_SPINLOCK)

 cluster/ssi/vproc/dvp_debug.c       |   10 -------
 cluster/ssi/vproc/dvp_init.c        |   31 ++---------------------
 cluster/ssi/vproc/dvp_misc.c        |   24 +++---------------
 cluster/ssi/vproc/dvp_pvpsops.c     |   28 ++++-----------------
 cluster/ssi/vproc/dvp_vpops.c       |    8 ------
 cluster/ssi/vproc/nd_setup.c        |   24 +++---------------
 cluster/ssi/vproc/nd_slave.c        |   35 +++++++++++++++++++-------
 cluster/ssi/vproc/nsc_initproc.c    |    7 -----
 cluster/ssi/vproc/procfs_subr.c     |   24 ++++++------------
 cluster/ssi/vproc/rproc_svr_vproc.c |    8 ------
 cluster/ssi/vproc/vp_init.c         |   14 ++--------
 cluster/ssi/vproc/vp_subr.c         |   48 ++++++++++--------------------------
 include/cluster/ssi/ipc/unixnm.h    |    8 ++++--
 include/linux/vproc.h               |   19 ++++++--------
 14 files changed, 84 insertions(+), 204 deletions(-)


Index: vp_subr.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/vp_subr.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- vp_subr.c	8 Feb 2009 02:44:43 -0000	1.16
+++ vp_subr.c	9 Feb 2009 05:00:36 -0000	1.17
@@ -44,10 +44,8 @@
 	int found = 0;
 
 #ifndef VPROC_RCU_LIST
-	if (needlock) {
-		LOCK_SHR_RW_LOCK(&vproc_list_lock);
-	}
-	SSI_ASSERT_LOCKED_SHR_RW_LOCK(&vproc_list_lock);
+	if (needlock)
+		VPROC_LIST_LOCK();
 
 	list_for_each_entry(v, &vproc_hash[VPROCPIDHASH(pid)], vp_list) {
 #else
@@ -70,7 +68,7 @@
 		    !VPROC_HOLD_AND_CHECK(v, "vprocptr"))
 			found = 0;
 #endif
-		UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
+		VPROC_LIST_UNLOCK();
 	}
 #else /* VPROC_RCU_LIST */
 #ifdef VPROC_RELEASE__REFCNT_RACE_FIX
@@ -139,9 +137,7 @@
 	v = kzmalloc_nofail(size);
 #endif
 	v->vp_data = ((char *)v) + sizeof(struct vproc);
-#if !defined(ATOMIC_VPROC_REFCNT) || defined(VPROC_RCU_LIST)
 	VPROC_REFCNT_LOCK_INIT(v);
-#endif
 
 #ifdef VPROC_DEBUG
 	nvproc++;
@@ -166,8 +162,11 @@
 	INIT_LIST_HEAD(&v->vp_list);
 #ifdef VPROC_RCU_LIST
 	INIT_RCU_HEAD(&v->vp_rcu);
+#ifdef VPROC_LIST_SPINLOCK
+	INIT_LIST_HEAD(&v->vp_carelist);
 #endif
 #endif
+#endif /* VPROC_HASH_LIST */
 #ifdef NSCVPD_DEBUG
 	PVP(v)->pvp_lasthold = TICKS();
 #endif
@@ -251,7 +250,7 @@
 #else
 	might_sleep_if(atomic_read(&v->vp_ref_cnt) == 1);
 #ifdef VPROC_LIST_SPINLOCK
-	if (!atomic_dec_and_lock(&v->vp_ref_cnt, &(&vproc_list_lock)->sp_lock))
+	if (!atomic_dec_and_lock(&v->vp_ref_cnt, &vproc_list_lock))
 #else
 	if (!atomic_dec_and_test(&v->vp_ref_cnt))
 #endif
@@ -267,9 +266,7 @@
 		locked = 1;
 	}
 #else
-#ifndef VPROC_RCU_LIST
-	LOCK_EXCL_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
 #ifndef VPROC_LIST_SPINLOCK
 	VPROC_LIST_LOCK();
 #endif
@@ -289,8 +286,6 @@
 #endif /* VPROC_RELEASE__REFCNT_RACE_FIX */
 
 #ifdef ATOMIC_VPROC_REFCNT
-#ifdef VPROC_LIST_SPINLOCK
-#ifdef VPROC_RCU_LIST
 	VPROC_REFCNT_LOCK(v);
 	if (READ_ATOMIC_INT(&v->vp_ref_cnt)) {
 		VPROC_REFCNT_UNLOCK(v);
@@ -298,17 +293,8 @@
 	}
 	v->vp_magic = 0;
 	VPROC_REFCNT_UNLOCK(v);
-#endif
-	BUG_ON(READ_ATOMIC_INT(&v->vp_ref_cnt));
 #else
 	/*
-	 * Reference count got bumped
-	 */
-	if (READ_ATOMIC_INT(&v->vp_ref_cnt) > 0)
-		goto out_unlock;
-#endif
-#else /* !ATOMIC_VPROC_REFCNT */
-	/*
 	 * Reference count got bumped; just
 	 * do our decrement and return.
 	 */
@@ -321,7 +307,7 @@
 	v->vp_ref_cnt--;
 	SSI_ASSERT(v->vp_ref_cnt != -1);
 	VPROC_REFCNT_UNLOCK(v);
-#endif
+#endif /* !ATOMIC_VPROC_REFCNT */
 
 	/*
 	 * Take the dead vproc out of the hash list
@@ -349,15 +335,9 @@
 	if (locked)
 		VPROC_LIST_UNLOCK();
 #else
-#ifndef VPROC_RCU_LIST
-	UNLOCK_EXCL_RW_LOCK(&vproc_list_lock);
-#else
-#ifdef VPROC_LIST_SPINLOCK
-	spin_unlock(&(&vproc_list_lock)->sp_lock);
-#else
+#ifdef VPROC_RCU_LIST
 	VPROC_LIST_UNLOCK();
 #endif
-#endif
 #endif /* !VPROC_HASH_LIST */
 
 	/*
@@ -391,7 +371,6 @@
 	int check)
 {
 #ifdef VPROC_RELEASE__REFCNT_RACE_FIX
-#ifdef VPROC_RCU_LIST
 	if (check) {
 		VPROC_REFCNT_LOCK(v);
 		if (!VPROCPTR_VALID(v)) {
@@ -399,13 +378,14 @@
 			VPROC_REFCNT_UNLOCK(v);
 			return -ESRCH;
 		}
+#ifdef ATOMIC_VPROC_REFCNT
 		INCR_ATOMIC_INT(&v->vp_ref_cnt);
+#else
+		v->vp_ref_cnt++;
+#endif
 		VPROC_REFCNT_UNLOCK(v);
 		return (ESUCCESS);
 	}
-#else
-#error not yet implemented
-#endif
 #endif /* VPROC_RELEASE__REFCNT_RACE_FIX */
 	BUG_ON(!VPROCPTR_VALID(v));
 #ifndef ATOMIC_VPROC_REFCNT

Index: nd_setup.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/nd_setup.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- nd_setup.c	10 Oct 2008 08:10:32 -0000	1.8
+++ nd_setup.c	9 Feb 2009 05:00:36 -0000	1.9
@@ -413,12 +413,8 @@
 	struct vproc *vp;
 	int i;
 
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
-	LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
 	rcu_read_lock();
-#endif
 #else
 	VPROC_LIST_LOCK();
 #endif
@@ -441,12 +437,8 @@
 			VPROC_UNLOCK_FLAG(vp, "vproc_setup_mark_origin_vprocs");
 		}
 	}
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
-	UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
 	rcu_read_unlock();
-#endif
 #else
 	VPROC_LIST_UNLOCK();
 #endif
@@ -477,12 +469,8 @@
 	 * NOTE: We cannot call anything that acquires the vproc
 	 *	 list lock inside this loop or in any code invoked.
 	 */
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
-	LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
-	VPROC_LIST_LOCK();
-#endif
 	for (i=0; i < vprochsz; i++) {
+		VPROC_LIST_LOCK();
 #ifdef VPROC_HASH_LIST
 #ifdef VPROC_RCU_LIST
 		list_for_each_entry_rcu(vp, &vproc_hash[i], vp_list) {
@@ -536,12 +524,8 @@
 				vcdp = vproc_caredata_alloc(1);
 			}
 		}
+		VPROC_LIST_UNLOCK();
 	}
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
-	UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
-	VPROC_LIST_UNLOCK();
-#endif
 
 	vproc_caredata_dealloc(vcdp, 1);
 

Index: dvp_misc.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_misc.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- dvp_misc.c	10 Oct 2008 08:10:32 -0000	1.13
+++ dvp_misc.c	9 Feb 2009 05:00:36 -0000	1.14
@@ -430,12 +430,8 @@
 #endif /* !VPROC_HOLD_ZERO_GET_TASK */
 #endif
 
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
-	LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
 	rcu_read_lock();
-#endif
 #else
 	VPROC_LIST_LOCK();      
 #endif
@@ -454,12 +450,8 @@
 				count++;
 		}       
 	}
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
-	UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
 	rcu_read_unlock();
-#endif
 #else
 	VPROC_LIST_UNLOCK();
 #endif
@@ -470,12 +462,8 @@
 		return;
 	}
 
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
-	LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
 	rcu_read_lock();
-#endif
 #else
 	VPROC_LIST_LOCK();      
 #endif
@@ -505,12 +493,8 @@
 		if (ind >= count)
 			break;
 	}
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
-	UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
 	rcu_read_unlock();
-#endif
 #else
 	VPROC_LIST_UNLOCK();
 #endif

Index: nd_slave.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/nd_slave.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- nd_slave.c	10 Oct 2008 08:10:32 -0000	1.9
+++ nd_slave.c	9 Feb 2009 05:00:36 -0000	1.10
@@ -377,7 +377,12 @@
 	int			trans_type)
 {
 	vproc_caredata_t *vcdp;
+#ifdef VPROC_LIST_SPINLOCK
+	struct vproc *vp, *n;
+	LIST_HEAD(slave_carelist);
+#else
 	struct vproc *vp;
+#endif
 	struct pvproc *pvp;
 	int i;
 
@@ -385,15 +390,19 @@
 	 * NOTE: We cannot call anything that acquires the vproc
 	 *	 list lock inside this loop or in any code invoked.
 	 */
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
-	LOCK_SHR_RW_LOCK(&vproc_list_lock);
+	for (i = 0; i < vprochsz; i++) {
+#ifdef VPROC_LIST_SPINLOCK
+		rcu_read_lock();
 #else
-	VPROC_LIST_LOCK();
+		VPROC_LIST_LOCK();
 #endif
-	for (i = 0; i < vprochsz; i++) {
 #ifdef VPROC_HASH_LIST
 #ifdef VPROC_RCU_LIST
 		list_for_each_entry_rcu(vp, &vproc_hash[i], vp_list) {
+#ifdef VPROC_LIST_SPINLOCK
+			if (!VPROC_HOLD_AND_CHECK(vp, "vproc_slave_carelist_create"))
+				continue;
+#endif
 #else
 		list_for_each_entry(vp, &vproc_hash[i], vp_list) {
 #endif
@@ -408,6 +417,14 @@
 			 */
 			if (VPROCNODE(vp->vp_pid) == 0)
 				continue;
+#ifdef VPROC_LIST_SPINLOCK
+			list_add(&vp->vp_carelist, &slave_carelist);
+		}
+		rcu_read_unlock();
+
+		list_for_each_entry_safe(vp, n, &slave_carelist, vp_carelist) {
+			list_del_init(&vp->vp_carelist);
+#endif
 
 			VPROC_LOCK_ND_LIST_EXCL(vp, "vproc_slave_carelist_create");
 			pvp = PVP(vp);
@@ -440,14 +457,14 @@
 			}
 
 			VPROC_UNLOCK_ND_LIST_EXCL(vp, "vproc_slave_carelist_create");
+#ifdef VPROC_LIST_SPINLOCK
+			VPROC_RELE(vp, "vproc_slave_carelist_create");
 		}
-	}
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
-	UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
 #else
-	VPROC_LIST_UNLOCK();
+		}
+		VPROC_LIST_UNLOCK();
 #endif
-
+	}
 }
 
 

Index: dvp_pvpsops.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_pvpsops.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- dvp_pvpsops.c	3 Feb 2009 06:18:13 -0000	1.16
+++ dvp_pvpsops.c	9 Feb 2009 05:00:36 -0000	1.17
@@ -962,15 +962,11 @@
 	 * is somewhat better to count from the back to see new
 	 * processes that have been added since the last iteration.
 	 */
-#ifndef VPROC_HASH_LIST
+#ifdef VPROC_RCU_LIST
+	rcu_read_lock();
+#else
 	 /* We still will tend to do worse than the base. */
 	VPROC_LIST_LOCK();
-#else
-#ifndef VPROC_RCU_LIST
-	LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
-	rcu_read_lock();
-#endif
 #endif
 	for (i = *hash_index; i < vprochsz; i++) {
 #ifdef VPROC_HASH_LIST
@@ -1005,12 +1001,8 @@
 		if (count >= *pids_size)
 			break;
 	}
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
-	UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
 	rcu_read_unlock();
-#endif
 #else
 	VPROC_LIST_UNLOCK();
 #endif
@@ -1674,12 +1666,8 @@
 	if (*pidlist == NULL)
 		*pidlist = kmalloc_nofail(pidlistsz);
 
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
-	LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
 	rcu_read_lock();
-#endif
 #else
 	VPROC_LIST_LOCK();
 #endif
@@ -1705,12 +1693,8 @@
 			count++;
 		}
 	}
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
-	UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifdef VPROC_RCU_LIST
 	rcu_read_unlock();
-#endif
 #else
 	VPROC_LIST_UNLOCK();
 #endif

Index: rproc_svr_vproc.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/rproc_svr_vproc.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- rproc_svr_vproc.c	3 Feb 2009 06:18:13 -0000	1.14
+++ rproc_svr_vproc.c	9 Feb 2009 05:00:36 -0000	1.15
@@ -109,11 +109,7 @@
 
 	/* put the vproc on the vproc hash chain */
 	VPROC_LOCK_EXCL(vc,"rfork_server(child)");
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
-	LOCK_EXCL_RW_LOCK(&vproc_list_lock);
-#else
 	VPROC_LIST_LOCK();
-#endif
 #ifdef VPROC_HASH_LIST
 #ifdef VPROC_RCU_LIST
 	list_add_rcu(&vc->vp_list, &vproc_hash[VPROCPIDHASH(vc->vp_pid)]);
@@ -129,11 +125,7 @@
 		v->vp_hashbwd = vc;
 #endif
 	VPROC_HOLD(vc, "rfork_server(active)");
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
-	UNLOCK_EXCL_RW_LOCK(&vproc_list_lock);
-#else
 	VPROC_LIST_UNLOCK();
-#endif
 	VPROC_HOLD(vc, "rfork_server(origin)");
 
 	/*

Index: vp_init.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/vp_init.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- vp_init.c	3 Feb 2009 06:18:13 -0000	1.7
+++ vp_init.c	9 Feb 2009 05:00:36 -0000	1.8
@@ -50,10 +50,8 @@
 int vprochsz = VPROC_NHASH;
 #endif
 
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
-RW_LOCK_T vproc_list_lock;	/* Lock for free list and hash table */
-#elif defined(VPROC_LIST_SPINLOCK)
-SPIN_LOCK_T vproc_list_lock;	/* Lock for free list and hash table */
+#ifdef VPROC_LIST_SPINLOCK
+DEFINE_SPINLOCK(vproc_list_lock);	/* Lock for free list and hash table */
 #else
 LOCK_T vproc_list_lock;		/* Lock for free list and hash table */
 #endif
@@ -100,17 +98,11 @@
 
 	for (i=0; i < vprochsz; i++)
 		INIT_LIST_HEAD(&vproc_hash[i]);
-
-#ifndef VPROC_RCU_LIST
-	INIT_RW_LOCK(&vproc_list_lock);
-#else
-	VPROC_LIST_LOCK_INIT();
-#endif
 #else
 	vproc_hash = kzmalloc_nofail(vprochsz * sizeof(struct vproc *));
+#endif
 
 	VPROC_LIST_LOCK_INIT();
-#endif
 #ifdef VPROC_KMEM_CACHE
 	vproc_cache_init();
 #endif

Index: procfs_subr.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/procfs_subr.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- procfs_subr.c	10 Oct 2008 08:10:32 -0000	1.12
+++ procfs_subr.c	9 Feb 2009 05:00:36 -0000	1.13
@@ -191,16 +191,12 @@
 	if (!loadlevel_on)
 		return;
 
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
-	LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
-	rcu_read_lock();
-#endif
+	for (i = 0; i < vprochsz; i++) {
+#ifdef VPROC_RCU_LIST
+		rcu_read_lock();
 #else
-	VPROC_LIST_LOCK();
+		VPROC_LIST_LOCK();
 #endif
-	for (i = 0; i < vprochsz; i++) {
 #ifdef VPROC_HASH_LIST
 #if 0
 #ifdef CONFUSED__SSI_RESET_LOADLEVEL_TGID
@@ -242,16 +238,12 @@
 #ifdef VPROC_HASH_LIST
 		}
 #endif
-	}
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
-	UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
-	rcu_read_unlock();
-#endif
+#ifdef VPROC_RCU_LIST
+		rcu_read_unlock();
 #else
-	VPROC_LIST_UNLOCK();
+		VPROC_LIST_UNLOCK();
 #endif
+	}
 }
 
 #endif

Index: dvp_debug.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_debug.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- dvp_debug.c	10 Oct 2008 08:10:32 -0000	1.11
+++ dvp_debug.c	9 Feb 2009 05:00:36 -0000	1.12
@@ -172,12 +172,9 @@
 again:
 #else
 again:
-#ifdef VPROC_RCU_LIST
 	/* SSI_XXX: Not yet implemented */
 	BUG();
 #endif
-	LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#endif
 	for (i=0; i < vprochsz; i++) {
 #ifdef VPROC_HASH_LIST
 		list_for_each_entry(vp, &vproc_hash[i], vp_list) {
@@ -245,9 +242,6 @@
 #endif
 				}
 			}
-#ifdef VPROC_HASH_LIST
-			UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#endif
 			VPROC_RELE(vp,"tnc_vpd");
 			goto again;
 		}
@@ -265,9 +259,7 @@
 			VPROC_UNLOCK_FLAG(vp, "tncvpd_scan");
 		}
 	}
-#ifdef VPROC_HASH_LIST
-	UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifndef VPROC_HASH_LIST
 	VPROC_LIST_UNLOCK();
 #endif
 }

Index: nsc_initproc.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/nsc_initproc.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- nsc_initproc.c	3 Feb 2009 06:18:13 -0000	1.21
+++ nsc_initproc.c	9 Feb 2009 05:00:36 -0000	1.22
@@ -195,21 +195,16 @@
 
 		/* put the vproc on the vproc hash chain */
 #ifdef VPROC_HASH_LIST
+		VPROC_LIST_LOCK();
 #ifndef VPROC_RCU_LIST
-		LOCK_EXCL_RW_LOCK(&vproc_list_lock);
 		list_add(&v->vp_list, &vproc_hash[VPROCPIDHASH(v->vp_pid)]);
 #else
-		VPROC_LIST_LOCK();
 		list_add_rcu(&v->vp_list, &vproc_hash[VPROCPIDHASH(v->vp_pid)]);
 #endif
 #ifdef VPROC_RELEASE__REFCNT_RACE_FIX
 		VPROC_HOLD(v, "initialize_init_vproc");
 #endif
-#ifndef VPROC_RCU_LIST
-		UNLOCK_EXCL_RW_LOCK(&vproc_list_lock);
-#else
 		VPROC_LIST_UNLOCK();
-#endif
 #else
 		w = vproc_hash[hashidx = VPROCPIDHASH(v->vp_pid)];
 		v->vp_hashbwd = NULL;

Index: dvp_vpops.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_vpops.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -d -r1.38 -r1.39
--- dvp_vpops.c	3 Feb 2009 06:18:13 -0000	1.38
+++ dvp_vpops.c	9 Feb 2009 05:00:36 -0000	1.39
@@ -360,11 +360,7 @@
 
 	/* put the vproc on the vproc hash chain */
 	vc->vp_pid = child_pid;
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
-	LOCK_EXCL_RW_LOCK(&vproc_list_lock);
-#else
 	VPROC_LIST_LOCK();
-#endif
 #ifdef VPROC_HASH_LIST
 #ifdef VPROC_RCU_LIST
 	list_add_rcu(&vc->vp_list, &vproc_hash[VPROCPIDHASH(child_pid)]);
@@ -380,11 +376,7 @@
 		w->vp_hashbwd = vc;
 #endif
 	VPROC_HOLD(vc, "vpop_fork(origin)");
-#if defined(VPROC_HASH_LIST) && !defined(VPROC_RCU_LIST)
-	UNLOCK_EXCL_RW_LOCK(&vproc_list_lock);
-#else
 	VPROC_LIST_UNLOCK();
-#endif
 	VPROC_HOLD(vc, "vpop_fork(active)");
 
 	VPROC_LOCK_FLAG(vc, "vpop_fork");

Index: dvp_init.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_init.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- dvp_init.c	10 Oct 2008 08:10:32 -0000	1.11
+++ dvp_init.c	9 Feb 2009 05:00:36 -0000	1.12
@@ -160,9 +160,7 @@
 
 #ifndef VPROC_RCU_LIST
 	if (!(flags & LVP_NOLOCK)) {
-#ifdef VPROC_HASH_LIST
-		LOCK_SHR_RW_LOCK(&vproc_list_lock);
-#else
+#ifndef VPROC_HASH_LIST
 		VPROC_LIST_LOCK();
 #endif
 	}
@@ -175,13 +173,6 @@
 	 * checking.
 	 */
 	if (vp == NULL){
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
-		if (!(flags & LVP_NOLOCK)) {
-			UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-		}
-#endif
-#endif
 		/*
 		 * If this is the origin node of the pid, we just return
 		 * 0 because the origin should always retain a vproc
@@ -214,15 +205,6 @@
 		 * Make sure here that during the last vproc_alloc()
 		 * call, nobody has created a new vproc for this pid.
 		 */
-#ifdef VPROC_HASH_LIST
-#ifndef VPROC_RCU_LIST
-		if (!(flags & LVP_NOLOCK)) {
-			LOCK_EXCL_RW_LOCK(&vproc_list_lock);
-			exlock = 1;
-		}
-#endif
-#endif
-
 		vp = VPROCPTR_NOLOCK(pid);
 		if (vp == NULL) {
 			vp = nvp;
@@ -262,17 +244,10 @@
 #ifndef VPROC_RELEASE__REFCNT_RACE_FIX
 	VPROC_HOLD(vp, str);
 #endif
-	if (!(flags & LVP_NOLOCK)) {
-#ifdef VPROC_HASH_LIST
-		if (!exlock) {
-			UNLOCK_SHR_RW_LOCK(&vproc_list_lock);
-		} else {
-			UNLOCK_EXCL_RW_LOCK(&vproc_list_lock);
-		}
-#else
+	if (!(flags & LVP_NOLOCK))
+#ifndef VPROC_HASH_LIST
 		VPROC_LIST_UNLOCK();
 #endif
-	}
 #endif /* !VPROC_RCU_LIST */
 #ifdef VPROC_DEBUG
 	vproc_db4(vp, "LOCATE HOLD", str, 0);


------------------------------------------------------------------------------
Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM)
software. With Adobe AIR, Ajax developers can use existing skills and code to
build responsive, highly engaging applications that combine the power of local
resources and data with the reach of the web. Download the Adobe AIR SDK and
Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.