rem: err = ENOENT;
add: err = FS_ENOENT;
context: load_vnode(nspace_id nsid, vnode_id vnid, char r, vnode **vnp){    int             err;    vnode           *vn;    LOCK(vnlock);    while (TRUE) {        vn = lookup_vnode(nsid, vnid);        if (vn) {            if (vn->busy) {                UNLOCK(vnlock);                snooze(SLEEP_TIME);                LOCK(vnlock);                continue;            } else                break;		}        vn = steal_vnode(FREE_LIST);        if (!vn) {            vn = steal_vnode(USED_LIST);            if (!vn)                PANIC("OUT OF VNODE!!!\n");        } else            break;        flush_vnode(vn, r);        move_vnode(vn, FREE_LIST);    }    if (vn->ns == NULL) {        vn->ns = nsidtons(nsid);        if (!vn->ns) {            err = ENOENT;            goto error1;        }        vn->vnid = vnid;        vn->busy = TRUE;        err = sort_vnode(vn);        if (err)            goto error2;        move_vnode(vn, LOCKED_LIST);        UNLOCK(vnlock);        err = (*vn->ns->fs->ops.read_vnode)(vn->ns->data, vnid, r, &vn->data);        LOCK(vnlock);        vn->busy = FALSE;        if (err)            goto error2;        vn->rcnt = 1;    } else {        vn->rcnt++;        if (vn->rcnt == 1)            move_vnode(vn, LOCKED_LIST);    }    *vnp = vn;    UNLOCK(vnlock);    return 0;error2:    clear_vnode(vn);error1:    move_vnode(vn, FREE_LIST);    UNLOCK(vnlock);    return err;}