Make pin/unpin explicit

This commit is contained in:
Frans Kaashoek 2019-07-30 08:54:43 -04:00
parent f1bb53c690
commit f37a3e3964
3 changed files with 20 additions and 2 deletions

View file

@ -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);
}

View file

@ -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);

View file

@ -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);