On 3/8/20 3:44 AM, Hillf Danton wrote: > @@ -1208,8 +1211,16 @@ static int __loop_clr_fd(struct loop_dev > * > * 3) unlock, del_timer_sync so if timer raced it will be a no-op > */ > - loop_unprepare_queue(lo); > spin_lock_irq(&lo->lo_lock); > + do { > + struct workqueue_struct *wq = lo->workqueue; > + > + lo->workqueue = ERR_PTR(-EINVAL); > + spin_unlock_irq(&lo->lo_lock); > + destroy_workqueue(wq); > + spin_lock_irq(&lo->lo_lock); > + } while (0); This looks highly suspicious, what's the point of this loop? Also think this series a) might not be fully cooked, and b) really should have gone through the block tree. -- Jens Axboe