don't let dirty blocks be evicted from cache!
This commit is contained in:
parent
38eee5bca7
commit
12abb1a561
4 changed files with 15 additions and 4 deletions
4
bio.c
4
bio.c
|
@ -79,9 +79,9 @@ bget(uint dev, uint sector)
|
|||
}
|
||||
}
|
||||
|
||||
// Not cached; recycle some existing buffer.
|
||||
// Not cached; recycle some non-busy and clean buffer.
|
||||
for(b = bcache.head.prev; b != &bcache.head; b = b->prev){
|
||||
if((b->flags & B_BUSY) == 0){
|
||||
if((b->flags & B_BUSY) == 0 && (b->flags & B_DIRTY) == 0){
|
||||
b->dev = dev;
|
||||
b->sector = sector;
|
||||
b->flags = B_BUSY;
|
||||
|
|
8
file.c
8
file.c
|
@ -1,3 +1,7 @@
|
|||
//
|
||||
// File descriptors
|
||||
//
|
||||
|
||||
#include "types.h"
|
||||
#include "defs.h"
|
||||
#include "param.h"
|
||||
|
@ -87,7 +91,7 @@ filestat(struct file *f, struct stat *st)
|
|||
return -1;
|
||||
}
|
||||
|
||||
// Read from file f. Addr is kernel address.
|
||||
// Read from file f.
|
||||
int
|
||||
fileread(struct file *f, char *addr, int n)
|
||||
{
|
||||
|
@ -108,7 +112,7 @@ fileread(struct file *f, char *addr, int n)
|
|||
}
|
||||
|
||||
//PAGEBREAK!
|
||||
// Write to file f. Addr is kernel address.
|
||||
// Write to file f.
|
||||
int
|
||||
filewrite(struct file *f, char *addr, int n)
|
||||
{
|
||||
|
|
1
log.c
1
log.c
|
@ -177,6 +177,7 @@ log_write(struct buf *b)
|
|||
brelse(lbuf);
|
||||
if (i == log.lh.n)
|
||||
log.lh.n++;
|
||||
b->flags |= B_DIRTY; // XXX prevent eviction
|
||||
}
|
||||
|
||||
//PAGEBREAK!
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
//
|
||||
// File-system system calls.
|
||||
// Mostly argument checking, since we don't trust
|
||||
// user code, and calls into file.c and fs.c.
|
||||
//
|
||||
|
||||
#include "types.h"
|
||||
#include "defs.h"
|
||||
#include "param.h"
|
||||
|
|
Loading…
Reference in a new issue