[SSI] openssi/kernel/cluster/ssi/ipc ipcshm_svr.c,1.21,1.22

Roger Tsang <[email protected]> Sun, 07 Mar 2010 05:40:16 +0000
Newsgroups gmane.linux.cluster.ssic.cvs
Message-ID <[email protected]>
Update of /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/ipc
In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv27621/kernel/cluster/ssi/ipc

Modified Files:
      Tag: OPENSSI-FC
	ipcshm_svr.c 
Log Message:
IPC (#ifdef IPC_SHM_RACE_FIX):
- ipc_shm_nodedown() optimize away ipc_ids->sem lock; acquire lock only if we encounter unattached segments. Restore code to track ID of SHM segment with SHM_DEST_LOCK flag.
- Regression:
  - vfsmount struct leak in ipc_shm_nodedown().

 cluster/ssi/ipc/ipcshm_svr.c |    8 ++-
 ipc/shm.c                    |   86 ++++++++++-------------------------
 ipc/util.c                   |   14 +++++
 ipc/util.h                   |    5 ++
 4 files changed, 53 insertions(+), 60 deletions(-)


Index: ipcshm_svr.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/ipc/ipcshm_svr.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- ipcshm_svr.c	5 Mar 2010 06:30:21 -0000	1.21
+++ ipcshm_svr.c	7 Mar 2010 05:40:14 -0000	1.22
@@ -59,6 +59,7 @@
 #ifdef IPC_SHM_RACE_FIX
 extern void ipc_rcu_getref(void *ptr);
 extern void ipc_lock_by_ptr(struct kern_ipc_perm *);
+void ipc_set_lock_dest(struct ipc_ids *ids, int id);
 #endif
 extern int shm_get_segsize(struct shmid_kernel *);
 extern int shm_get_cpid(struct shmid_kernel *);
@@ -190,6 +191,9 @@
 	else {
 		shp->shm_flags |= SHM_LOCK_DEST;
 		ipc_drop_locks(shmid, (struct kern_ipc_perm *)shp, &shm_ids, 0);
+#ifdef IPC_SHM_RACE_FIX
+		ipc_set_lock_dest(&shm_ids, shmid);
+#endif
 		/* shm_ids.sem still held */
 	}
 		
@@ -457,6 +461,7 @@
 	BUG_ON(!size);
 	ssi_local_destroy(shp);
 #ifdef IPC_SHM_RACE_FIX
+	ipc_set_lock_dest(&shm_ids, -1);
 	/* Drop the lock acquired during ripc_shm_get_nattchs() */
 	if (ssi_isremote())
 		ipc_drop_locks(0, NULL, &shm_ids, 1);
@@ -496,7 +501,7 @@
 int
 ripc_drop_locks(clusternode_t node, int *rval, int id)
 {
-#ifdef IPC_SHM_LOCK_DEST_FIX
+#ifdef IPC_SHM_RACE_FIX
 	struct shmid_kernel *shp = shm_cli_lock(id);
 	if (!shp) {
 		ipc_drop_locks(0, NULL, &shm_ids, 1);
@@ -504,6 +509,7 @@
 		return 0;
 	}
 	shp->shm_flags &= ~SHM_LOCK_DEST;
+	ipc_set_lock_dest(&shm_ids, -1);
 #else /* IPC_SHM_LOCK_DEST_FIX */
 	struct shmid_kernel *shp = shm_cli_get(id);
 	if (shp)


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev