Today, I got re@ permission and committed the destroy_dev_sched() KPI into the tree. As suggested by Nate Lawson, destroy_dev() tries to auto-detect "devdrn" deadlock condition and transforms destroy_dev() from d_close() csw method into destroy_dev_sched(). I together with Peter Holm tried to test the change as thoroughly as possible. The obvious problematic area are the races between device driver module unload and destroy_dev_sched(). At least smb(4) definitely has that race that shall be worked around by draining events with drain_dev_clone_events() and destroy_dev_drain(&cdevsw); see snp(4) change for example. Please, report issues caused by the patch to the list with me Cc:ed. Change of autodetection of deadlock in destroy_dev() was made in separate commit for ease of reverting.
Attachment:
pgp6jPKxTjv3A.pgp
Description: PGP signature