summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
The driver should free descriptors, not interrupt handler. This
avoids handler freeing descriptors before driver sees that the request has completed.
1 files changed, 3 insertions, 3 deletions
diff --git a/kernel/virtio_disk.c b/kernel/virtio_disk.c
index df4473d..9ebe695 100644
--- a/kernel/virtio_disk.c
+++ b/kernel/virtio_disk.c
@@ -239,6 +239,9 @@ virtio_disk_rw(struct buf *b, int write)
sleep(b, &vdisk_lock);
}
+ info[idx[0]].b = 0;
+ free_chain(idx[0]);
+
release(&vdisk_lock);
}
@@ -256,9 +259,6 @@ virtio_disk_intr()
info[id].status = 1;
wakeup(info[id].b);
- info[id].b = 0;
- free_chain(id);
-
used_idx = (used_idx + 1) % NUM;
}