The CDP_ACTIVE flag is cleared at the beginning of destroy_devl(),
and destroy_devl() drops dev_mtx. The protection against the race with dev_rel(), introduced in r163328, should be extended to cover destroy_devl() calls for the children of the destroyed dev. Reported and tested by: joerg MFC after: 1 week
This commit is contained in:
parent
bc14b14d62
commit
dbe66680b0
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=222086
@ -981,6 +981,8 @@ destroy_devl(struct cdev *dev)
|
||||
/* Remove name marking */
|
||||
dev->si_flags &= ~SI_NAMED;
|
||||
|
||||
dev->si_refcount++; /* Avoid race with dev_rel() */
|
||||
|
||||
/* If we are a child, remove us from the parents list */
|
||||
if (dev->si_flags & SI_CHILD) {
|
||||
LIST_REMOVE(dev, si_siblings);
|
||||
@ -997,7 +999,6 @@ destroy_devl(struct cdev *dev)
|
||||
dev->si_flags &= ~SI_CLONELIST;
|
||||
}
|
||||
|
||||
dev->si_refcount++; /* Avoid race with dev_rel() */
|
||||
csw = dev->si_devsw;
|
||||
dev->si_devsw = NULL; /* already NULL for SI_ALIAS */
|
||||
while (csw != NULL && csw->d_purge != NULL && dev->si_threadcount) {
|
||||
|
Loading…
Reference in New Issue
Block a user