This source file includes following definitions.
- ramdiskinit
- ramdiskrw
1
2
3
4
5 #include "types.h"
6 #include "riscv.h"
7 #include "defs.h"
8 #include "param.h"
9 #include "memlayout.h"
10 #include "spinlock.h"
11 #include "sleeplock.h"
12 #include "fs.h"
13 #include "buf.h"
14
15 void
16 ramdiskinit(void)
17 {
18 }
19
20
21
22 void
23 ramdiskrw(struct buf *b)
24 {
25 if(!holdingsleep(&b->lock))
26 panic("ramdiskrw: buf not locked");
27 if((b->flags & (B_VALID|B_DIRTY)) == B_VALID)
28 panic("ramdiskrw: nothing to do");
29
30 if(b->blockno >= FSSIZE)
31 panic("ramdiskrw: blockno too big");
32
33 uint64 diskaddr = b->blockno * BSIZE;
34 char *addr = (char *)RAMDISK + diskaddr;
35
36 if(b->flags & B_DIRTY){
37
38 memmove(addr, b->data, BSIZE);
39 b->flags &= ~B_DIRTY;
40 } else {
41
42 memmove(b->data, addr, BSIZE);
43 b->flags |= B_VALID;
44 }
45 }