From 8e7b4f58cbf5cf27c6425e21781a3f2c5483e513 Mon Sep 17 00:00:00 2001 From: Mes0903 Date: Mon, 23 Mar 2026 05:04:17 +0800 Subject: [PATCH] Fix 'num_request_queues' exceeding allocated slots 'virtio_fs_state_t' allocates three queue slots (queues[0..2]), but 'num_request_queues' was set to 3, causing the guest to request four virtqueues (1 hiprio + 3 request queues). With SMP >= 3, the guest writes QueueSel = 3, which the host silently rejects. The stale QueueSel causes the wrong QueueReady to be returned, making 'virtio_fs_probe' fail. Set 'num_request_queues' to 2 to match the number of request queue slots actually available. --- virtio-fs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/virtio-fs.c b/virtio-fs.c index 5fb8a2a9..44992957 100644 --- a/virtio-fs.c +++ b/virtio-fs.c @@ -935,7 +935,7 @@ bool virtio_fs_init(virtio_fs_state_t *vfs, char *mtag, char *dir) memcpy(vfs->shared_dir, dir, dir_len); snprintf(PRIV(vfs)->tag, sizeof(PRIV(vfs)->tag), "%s", mtag); - PRIV(vfs)->num_request_queues = 3; + PRIV(vfs)->num_request_queues = 2; vfs->mount_tag = mtag; inode_map_entry *root_entry = malloc(sizeof(inode_map_entry));