Chinaunix首页 | 论坛 | 博客
  • 博客访问: 862554
  • 博文数量: 581
  • 博客积分: 7803
  • 博客等级: 少将
  • 技术积分: 3653
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-27 08:21
文章分类

全部博文(581)

文章存档

2013年(7)

2012年(414)

2011年(159)

2009年(1)

分类:

2012-02-18 15:02:59

原文地址:mfs 随机读写 作者:哈哈的雷

mfs 中open 不对权限做判断。

写入时做了什么样的处理?
1、一次打开到释放的过程中是受顺序保护的。
2、mfs 每次open 获取的也是从服务器获取的。
mfs 本身是否存在漏洞。

初始化的时候可能不知道文件是要做什么? 读或者写都是可用的,所以要改变文件爱你的模式。
如果之前是read 模式,说明read 要结束了。应该等到read 结束了在进行后面的操作。
    if (fileinfo->mode==IO_READ) {
        read_data_end(fileinfo->data);
    }
    if (fileinfo->mode==IO_READ || fileinfo->mode==IO_NONE) {
        fileinfo->mode = IO_WRITE;
        fileinfo->data = write_data_new(ino);
    }

创建新的write data node 。这个在本地缓存中可能是有的。
void* write_data_new(uint32_t inode) {
    inodedata* id;
    pthread_mutex_lock(&glock);
    id = write_get_inodedata(inode);
    id->lcnt++;
//    pthread_mutex_unlock(&(id->lock));
    pthread_mutex_unlock(&glock);
    return id;
}
创建之后是需要把他们放置到缓存表中的。
不同open 之间是否会因为这个产生联系。

针对 inode 进行了一系列的处理。
    status = id->status;
    if (status==0) {
        if (offset+size>id->maxfleng) {    // move fleng
            id->maxfleng = offset+size;
        }
        id->writewaiting++;
        while (id->flushwaiting>0) {
            pthread_cond_wait(&(id->writecond),&glock);
        }
        id->writewaiting--;
    }

文件分块操作。
    chindx = offset>>26;
    pos = (offset&0x3FFFFFF)>>16;
    from = offset&0xFFFF;
    while (size>0) {
        if (size>0x10000-from) {
            if (write_block(id,chindx,pos,from,0x10000,data)<0) {
                return EIO;
            }
            size -= (0x10000-from);
            data += (0x10000-from);
            from = 0;
            pos++;
            if (pos==1024) {
                pos = 0;
                chindx++;
            }
        } else {
            if (write_block(id,chindx,pos,from,from+size,data)<0) {
                return EIO;
            }
            size = 0;
        }
    }

mfs 数据是分成chunk 和block。有多个程序固定执行。
程序间如何交互,线程在处理中的运行。
写入数据时一个id 进行还是如何。
它的数据时每次写入都进行了写操作。
还是在整个数据写完后进行。

是如何分别写到不同的 node 服务器节点的。
0.

阅读(333) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~