rem: err = ENOENT;
add: err = FS_ENOENT;
context: rootfs_walk(void *_ns, void *_base, const char *file, char **newpath,            vnode_id *vnid){    nspace      *ns;    vnode       *base;    int         err;    vnode       *vn;    char        *np;    ns = (nspace *) _ns;    base = (vnode *) _base;    LOCK(ns->lock);    /*    make sure base is a directory and that it has not been removed.    */    if (!MY_S_ISDIR(base->mode)) {        err = ENOTDIR;        goto exit;    }    if (base->removed) {        err = ENOENT;        goto exit;    }    /*    lookup the special directory '.'    */    if (!strcmp(file, ".")) {        err = get_vnode(ns->nsid, base->vnid, (void *)&vn);        if (!err)            *vnid = base->vnid;        goto exit;    }    /*    lookup the special directory '..'    */    if (!strcmp(file, "..")) {        err = get_vnode(ns->nsid, base->parent->vnid, (void *)&vn);        if (!err)            *vnid = vn->vnid;        goto exit;    }    /*    lookup the name in the directory            */    vn = base->head;    while (vn) {        if (!strcmp(vn->name, file))            break;        vn = vn->next;    }    /*    the name has not been found. advance the path pointer, update the vnid    and report an error.    */    if (!vn) {        err = ENOENT;        goto exit;    }    /*    we have found the item.    */    /*    it is a symbolic link that the kernel wants us to eat.    */    if (MY_S_ISLNK(vn->mode) && newpath) {        err = new_path(vn->symlink, &np);        if (err)            goto exit;                    *newpath = np;    } else {    /*    it is a directory or it is a symbolic link that the kernel does    not want to 'eat'.    */        err = get_vnode(ns->nsid, vn->vnid, (void *)&vn);        if (!err)            *vnid = vn->vnid;    }    exit:    UNLOCK(ns->lock);    return err;}