[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® 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