int verpop_str() { vertex_id v_id; int popcount = 0; FOR_ALL_VERTICES(v_id) { int valence = get_vertex_evalence(v_id); if ( valence == 0 ) popcount += dissolve_vertex(v_id); else if ( valence > 3 ) popcount += poponest(v_id,valence); else if ( (valence >= 2) && (get_vattr(v_id) & (CONSTRAINT|BOUNDARY)) ) popcount += poponest(v_id,valence); } if ( popcount ) { calc_content(Q_FIXED); calc_pressure(); calc_energy(); } return popcount; }
/* * NAME: jfs_lookup(dvp, vpp, pname, flag, vattrp, crp) * * FUNCTION: resolve <pname> in directory <dvp> to vnode <vpp> * with a reference acquired and attribute <vattrp>. * * PARAMETERS: dvp _ directory vnode * vpp - object vnode (out) * pname - object name * flag - * vattrp - object attribute (out) * crp - credential * * RETURN: errors from subroutines. */ jfs_lookup( struct vnode *dvp, struct vnode **vpp, UniChar *pname, /* NULL terminated */ int32 flag, struct vattr *vattrp, struct ucred *crp) { int32 rc = 0; struct vfs *vfsp = dvp->v_vfsp; inode_t *dip = VP2IP(dvp); /* parent directory inode */ ino_t ino; /* object i_number */ inode_t *ip; /* object inode */ component_t dname; /* object name */ ncookie_t ncookie; btstack_t btstack; NOISE(1,("jfs_lookup: dip:0x%08x name:%s\n", dip, pname)); *vpp = NULL; /* <dvp> must be a directory */ if ((dip->i_mode & IFMT) != IFDIR) return ENOTDIR; IREAD_LOCK(dip); if (dip->i_nlink == 0) { rc = ENOENT; goto out; } /* * resolve name to i_number via dnlc/directory lookup */ getInumber: /* * for "." or "..", lookup directory inode */ if (pname[0] == '.') { /* looking up ".." */ if (pname[1] == '.' && pname[2] == '\0') { ino = dip->i_parent; goto getInode; } /* looking up "." */ else if (pname[1] == '\0') { ip = dip; jfs_hold(dvp); *vpp = dvp; goto getAttribute; } } /* * search dnlc/directory */ dname.name = pname; dname.namlen = UniStrlen(pname); if ((ino = ncLookup(dip->i_ipimap, dip->i_number, &dname, &ncookie)) == 0) { /* * dnlc miss: search directory */ if (rc = dtSearch(dip, &dname, &ino, &btstack, JFS_LOOKUP)) goto out; /* insert name entry to dnlc */ ncEnter(dip->i_ipimap, dip->i_number, &dname, ino, &ncookie); } /* * resolve i_number to inode/vnode with a reference */ getInode: ICACHE_LOCK(); rc = iget(vfsp, ino, &ip, 0); ICACHE_UNLOCK(); if (rc) goto out; *vpp = IP2VP(ip); /* * get attribute */ getAttribute: if (vattrp != NULL) get_vattr(ip, vattrp); out: IREAD_UNLOCK(dip); NOISE(1,("jfs_lookup: rc:%d\n", rc)); return rc; }