rem: if (!err)
add: if (!err) { TRACE("parse_path() got vnode %Ld\n", bvn->vnid);
context: parse_path(vnode *bvn, char **pstart, char *path, int eatsymlink, vnode **vnp){    int             err;    int             iter;    char            *p, *np, *newpath, **fred;    vnode_id        vnid;    vnode           *vn;    if (!path) {        *vnp = bvn;        return 0;    }    iter = 0;    p = path;    vn = NULL;    while(TRUE) {    /*    exit if we're done    */        if (*p == '\0') {            err = 0;            break;        }    /*    isolate the next component    */        np = strchr(p+1, '/');        if (np) {            *np = '\0';            do                np++;            while (*np == '/');        } else            np = strchr(p+1, '\0');            /*    filter '..' if at the root of a namespace    */        if (!strcmp(p, "..") && is_root(bvn, &vn)) {            dec_vnode(bvn, FALSE);            bvn = vn;        }    /*    ask the file system to eat this component    */        newpath = NULL;        fred = &newpath;        if (!eatsymlink && (*np == '\0'))            fred = NULL;        err = (*bvn->ns->fs->ops.walk)(bvn->ns->data, bvn->data, p, fred,                &vnid);        p = np;        if (!err) {            if (newpath)                vn = bvn;            else {                LOCK(vnlock);                vn = lookup_vnode(bvn->ns->nsid, vnid);                UNLOCK(vnlock);                dec_vnode(bvn, FALSE);            }        } else {            dec_vnode(bvn, FALSE);            break;        }    /*    deal with symbolic links    */        if (newpath) {    /*    protection against cyclic graphs (with bad symbolic links).    */            iter++;            if (iter > MAX_SYM_LINKS) {                dec_vnode(vn, FALSE);                err = ELOOP;                break;            }            p = cat_paths(newpath, np);            if (!p) {                dec_vnode(vn, FALSE);                err = ENOMEM;                break;            }            free_path(*pstart);            *pstart = p;            if (*p == '/') {                do                    p++;                while (*p == '/');                dec_vnode(vn, FALSE);                bvn = rootvn;                inc_vnode(bvn);            } else                bvn = vn;            continue;        }    /*    reached a mounting point    */        if (is_mount_vnode(vn, &bvn)) {            dec_vnode(vn, FALSE);            continue;        }        bvn = vn;    }    if (!err)        *vnp = bvn;    return err;}