提交 6ac05a42 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

avoid some more unnecessary sharing

上级 102ee83e
...@@ -127,12 +127,4 @@ void ...@@ -127,12 +127,4 @@ void
initbio(void) initbio(void)
{ {
bufns = new xns<pair<u32, u64>, buf*, bio_hash>(false); bufns = new xns<pair<u32, u64>, buf*, bio_hash>(false);
for (u64 i = 0; i < NBUF; i++) {
struct buf *b = new buf(0xdeadbeef, -i);
/* dummy to pre-allocate NBUF spaces for evict */
b->flags = 0;
if (bufns->insert(mkpair(b->dev, b->sector), b) < 0)
panic("binit ns_insert");
}
} }
...@@ -443,13 +443,23 @@ bmap(struct inode *ip, u32 bn) ...@@ -443,13 +443,23 @@ bmap(struct inode *ip, u32 bn)
// Load indirect block, allocating if necessary. // Load indirect block, allocating if necessary.
if((addr = ip->addrs[NDIRECT]) == 0) if((addr = ip->addrs[NDIRECT]) == 0)
ip->addrs[NDIRECT] = addr = balloc(ip->dev); ip->addrs[NDIRECT] = addr = balloc(ip->dev);
bp = bread(ip->dev, addr, 1);
int writerflag = 0;
bp = bread(ip->dev, addr, writerflag);
a = (u32*)bp->data; a = (u32*)bp->data;
if((addr = a[bn]) == 0){ if((addr = a[bn]) == 0){
brelse(bp, writerflag);
writerflag = 1;
bp = bread(ip->dev, addr, writerflag);
a = (u32*)bp->data;
addr = a[bn];
if (addr == 0) {
a[bn] = addr = balloc(ip->dev); a[bn] = addr = balloc(ip->dev);
bwrite(bp); bwrite(bp);
} }
brelse(bp, 1); }
brelse(bp, writerflag);
return addr; return addr;
} }
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论