rem: snooze(500); if (retries-- >= 0)
add: UNLOCK(vnlock); snooze(5000); LOCK(vnlock);
context: new_vnode(nspace_id nsid, vnode_id vnid, void *data){    int retries = 20;    vnode *vn;    int err;	LOCK(vnlock);restart:	if ((vn = lookup_vnode(nsid, vnid)) != NULL) {		// oh, we requested a new vnode although there already		// exist one - compare the private node data and bail		// out if needed.		if (vn->busy) {			printf("new_vnode(): vnode exists and is busy!\n");			snooze(500);			if (retries-- >= 0)				goto restart;			printf("new_vnode(): still busy, but continue to our doom!\n");		}		if (vn->data != data)			PANIC("new_vnode(): vnode already exists with different data (vnode id = %Ld)!\n", vnid);		else {			printf("new_vnode(): vnode already exists with the same data (vnode id = %Ld)\n", vnid);			vn->rcnt++;			return;        	UNLOCK(vnlock);		}	}	vn = steal_vnode(FREE_LIST);    if (!vn) {        vn = steal_vnode(USED_LIST);        if (!vn) {            PANIC("OUT OF VNODE!!!\n");            UNLOCK(vnlock);            return ENOMEM;        }        flush_vnode(vn, TRUE);    }    vn->ns = nsidtons(nsid);    if (!vn->ns) {        UNLOCK(vnlock);        return ENOENT;    }    vn->vnid = vnid;    vn->data = data;    vn->rcnt = 1;    err = sort_vnode(vn);    UNLOCK(vnlock);    return err;}