[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