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.
阅读(1027) | 评论(0) | 转发(1) |