亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? kernel.c

?? be文件系統實現的源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
        goto error1;    op = vn->ns->fs->ops.wstat;    if (!op) {        err = EINVAL;        goto error2;    }    err = (*op)(vn->ns->data, vn->data, st, mask);    if (err)        goto error2;    dec_vnode(vn, FALSE);    return 0;error2:    dec_vnode(vn, FALSE);error1:    return err;}/* * sys_mount */void *sys_mount(bool kernel, const char *filesystem, int fd, const char *where,        const char *device, ulong flags, void *parms, size_t len){    int                 err;    int                 i;    vnode_id            vnid;    vnode               *mount;    fsystem             *fs;    nspace              *ns, *ans;    void                *data;    struct stat         st;    struct my_stat      mst;    my_dev_t            dev;    my_ino_t            ino;        dev = -1;    ino = -1;    if (device) {        err = stat(device, &st);        if (err)            return NULL;        dev = st.st_dev;        ino = st.st_ino;    }    err = get_file_fd(TRUE, fd, where, TRUE, &mount);    if (err)        goto error1;    err = (*mount->ns->fs->ops.rstat)(mount->ns->data, mount->data, &mst);    if (err)        goto error2;    if (!MY_S_ISDIR(mst.mode)) {        err = ENOTDIR;        goto error2;    }    ns = (nspace *) malloc(sizeof(nspace));    if (!ns) {        err = ENOMEM;        goto error2;    }    fs = inc_file_system(filesystem);    if (!fs) {        err = ENODEV;        goto error3;    }    LOCK(vnlock);    if (device) {        for(ans=nshead; ans; ans=ans->next)            if ((ans->dev == dev) && (ans->ino == ino)) {                UNLOCK(vnlock);printf("KERNEL: trying to mount %s twice (already mounted as %s)\n", device, ans->fs->name);                err = ENODEV;                goto error4;            }    }    for(i=0; i<nns; i++, nxnsid++)        if (!nstab[nxnsid % nns]) {            nstab[nxnsid % nns] = ns;            ns->nsid = nxnsid;            nxnsid++;            break;        }    if (i == nns) {        UNLOCK(vnlock);        err = EMFILE;        goto error4;    }    nstab[ns->nsid % nns] = ns;    ns->fs = fs;    ns->vnodes.head = ns->vnodes.tail = NULL;    ns->data = NULL;    ns->root = NULL;    ns->mount = NULL;    ns->prev = NULL;    ns->next = nshead;    ns->shutdown = FALSE;    ns->dev = dev;    ns->ino = ino;    if (nshead)        nshead->prev = ns;    nshead = ns;    UNLOCK(vnlock);    err = (*fs->ops.mount)(ns->nsid, device, flags, parms, len, &data, &vnid);    if (err)        goto error5;            LOCK(vnlock);    ns->root = lookup_vnode(ns->nsid, vnid);    ns->data = data;        if ((mount == rootvn) || (mount->mounted)) {        err = EBUSY;        goto error6;    }    mount->mounted = ns;    ns->mount = mount;    UNLOCK(vnlock);    return data;error6:    dec_vnode(ns->root, FALSE);    (*fs->ops.unmount)(data);error5:    LOCK(vnlock);    nstab[ns->nsid % nns] = NULL;    if (ns->prev)        ns->prev->next = ns->next;    else        nshead = ns->next;    if (ns->next)        ns->next->prev = ns->prev;    UNLOCK(vnlock);error4:    dec_file_system(fs);error3:    free(ns);error2:    dec_vnode(mount, FALSE);error1:    errno = err;    return NULL;}/* * sys_unmount */intsys_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;    ns->shutdown = TRUE;    for(vn = ns->vnodes.head; vn; vn = vn->nspace.next)        vn->busy = TRUE;            while (ns->vnodes.head) {        vn = ns->vnodes.head;        UNLOCK(vnlock);        err = (*fs->ops.release_vnode)(vn->ns->data, vn->data, FALSE);        LOCK(vnlock);        if (err)            PANIC("ERROR WRITING VNODE!!!\n");        vn->busy = FALSE;        clear_vnode(vn);        move_vnode(vn, FREE_LIST);    }    if (ns->prev)        ns->prev->next = ns->next;    else        nshead = ns->next;    if (ns->next)        ns->next->prev = ns->prev;    nstab[ns->nsid % nns] = NULL;    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;}/* * get_dir and get_file: basic functions to parse a path and get the vnode * for either the parent directory or the file itself. */static intget_dir_fd(bool kernel, int fd, const char *path, char *filename, vnode **dvn){    int         err;    char        *p, *np;    err = new_path(path, &p);    if (err)        goto error1;    np = strrchr(p, '/');    if (!np) {        strcpy(filename, p);        strcpy(p, ".");    } else {        strcpy(filename, np+1);        np[1] = '.';        np[2] = '\0';    }    err = parse_path_fd(kernel, fd, &p, TRUE, dvn);    if (err)        goto error2;    free_path(p);    return 0;    error2:    free_path(p);error1:    return err;}static intget_file_fd(bool kernel, int fd, const char *path, int eatsymlink, vnode **vn){    int         err;    char        *p;    err = new_path(path, &p);    if (err)        goto error1;    err = parse_path_fd(kernel, fd, &p, eatsymlink, vn);    if (err)        goto error2;    free_path(p);    return 0;    error2:    free_path(p);error1:    return err;}static intget_file_vn(nspace_id nsid, vnode_id vnid, const char *path, int eatsymlink,        vnode **vn){    int         err;    char        *p;    err = new_path(path, &p);    if (err)        goto error1;    err = parse_path_vn(nsid, vnid, &p, eatsymlink, vn);    if (err)        goto error2;    free_path(p);    return 0;    error2:    free_path(p);error1:    return err;}static intparse_path_fd(bool kernel, int fd, char **pstart, int eatsymlink, vnode **vnp){    vnode           *bvn;    ofile           *f;    ioctx           *io;    char            *path;    path = *pstart;    if (path && (*path == '/')) {        do            path++;        while (*path == '/');        bvn = rootvn;        inc_vnode(bvn);    } else        if (fd >= 0) {            f = get_fd(kernel, fd, FD_ALL);            if (!f)                return EBADF;            bvn = f->vn;            inc_vnode(bvn);            put_fd(f);        } else {            io = get_cur_ioctx();            LOCK(io->lock);            bvn = io->cwd;            inc_vnode(bvn);            UNLOCK(io->lock);        }    return parse_path(bvn, pstart, path, eatsymlink, vnp);}static intparse_path_vn(nspace_id nsid, vnode_id vnid, char **pstart, int eatsymlink,    vnode **vnp){    int             err;    vnode           *bvn;    char            *path;    path = *pstart;    if (path && (*path == '/')) {        do            path++;        while (*path == '/');        bvn = rootvn;        inc_vnode(bvn);    } else {        err = load_vnode(nsid, vnid, FALSE, &bvn);        if (err)            return err;    }    return parse_path(bvn, pstart, path, eatsymlink, vnp);error1:    dec_vnode(bvn, FALSE);    return err;}static intparse_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;}/* * get_vnode */intget_vnode(nspace_id nsid, vnode_id vnid, void **data){    int         err;    vnode       *vn;    err = load_vnode(nsid, vnid, TRUE, &vn);    if (err)        return err;    *data = vn->data;    return 0;}/* * put_vnode */intput_vnode(nspace_id nsid, vnode_id vnid){    vnode           *vn;    LOCK(vnlock);    vn = lookup_vnode(nsid, vnid);    if (!vn) {        UNLOCK(vnlock);        return ENOENT;    }    UNLOCK(vnlock);    dec_vnode(vn, TRUE);    return 0;}/* * new_vnode */intnew_vnode(nspace_id nsid, vnode_id vnid, void *data){    int         err;    vnode       *vn;    LOCK(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;}/* * remove_vnode */intremove_vnode(nspace_id nsid, vnode_id vnid){    vnode       *vn;    LOCK(vnlock);    vn = lookup_vnode(nsid, vnid);    if (!vn || (vn->rcnt == 0)) {        UNLOCK(vnlock);        return ENOENT;    }    vn->remove = TRUE;    UNLOCK(vnlock);    return 0;}/* * unremove_vnode */intunremove_vnode(nspace_id nsid, vnode_id vnid){    vnode       *vn;    LOCK(vnlock);    vn = lookup_vnode(nsid, vnid);    if (!vn || (vn->rcnt == 0)) {        UNLOCK(vnlock);        return ENOENT;    }    vn->remove = FALSE;    UNLOCK(vnlock);    return 0;}/* * is_vnode_removed */intis_vnode_removed(nspace_id nsid, vnode_id vnid){    vnode       *vn;    int         res;    LOCK(vnlock);    vn = lookup_vnode(nsid, vnid);    if (!vn) {        UNLOCK(vnlock);        return ENOENT;    }    res = vn->remove;    UNLOCK(vnlock);    return res;}/* * miscelleanous vnode functions */static voidinc_vnode(vnode *vn){    LOCK(vnlock);    vn->rcnt++;    UNLOCK(vnlock);}static voiddec_vnode(vnode *vn, char r){    vnode       *ovn;    LOCK(vnlock);    vn->rcnt--;    if (vn->rcnt == 0)        if (vn->remove) {            vn->busy = TRUE;            move_vnode(vn, LOCKED_LIST);            UNLOCK(vnlock);            (*vn->ns->fs->ops.remove_vnode)(vn->ns->data, vn->data, r);            LOCK(vnlock);            clear_vnode(vn);            move_vnode(vn, FREE_LIST);        } else {            move_vnode(vn, USED_LIST);            if (lists[USED_LIST].num > usdvnnum) {                ovn = steal_vnode(USED_LIST);                flush_vnode(ovn, r);                move_vnode(ovn, FREE_LIST);            }        }    UNLOCK(vnlock);    return;}static voidclear_vnode(vnode *vn){    DeleteSL(skiplist, vn);    if (vn->nspace.prev)        vn->nspace.prev->nspace.next = vn->nspace.next;    else        vn->ns->vnodes.head = vn->nspace.next;    if (vn->nspace.next)        vn->nspace.next->nspace.prev = vn->nspace.prev;    else        vn->ns->vnodes.tail = vn->nspace.prev;    vn->nspace.next = vn->nspace.prev = NULL;    vn->vnid = invalid_vnid;    vn->ns = NULL;    vn->remove = FALSE;    vn->data = NULL;    vn->rcnt = 0;    vn->busy = FALSE;    vn->mounted = NULL;}static intsort_vnode(vnode *vn){    if (!InsertSL(skiplist, vn))        return ENOMEM;    vn->nspace.next = vn->ns->vnodes.head;    vn->nspace.prev = NULL;    if (vn->ns->vnodes.head)        vn->ns->vnodes.head->nspace.prev = vn;    else        vn->ns->vnodes.tail = vn;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产aⅴ一区二区| 91女人视频在线观看| 91精品国产手机| 日韩成人av影视| 日韩欧美一二区| 精彩视频一区二区| 国产亚洲欧美日韩俺去了| 风间由美中文字幕在线看视频国产欧美| 久久久三级国产网站| 丁香六月久久综合狠狠色| 成人欧美一区二区三区| 欧美中文字幕一区二区三区| 天堂影院一区二区| 精品嫩草影院久久| 成人免费毛片a| 亚洲精品国产品国语在线app| 欧美日韩一区国产| 久久 天天综合| 18欧美亚洲精品| 欧美一区二区播放| 国产老女人精品毛片久久| 国产精品丝袜一区| 欧美精品 国产精品| 国产主播一区二区三区| 亚洲男人的天堂在线观看| 7878成人国产在线观看| 国产成人精品一区二区三区四区| 一区二区视频免费在线观看| 欧美成人精品福利| 99久久久免费精品国产一区二区 | 日韩一级成人av| 国产黑丝在线一区二区三区| 亚洲精品视频免费看| 日韩一区二区免费在线电影| eeuss鲁片一区二区三区 | 欧美视频精品在线| 国内精品国产成人国产三级粉色| 中文字幕人成不卡一区| 日韩欧美一区二区不卡| 99精品国产热久久91蜜凸| 蜜臀av一区二区在线免费观看| 中文字幕一区二区三区av| 91精品在线观看入口| 99久久久国产精品免费蜜臀| 久久国产精品无码网站| 亚洲五码中文字幕| 中文字幕免费一区| 欧美xxxxxxxx| 欧美色综合网站| voyeur盗摄精品| 国产精品综合二区| 日韩成人av影视| 亚洲午夜精品一区二区三区他趣| 国产人妖乱国产精品人妖| 51久久夜色精品国产麻豆| 一本色道久久综合亚洲精品按摩| 国产精品1024| 看片的网站亚洲| 日韩成人免费在线| 亚洲va欧美va人人爽| 亚洲欧美日韩系列| 国产精品拍天天在线| 久久午夜国产精品| 欧美xxxxx裸体时装秀| 51精品视频一区二区三区| 91豆麻精品91久久久久久| 91香蕉视频污在线| 成人国产亚洲欧美成人综合网| 国产精品一区在线观看你懂的| 日本aⅴ亚洲精品中文乱码| 亚洲成a人片综合在线| 一区二区三区资源| 亚洲在线中文字幕| 亚洲一区二区综合| 亚洲福利一区二区三区| 亚洲成人综合网站| 亚洲成人精品影院| 日韩精品每日更新| 琪琪一区二区三区| 午夜精品福利一区二区蜜股av| 亚洲国产美女搞黄色| 亚洲午夜久久久久| 日本在线不卡视频一二三区| 五月婷婷综合在线| 免费在线观看精品| 精品一区二区三区影院在线午夜| 精品一区二区三区香蕉蜜桃| 国产在线播放一区三区四| 国产精品2024| 91丨porny丨户外露出| 色菇凉天天综合网| 欧美卡1卡2卡| 欧美α欧美αv大片| 久久五月婷婷丁香社区| 国产精品美女一区二区三区| 亚洲视频一区二区在线| 亚洲成人黄色影院| 久草这里只有精品视频| 国产东北露脸精品视频| 99在线视频精品| 欧美日韩国产影片| 久久一留热品黄| 国产精品久久影院| 亚洲va天堂va国产va久| 精品亚洲成av人在线观看| www.欧美亚洲| 欧美精品久久天天躁| 久久综合九色欧美综合狠狠| 中文字幕日韩精品一区| 午夜一区二区三区视频| 国产在线精品一区二区不卡了 | 中文字幕精品一区二区精品绿巨人 | 精品在线观看免费| 成人av在线网站| 欧美日韩国产三级| 久久久午夜电影| 亚洲国产成人tv| 国产精品综合在线视频| 在线免费av一区| 久久婷婷综合激情| 亚洲一区二区黄色| 国产大陆a不卡| 欧美日韩中文另类| 国产日韩精品一区二区三区| 亚洲综合一区二区| 国产999精品久久久久久| 欧美三级视频在线播放| 国产三级一区二区三区| 婷婷国产在线综合| 92精品国产成人观看免费| 欧美一区二区精品在线| 亚洲欧美日韩综合aⅴ视频| 紧缚捆绑精品一区二区| 欧美日韩一区小说| 天堂蜜桃91精品| bt欧美亚洲午夜电影天堂| 欧美videos大乳护士334| 一区二区三区高清| 不卡影院免费观看| 久久中文娱乐网| 免费在线欧美视频| 欧日韩精品视频| 最好看的中文字幕久久| 国产精品1区2区| 欧美不卡一区二区三区四区| 亚洲一区视频在线| 色哟哟亚洲精品| 国产精品电影院| 丰满少妇久久久久久久| 欧美videossexotv100| 日韩av网站在线观看| 欧美又粗又大又爽| 亚洲色图色小说| 99久久亚洲一区二区三区青草| 国产亚洲人成网站| 国产伦精品一区二区三区在线观看| 欧美一区二区观看视频| 天天综合色天天| 欧美日韩成人综合天天影院| 一区二区三区四区不卡在线| 99久久精品国产毛片| 国产精品每日更新在线播放网址| 国产乱码字幕精品高清av | 日韩av一级片| 欧美二区乱c少妇| 成人h动漫精品一区二| 国产偷v国产偷v亚洲高清| 韩日精品视频一区| 久久婷婷久久一区二区三区| 狠狠狠色丁香婷婷综合久久五月| 日韩欧美一级二级三级| 久久精品99久久久| 欧美精品一区二区蜜臀亚洲| 激情小说亚洲一区| 国产亚洲欧美一级| 高清久久久久久| 一区在线播放视频| 色综合视频在线观看| 一区二区三区波多野结衣在线观看| 国产亚洲欧洲997久久综合| 国产老肥熟一区二区三区| 国产欧美日韩久久| 色偷偷久久一区二区三区| 亚洲黄色性网站| 欧美精品三级日韩久久| 日本伊人色综合网| 久久久久久99精品| 成人精品一区二区三区中文字幕| 国产精品第13页| 色老头久久综合| 日韩精品亚洲一区二区三区免费| 日韩视频一区在线观看| 国产九色sp调教91| 亚洲嫩草精品久久| 欧美一区欧美二区| 国产成人精品www牛牛影视| 中文字幕一区二| 7777精品伊人久久久大香线蕉完整版 | 欧美视频一区二区在线观看| 日本vs亚洲vs韩国一区三区|