[SSI] openssi/kernel/cluster/ssi/ipc ipcmsg_svr.c,1.11,1.12

Roger Tsang <[email protected]> Sat, 03 Apr 2010 19:34:45 +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-serv29204/kernel/cluster/ssi/ipc

Modified Files:
      Tag: OPENSSI-FC
	ipcmsg_svr.c 
Log Message:
IPC Messages:
- Fix msg_get_svr_node() race with msg_set_svr_node() as not all code paths hold msg_ids.sem mutex. Use msg_nodehint_lock read/write spinlock.
- Consolidate redundant code into new function msg_find_svr_node().
- Remove redundant in ssi_msgsnd(). Most of the code is from sys_msgsnd().
- Fix sys_msgsnd()
  - Unhandled ssi_msgpack() error -ENOMEM.
  - Dereferencing freed "packedsegs" object.
  - Handle cli_ripc_msgsnd() error -EAGAIN.
- Remove redundant in ssi_msgrcv(). Most of the code is from sys_msgrcv().
- Fix sys_msgctl(MSG_INFO)
  - Might populate user buffer with bogus info on RPC error -EREMOTE.
  - Did not account for remote nodes when calculating max_id.
  - Deadlock with destination node when both nodes are doing RPC.
- Move remote code paths to new functions ssi_remote_msgctl(), ssi_msgctl_info(), ssi_remote_msgrcv(), ssi_remote_msgsnd().
- sys_msgctl() handle cli_ripc_msgctl() error -EAGAIN.
- sys_msgrcv() handle cli_ripc_msgrcv() error -EAGAIN.

 cluster/ssi/ipc/ipcmsg_svr.c |    8 
 include/linux/msg.h          |    3 
 ipc/msg.c                    |  762 +++++++++++++++--------------------
 ipc/msgutil.c                |   13 
 4 files changed, 356 insertions(+), 430 deletions(-)


Index: ipcmsg_svr.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/ipc/ipcmsg_svr.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- ipcmsg_svr.c	29 Mar 2010 06:16:59 -0000	1.11
+++ ipcmsg_svr.c	3 Apr 2010 19:34:43 -0000	1.12
@@ -43,8 +43,8 @@
 #include <cluster/gen/ics_ipc_protos_gen.h>
 
 extern int ssi_msg_get_check (ipc_obj_t *objp, long size);
-extern int ssi_msgsnd (int, struct msg_msg **, int);
-extern int ssi_msgrcv (int, size_t, long, int, char *, long *);
+extern int ssi_msgsnd (int, struct msg_msg **, size_t, int);
+extern int ssi_msgrcv (int, struct msgbuf *, size_t, long, int, char *, long *);
 extern long sys_msgctl(int, int, struct msqid_ds *);
 
 extern clusternode_t	name_server_node;
@@ -128,7 +128,7 @@
 	buf = (char *)kmalloc(*size, GFP_KERNEL);
 	if (buf == NULL)
 		return 0;
-	*rval = ssi_msgrcv(msqid, msgsz, msgtyp, msgflg, buf, rettyp);
+	*rval = ssi_msgrcv(msqid, NULL, msgsz, msgtyp, msgflg, buf, rettyp);
 #ifdef TEST_IPC
 	printk("returning from ssi_msgrcv");
 #endif
@@ -198,7 +198,7 @@
 		segsize -= len;
 		currptr += len;
 	}
-	*rval = ssi_msgsnd(msqid, &msgp, flags);
+	*rval = ssi_msgsnd(msqid, &msgp, msgp->m_ts, flags);
 	/* msgp will be NULL if message is queued. */
 	kfree(msgp);
 	return *rval;


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