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; }