Make pin/unpin explicit
This commit is contained in:
parent
f1bb53c690
commit
f37a3e3964
16
kernel/bio.c
16
kernel/bio.c
|
@ -133,3 +133,19 @@ brelse(struct buf *b)
|
||||||
|
|
||||||
release(&bcache.lock);
|
release(&bcache.lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
bpin(struct buf *b) {
|
||||||
|
acquire(&bcache.lock);
|
||||||
|
b->refcnt++;
|
||||||
|
release(&bcache.lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
bunpin(struct buf *b) {
|
||||||
|
acquire(&bcache.lock);
|
||||||
|
b->refcnt--;
|
||||||
|
release(&bcache.lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,8 @@ void binit(void);
|
||||||
struct buf* bread(uint, uint);
|
struct buf* bread(uint, uint);
|
||||||
void brelse(struct buf*);
|
void brelse(struct buf*);
|
||||||
void bwrite(struct buf*);
|
void bwrite(struct buf*);
|
||||||
|
void bpin(struct buf*);
|
||||||
|
void bunpin(struct buf*);
|
||||||
|
|
||||||
// console.c
|
// console.c
|
||||||
void consoleinit(void);
|
void consoleinit(void);
|
||||||
|
|
|
@ -77,7 +77,7 @@ install_trans(void)
|
||||||
struct buf *dbuf = bread(log.dev, log.lh.block[tail]); // read dst
|
struct buf *dbuf = bread(log.dev, log.lh.block[tail]); // read dst
|
||||||
memmove(dbuf->data, lbuf->data, BSIZE); // copy block to dst
|
memmove(dbuf->data, lbuf->data, BSIZE); // copy block to dst
|
||||||
bwrite(dbuf); // write dst to disk
|
bwrite(dbuf); // write dst to disk
|
||||||
dbuf->refcnt--; // unpin buffer from cache
|
bunpin(dbuf);
|
||||||
brelse(lbuf);
|
brelse(lbuf);
|
||||||
brelse(dbuf);
|
brelse(dbuf);
|
||||||
}
|
}
|
||||||
|
@ -229,7 +229,7 @@ log_write(struct buf *b)
|
||||||
}
|
}
|
||||||
log.lh.block[i] = b->blockno;
|
log.lh.block[i] = b->blockno;
|
||||||
if (i == log.lh.n) { // Add new block to log?
|
if (i == log.lh.n) { // Add new block to log?
|
||||||
b->refcnt++; // Pin block in cache
|
bpin(b);
|
||||||
log.lh.n++;
|
log.lh.n++;
|
||||||
}
|
}
|
||||||
release(&log.lock);
|
release(&log.lock);
|
||||||
|
|
Loading…
Reference in a new issue