[SSI] openssi/kernel/cluster/ssi/vproc dvp_init.c, 1.14, 1.15 vp_subr.c, 1.18, 1.19

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-serv20067/cluster/ssi/vproc

Modified Files:
      Tag: OPENSSI-FC
	dvp_init.c vp_subr.c 
Log Message:
CFS:
- Move redundant struct svrcfstok initialization to kmem cache constructor. (#ifdef SVRCFS_TOKEN_KMEM_CACHE)

SSI:
- Regression:
  - real_lookup() possibly returning unreferenced dentry instead of -ENOENT. (#ifndef REAL_LOOKUP_SSI_1_9_3_FIXED_PLS_VERIFY)

VPROC:
- Move redundant struct vproc initialization to kmem cache constructor. (#ifdef VPROC_KMEM_CACHE)

 cluster/ssi/cfs/cfsproc.c        |   28 ++++-----------
 cluster/ssi/cfs/inode.c          |   14 +++----
 cluster/ssi/cfs/svrcfs.c         |   59 +++++++++++++++++++++-----------
 cluster/ssi/vproc/dvp_init.c     |   59 ++++++++++++++++++++++++++++++--
 cluster/ssi/vproc/vp_subr.c      |   71 ++++++++++++++++++++++++++-------------
 fs/namei.c                       |    6 +++
 include/cluster/ssi/cfs/cfstok.h |   25 ++++++-------
 7 files changed, 177 insertions(+), 85 deletions(-)


Index: vp_subr.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/vp_subr.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- vp_subr.c	9 Feb 2009 06:06:34 -0000	1.18
+++ vp_subr.c	22 Feb 2009 04:15:37 -0000	1.19
@@ -104,6 +104,31 @@
 #ifdef VPROC_KMEM_CACHE
 static kmem_cache_t *vproc_cachep;
 
+static void
+vproc_ctor(void * foo, kmem_cache_t * cachep, unsigned long flags)
+{
+	struct vproc *v = (struct vproc *) foo;
+
+	if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
+	    SLAB_CTOR_CONSTRUCTOR) {
+		v->vp_data = ((char *)v) + sizeof(struct vproc);
+#ifdef VPROC_RCU_LIST
+		INIT_RCU_HEAD(&v->vp_rcu);
+#endif
+		VPROC_REFCNT_LOCK_INIT(v);
+
+		VPROC_LOCK_INIT(v);
+		VPROC_LOCK_ND_LIST_INIT(v);
+		VPROC_LOCK_PGRP_LIST_INIT(v);
+		VPROC_LOCK_SESSION_LIST_INIT(v);
+		VPROC_LOCK_FLAG_INIT(v);
+		VPROC_HOLD_MOVEMENT_INIT(v);
+#ifdef LINUX_SSI_EVENT
+		VPROC_WAIT_EVENT_INIT(v);
+#endif
+	}
+}
+
 void
 vproc_cache_init(void)
 {
@@ -112,7 +137,7 @@
 	vproc_cachep = kmem_cache_create("vproc_cache",
 				size, 0,
 				SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|SLAB_PANIC,
-				NULL, NULL);
+				vproc_ctor, NULL);
 }
 #endif /* VPROC_KMEM_CACHE */
 
@@ -132,12 +157,32 @@
 	 */
 #ifdef VPROC_KMEM_CACHE
 	v = kmem_cache_alloc(vproc_cachep, GFP_KERNEL|__GFP_NOFAIL);
-	memset(v, 0, kmem_cache_size(vproc_cachep));
+#ifndef VPROC_HASH_LIST
+#error not supported
+#endif
+	v->vp_pid = 0;
+#ifdef VPROC_DEBUG
+	v->vp_index = 0;
+	v->vp_next = NULL;
+#endif
 #else
 	v = kzmalloc_nofail(size);
-#endif
 	v->vp_data = ((char *)v) + sizeof(struct vproc);
 	VPROC_REFCNT_LOCK_INIT(v);
+#endif /* !VPROC_KMEM_CACHE */
+
+#ifndef ATOMIC_VPROC_REFCNT
+	v->vp_ref_cnt = 0;
+#else
+	INIT_ATOMIC_INT(&v->vp_ref_cnt, 0);
+#endif
+#ifdef VPROC_HASH_LIST
+	INIT_LIST_HEAD(&v->vp_list);
+#endif
+#ifdef VPROC_LIST_SPINLOCK
+	INIT_LIST_HEAD(&v->vp_carelist);
+#endif
+	v->vp_magic = VP_MAGIC;
 
 #ifdef VPROC_DEBUG
 	nvproc++;
@@ -153,24 +198,6 @@
 
 	v = vproc_new();
 	dpvproc_struct_init(v);
-#ifndef ATOMIC_VPROC_REFCNT
-	v->vp_ref_cnt = 0;
-#else
-	INIT_ATOMIC_INT(&v->vp_ref_cnt, 0);
-#endif
-#ifdef VPROC_HASH_LIST
-	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
-	v->vp_magic = VP_MAGIC;
 
 	return(v);
 }
@@ -188,10 +215,10 @@
 #endif
 	vp->vp_magic = 0;
 	dpvproc_struct_deinit(vp);
-	VPROC_REFCNT_LOCK_DEINIT(vp);
 #ifdef VPROC_KMEM_CACHE
 	kmem_cache_free(vproc_cachep, vp);
 #else
+	VPROC_REFCNT_LOCK_DEINIT(vp);
 	kfree(vp);
 #endif
 #ifdef VPROC_DEBUG

Index: dvp_init.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/vproc/dvp_init.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- dvp_init.c	12 Feb 2009 03:13:13 -0000	1.14
+++ dvp_init.c	22 Feb 2009 04:15:37 -0000	1.15
@@ -288,9 +288,45 @@
 {
 	struct pvproc	*pvp = PVP(v);
 
-#ifdef VPROC_HOLD_ZERO_GET_TASK
-	SSI_ASSERT(pvp->pvp_pproc == NULL);
+#ifdef VPROC_KMEM_CACHE
+	pvp->pvp_flag = 0;
+	pvp->pvp_wstate = 0;
+	pvp->pvp_pproc = NULL;
+#ifndef VPROC_PVP_CHILD_LL
+	pvp->pvp_head_childl = NULL;
+	pvp->pvp_childl = NULL;
 #endif
+	pvp->pvp_head_pgrpl = NULL;
+	pvp->pvp_pgrpl = NULL;
+	pvp->pvp_sessionl = NULL;
+	pvp->pvp_head_oclist = NULL;
+	pvp->pvp_oclist = NULL;
+	pvp->pvp_ppid = 0;
+	pvp->pvp_oppid = 0;
+	pvp->pvp_sid = 0;
+	pvp->pvp_pgid = 0;
+	pvp->pvp_pp_sid = 0;
+	pvp->pvp_pp_pgid = 0;
+	pvp->pvp_jobc = 0;
+	pvp->pvp_pgrp_ldr_seqno = 0;
+	pvp->pvp_pgrp_mem_seqno = 0;
+	memset(&pvp->pvp_fork_sigset, 0, sizeof(sigset_t));
+	pvp->pvp_fork_sigmigarg = 0;
+	pvp->pvp_loadlevel = 0;
+	pvp->pvp_pin = 0;
+	pvp->pvp_localview = 0;
+	pvp->pvp_comm_de = NULL;
+	pvp->pvp_comm_mnt = NULL;
+#ifdef VPROC_DEBUG
+#ifdef NOTDEF
+/* JAG - Temporary HACK */
+	memset(pvp->pvp_comm, 0, PSCOMSIZ);
+#else
+	memset(pvp->pvp_comm, 0, 16);
+#endif
+#endif
+#endif /* VPROC_KMEM_CACHE */
+
 #ifdef VPROC_PVP_CHILD_LL
 	INIT_LIST_HEAD(&pvp->pvp_children);
 	INIT_LIST_HEAD(&pvp->pvp_sibling);
@@ -306,6 +342,7 @@
 	 *	 sleep, so dpvproc_struct_init() should not be called
 	 *	 with spin locks held.
 	 */
+#ifndef VPROC_KMEM_CACHE
 	VPROC_LOCK_INIT(v);
 	VPROC_LOCK_ND_LIST_INIT(v);
 	VPROC_LOCK_PGRP_LIST_INIT(v);
@@ -313,6 +350,21 @@
 	VPROC_LOCK_FLAG_INIT(v);
 	VPROC_HOLD_MOVEMENT_INIT(v);
 	VPROC_WAIT_EVENT_INIT(v);
+#else
+	/* SSI_XXX: Create macros for these... */
+	pvp->pvp_movement_lock.ml_flag = 0;
+	pvp->pvp_movement_lock.ml_shr_count = 0;
+	pvp->pvp_movement_lock.ml_excl_count = 0;
+#ifdef LINUX_SSI_EVENT
+	INIT_COMPLETION(pvp->pvp_wait_event.evi_event.ev_com);
+#else
+	VPROC_WAIT_EVENT_INIT(v);
+#endif
+#endif /* VPROC_KMEM_CACHE */
+
+#ifdef NSCVPD_DEBUG
+	pvp->pvp_lasthold = TICKS();
+#endif
 }
 
 
@@ -333,6 +385,7 @@
 	SSI_ASSERT(pvp->pvp_pgrpl == NULL);
 	SSI_ASSERT(pvp->pvp_sessionl == NULL);
 
+#ifndef VPROC_KMEM_CACHE
 	VPROC_LOCK_DEINIT(v);
 	VPROC_LOCK_ND_LIST_DEINIT(v);
 	VPROC_LOCK_PGRP_LIST_DEINIT(v);
@@ -340,5 +393,5 @@
 	VPROC_LOCK_FLAG_DEINIT(v);
 	VPROC_HOLD_MOVEMENT_DEINIT(v);
 	VPROC_WAIT_EVENT_DEINIT(v);
-
+#endif
 }


------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
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.