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){
|
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->dev = dev;
|
||||||
b->sector = sector;
|
b->sector = sector;
|
||||||
b->flags = B_BUSY;
|
b->flags = B_BUSY;
|
||||||
|
|
8
file.c
8
file.c
|
@ -1,3 +1,7 @@
|
||||||
|
//
|
||||||
|
// File descriptors
|
||||||
|
//
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
#include "param.h"
|
#include "param.h"
|
||||||
|
@ -87,7 +91,7 @@ filestat(struct file *f, struct stat *st)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read from file f. Addr is kernel address.
|
// Read from file f.
|
||||||
int
|
int
|
||||||
fileread(struct file *f, char *addr, int n)
|
fileread(struct file *f, char *addr, int n)
|
||||||
{
|
{
|
||||||
|
@ -108,7 +112,7 @@ fileread(struct file *f, char *addr, int n)
|
||||||
}
|
}
|
||||||
|
|
||||||
//PAGEBREAK!
|
//PAGEBREAK!
|
||||||
// Write to file f. Addr is kernel address.
|
// Write to file f.
|
||||||
int
|
int
|
||||||
filewrite(struct file *f, char *addr, int n)
|
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);
|
brelse(lbuf);
|
||||||
if (i == log.lh.n)
|
if (i == log.lh.n)
|
||||||
log.lh.n++;
|
log.lh.n++;
|
||||||
|
b->flags |= B_DIRTY; // XXX prevent eviction
|
||||||
}
|
}
|
||||||
|
|
||||||
//PAGEBREAK!
|
//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 "types.h"
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
#include "param.h"
|
#include "param.h"
|
||||||
|
|
Loading…
Reference in a new issue