提交 8bdfd0b1 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

use dev+sector keys for buffer cache namespace

上级 608991f0
...@@ -44,7 +44,7 @@ binit(void) ...@@ -44,7 +44,7 @@ binit(void)
b->flags = 0; b->flags = 0;
initlock(&b->lock, "bcache-lock"); initlock(&b->lock, "bcache-lock");
initcondvar(&b->cv, "bcache-cv"); initcondvar(&b->cv, "bcache-cv");
if (ns_insert(bufns, KI(b->sector), b) < 0) if (ns_insert(bufns, KII(b->dev, b->sector), b) < 0)
panic("binit ns_insert"); panic("binit ns_insert");
} }
} }
...@@ -83,10 +83,10 @@ bget(uint dev, uint sector, int *writer) ...@@ -83,10 +83,10 @@ bget(uint dev, uint sector, int *writer)
// Try for cached block. // Try for cached block.
// XXX ignore dev // XXX ignore dev
rcu_begin_read(); rcu_begin_read();
b = ns_lookup(bufns, KI(sector)); b = ns_lookup(bufns, KII(dev, sector));
if (b) { if (b) {
if (b->dev != dev) if (b->dev != dev || b->sector != sector)
panic("dev mismatch"); panic("block mismatch");
if (*writer || !(b->flags & B_VALID)) { if (*writer || !(b->flags & B_VALID)) {
acquire(&b->lock); acquire(&b->lock);
if (b->flags & B_BUSY) { if (b->flags & B_BUSY) {
...@@ -113,7 +113,7 @@ bget(uint dev, uint sector, int *writer) ...@@ -113,7 +113,7 @@ bget(uint dev, uint sector, int *writer)
if (victim == 0) if (victim == 0)
panic("bget all busy"); panic("bget all busy");
victim->flags |= B_BUSY; victim->flags |= B_BUSY;
ns_remove(bufns, KI(victim->sector), victim); ns_remove(bufns, KII(victim->dev, victim->sector), victim);
release(&victim->lock); release(&victim->lock);
rcu_delayed(victim, kmfree); rcu_delayed(victim, kmfree);
...@@ -126,7 +126,7 @@ bget(uint dev, uint sector, int *writer) ...@@ -126,7 +126,7 @@ bget(uint dev, uint sector, int *writer)
initlock(&b->lock, b->lockname+3); initlock(&b->lock, b->lockname+3);
initcondvar(&b->cv, b->lockname); initcondvar(&b->cv, b->lockname);
rcu_begin_read(); rcu_begin_read();
if (ns_insert(bufns, KI(b->sector), b) < 0) { if (ns_insert(bufns, KII(b->dev, b->sector), b) < 0) {
rcu_delayed(b, kmfree); rcu_delayed(b, kmfree);
goto loop; goto loop;
} }
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论