diff options
author | Robert Morris <[email protected]> | 2024-01-02 12:55:17 -0500 |
---|---|---|
committer | Robert Morris <[email protected]> | 2024-01-02 12:55:17 -0500 |
commit | 0de5ac779602f562a038e5ad27163d85bc71638b (patch) | |
tree | 5518cfd56707fbc70cf3991399b1ced4bdd7a771 /kernel | |
parent | 3c0a25fc4383140b3f8bf83f5eef4cbb14062e94 (diff) | |
download | xv6-labs-0de5ac779602f562a038e5ad27163d85bc71638b.tar.gz xv6-labs-0de5ac779602f562a038e5ad27163d85bc71638b.tar.bz2 xv6-labs-0de5ac779602f562a038e5ad27163d85bc71638b.zip |
x
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/virtio_disk.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/kernel/virtio_disk.c b/kernel/virtio_disk.c index ae6c164..dfca2bc 100644 --- a/kernel/virtio_disk.c +++ b/kernel/virtio_disk.c @@ -212,6 +212,28 @@ alloc3_desc(int *idx) return 0; } +#ifdef LAB_LOCK +// +// check that there are at most NBUF distinct +// struct buf's, which the lock lab requires. +// +static struct buf *xbufs[NBUF]; +static void +checkbuf(struct buf *b) +{ + for(int i = 0; i < NBUF; i++){ + if(xbufs[i] == b){ + return; + } + if(xbufs[i] == 0){ + xbufs[i] = b; + return; + } + } + panic("more than NBUF bufs"); +} +#endif + void virtio_disk_rw(struct buf *b, int write) { @@ -219,6 +241,10 @@ virtio_disk_rw(struct buf *b, int write) acquire(&disk.vdisk_lock); +#ifdef LAB_LOCK + checkbuf(b); +#endif + // the spec's Section 5.2 says that legacy block operations use // three descriptors: one for type/reserved/sector, one for the // data, one for a 1-byte status result. |