提交 7bbdbc6d 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

roughly works, except for readdir/ls

上级 643e2f31
......@@ -554,10 +554,6 @@ dir_init(struct inode *dp)
if (dp->type != T_DIR)
panic("dir_init not DIR");
ilock(dp, 1);
if (dp->dir)
return;
struct ns *dir = nsalloc(0);
for (uint off = 0; off < dp->size; off += BSIZE) {
struct buf *bp = bread(dp->dev, bmap(dp, off / BSIZE), 0);
......@@ -574,8 +570,10 @@ dir_init(struct inode *dp)
}
brelse(bp, 0);
}
dp->dir = dir;
iunlock(dp);
if (!__sync_bool_compare_and_swap(&dp->dir, 0, dir)) {
// free all the dirents
nsfree(dir);
}
}
// Look for a directory entry in a directory.
......@@ -660,8 +658,6 @@ namex(char *path, int nameiparent, char *name)
while((path = skipelem(path, name)) != 0){
next = 0;
if(nameiparent == 0)
next = nc_lookup(ip, name);
if(next == 0){
if(ip->type == 0)
panic("namex");
......@@ -680,7 +676,6 @@ namex(char *path, int nameiparent, char *name)
rcu_end_read();
return 0;
}
nc_insert(ip, name, next);
iput(ip);
}
ip = next;
......
......@@ -62,7 +62,7 @@ mainc(void)
ideinit(); // disk
if(!ismp)
timerinit(); // uniprocessor timer
nc_init();
//nc_init();
userinit(); // first user process
bootothers(); // start other processors
kvmalloc(); // new kernel page table wo. bottom mapped
......
......@@ -133,7 +133,7 @@ sys_link(void)
if(dp->dev != ip->dev || dirlink(dp, name, ip->inum) < 0)
goto bad;
nc_insert(dp, name, ip);
//nc_insert(dp, name, ip);
iput(ip);
return 0;
......@@ -213,7 +213,7 @@ sys_unlink(void)
iunlock(dp);
}
nc_invalidate(dp, name);
//nc_invalidate(dp, name);
iput(dp);
ip->nlink--;
......@@ -261,7 +261,7 @@ create(char *path, short type, short major, short minor)
if(dirlink(dp, name, ip->inum) < 0)
panic("create: dirlink");
nc_insert(dp, name, ip);
//nc_insert(dp, name, ip);
iput(dp);
return ip;
}
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论