On 3/12/26 1:42 PM, Joshua Daley wrote: > The last step of virtscsi_handle_event is to call virtscsi_kick_event, > which calls INIT_WORK on it's own work item. INIT_WORK resets the > work item's data bits to 0. > > If this occurs while the work item is being flushed by > cancel_work_sync, then kernel/workqueue.c/work_offqd_enable triggers a > kernel warning, as it expects the "disable" bit to be 1: > > [ 21.450115] workqueue: work disable count underflowed > [ 21.450117] WARNING: CPU: 1 PID: 56 at kernel/workqueue.c:4328 > enable_work+0x10a/0x120 > ... > [ 21.450171] Call Trace: > [ 21.450173] [<000003db2e5bdc3e>] enable_work+0x10e/0x120 > [ 21.450176] ([<000003db2e5bdc3a>] enable_work+0x10a/0x120) > [ 21.450178] [<000003db2e5bdd86>] cancel_work_sync+0x86/0xa0 > [ 21.450181] [<000003daae97d9e4>] virtscsi_remove+0xb4/0xd0 [virtio_scsi] > [ 21.450184] [<000003db2ef3b5ca>] virtio_dev_remove+0x6a/0xd0 > [ 21.450186] [<000003db2ef9106c>] > device_release_driver_internal+0x1ac/0x260 > [ 21.450190] [<000003db2ef8edc8>] bus_remove_device+0xf8/0x190 > [ 21.450192] [<000003db2ef88d72>] device_del+0x142/0x340 > [ 21.450194] [<000003db2ef88fa0>] device_unregister+0x30/0xa0 > [ 21.450196] [<000003db2ef3b2fa>] unregister_virtio_device+0x2a/0x40 > > This warning may occur if a controller is detached immediately > following a disk detach. > > Move the INIT_WORK call to prevent this. Don't re-init event list > work items in virtscsi_kick_event, init them only once in > virtscsi_init instead. > > Signed-off-by: Joshua Daley <[email protected]>
With patch 2 either squashed in OR moved after this one: Reviewed-by: Matthew Rosato <[email protected]>

