From f1bb53c690051994f5a2c43ee900f9e335bd019c Mon Sep 17 00:00:00 2001 From: Frans Kaashoek Date: Tue, 30 Jul 2019 08:13:03 -0400 Subject: [PATCH] The driver should free descriptors, not interrupt handler. This avoids handler freeing descriptors before driver sees that the request has completed. --- kernel/virtio_disk.c | 6 +++--- 1 file 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; }