rem: err = EINVAL;
add: err = FS_EINVAL;
context: sys_unmount(bool kernel, int fd, const char *where){    int             err;    nspace          *ns;    fsystem         *fs;    vnode           *root, *vn, *mount;        err = get_file_fd(TRUE, fd, where, TRUE, &root);    if (err)        goto error1;    LOCK(vnlock);    ns = root->ns;    fs = ns->fs;    if (ns->root != root) {        err = EINVAL;        goto error2;    }    /*    don't allow to unmount the root file system    */    if (root == rootvn) {        err = EBUSY;        goto error2;    }    /*    decrement twice root: one for the mount, one for the get_file.    */    root->rcnt -= 2;    for(vn = ns->vnodes.head; vn; vn = vn->nspace.next)        if (vn->busy || (vn->rcnt != 0)) {            err = EBUSY;            goto error3;        }    mount = ns->mount;    mount->mounted = NULL;	remove_nspace(ns);    UNLOCK(vnlock);    (*fs->ops.unmount)(ns->data);    free(ns);    dec_file_system(fs);    dec_vnode(mount, FALSE);    return 0;error3:    root->rcnt++;error2:    UNLOCK(vnlock);error1:    return err;}