Skip to content
Snippets Groups Projects
Commit 12abb1a5 authored by Robert Morris's avatar Robert Morris
Browse files

don't let dirty blocks be evicted from cache!

parent 38eee5bc
No related branches found
No related tags found
No related merge requests found
......@@ -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;
......
//
// 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)
{
......
......@@ -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!
......
//
// 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"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment