[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