Add a kernel function to delist our kernel character devices, so that

the device name can be re-used right away in case we are destroying
the character devices in the background.

MFC after:	4 days
Reported by:	dchagin@
This commit is contained in:
Hans Petter Selasky 2015-01-14 14:04:29 +00:00
parent c24341d2e3
commit 07dbde6777
3 changed files with 22 additions and 1 deletions

View File

@ -2019,7 +2019,10 @@ usb_destroy_dev(struct usb_fs_privdata *pd)
usb_destroy_dev_sync(pd);
return;
}
/* make sure we can re-use the device name */
delist_dev(pd->cdev);
USB_BUS_LOCK(bus);
LIST_INSERT_HEAD(&bus->pd_cleanup_list, pd, pd_next);
/* get cleanup going */

View File

@ -1114,6 +1114,23 @@ destroy_devl(struct cdev *dev)
}
}
static void
delist_dev_locked(struct cdev *dev)
{
struct cdev *child;
devfs_destroy(dev);
LIST_FOREACH(child, &dev->si_children, si_siblings)
delist_dev_locked(child);
}
void
delist_dev(struct cdev *dev)
{
dev_lock();
delist_dev_locked(dev);
dev_unlock();
}
void
destroy_dev(struct cdev *dev)
{

View File

@ -245,6 +245,7 @@ void clone_cleanup(struct clonedevs **);
int clone_create(struct clonedevs **, struct cdevsw *, int *unit, struct cdev **dev, int extra);
int count_dev(struct cdev *_dev);
void delist_dev(struct cdev *_dev);
void destroy_dev(struct cdev *_dev);
int destroy_dev_sched(struct cdev *dev);
int destroy_dev_sched_cb(struct cdev *dev, void (*cb)(void *), void *arg);