[SSI] openssi/kernel/cluster/ssi/util load_level.c,1.30,1.31

Roger Tsang <[email protected]> Mon, 25 Oct 2010 06:00:59 +0000
Newsgroups gmane.linux.cluster.ssic.cvs
Message-ID <[email protected]>
Update of /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/util
In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv13817/cluster/ssi/util

Modified Files:
      Tag: OPENSSI-FC
	load_level.c 
Log Message:
- Fix BUG at rexecve_server_setup(). This can happen if the process was just migrated and is doing rexecve() for this node. Solution is set PV_MIGRATED pvp_flag so that vproc_giveback() knows delayed dealloc applies and wait for final put_task_struct to touch vp_relse before re-using vproc struct. (#ifdef TASK_HOLD_VPROC)
- Remove unnecessary use of write lock on tasklist_lock in migrate_server_setup() and rexecve_server_setup().

 cluster/ssi/util/load_level.c          |   26 +++++++++++------------
 cluster/ssi/vproc/rproc_cli_vproc.c    |   20 +++++++----------
 cluster/ssi/vproc/rproc_server.c       |   28 +++++++++++++++++++++++++
 cluster/ssi/vproc/rproc_server_pproc.c |    7 ------
 cluster/ssi/vproc/rproc_svr_vproc.c    |    6 -----
 cluster/ssi/vproc/vp_subr.c            |    2 -
 include/linux/dpvproc.h                |    3 ++
 include/linux/vproc.h                  |    2 -
 8 files changed, 55 insertions(+), 39 deletions(-)


Index: load_level.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/util/load_level.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- load_level.c	25 Oct 2010 05:50:41 -0000	1.30
+++ load_level.c	25 Oct 2010 06:00:57 -0000	1.31
@@ -746,27 +746,27 @@
 	    !VPROC_HOLD_AND_CHECK(vp, "is_loadlevelable"))
 		return 0;
 
+	ret = 0;
 	pvp = PVP(vp);
-	if (pvp->pvp_pin || pvp->pvp_localview == 1) {
-		ret = 0;
+	if (!PV_IS_ALIVE(pvp))
+		goto out;
+
+	if (pvp->pvp_pin || pvp->pvp_localview == 1)
 		goto out;
-	}
 
 	if (pvp->pvp_loadlevel == 1) {
 		ret = 1;
 		goto out;
 	}
 
-	if (!fname) {
-		/* Cannot sleep while in choose() / mchoose() */
-		ret = 0;
+	/* Cannot sleep while in choose() / mchoose() */
+	if (!fname)
 		goto out;
-	} else {
-		/* reset so that it can be resolved since process is
-		 * about to exec
-		 */
-		pvp->pvp_loadlevel = -1;
-	}
+
+	/* reset so that it can be resolved since process is
+	 * about to exec
+	 */
+	pvp->pvp_loadlevel = -1;
 
 	ret = vproc_is_loadlevelable(vp, fname);
 out:
@@ -784,7 +784,7 @@
  *	dcache_lock, d_lock
  *	sb_lock, s_umount [sem]
  */
-/* Called with VPROC LOCK or vproc movement or READ tasklist_lock */
+/* Called with VPROC LOCK or VPROC movement held */
 int
 vproc_is_loadlevelable(struct vproc *vp, char *fname)
 {


------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in  U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store 
http://p.sf.net/sfu/nokia-dev2dev