mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
Don't call destroy_dev(9) with a mutex held. While here, shuffle
things around so the periph destructors look alike. Based on a patch by Jaakko Heinonen. Submitted by: Jaakko Heinonen Reviewed by: scottl Approved by: rwatson (mentor) Sponsored by: FreeBSD Foundation
This commit is contained in:
parent
a9ebb31183
commit
5f3fed855c
6 changed files with 24 additions and 22 deletions
|
|
@ -262,9 +262,11 @@ chcleanup(struct cam_periph *periph)
|
|||
|
||||
softc = (struct ch_softc *)periph->softc;
|
||||
|
||||
devstat_remove_entry(softc->device_stats);
|
||||
destroy_dev(softc->dev);
|
||||
xpt_print(periph->path, "removing device entry\n");
|
||||
devstat_remove_entry(softc->device_stats);
|
||||
cam_periph_unlock(periph);
|
||||
destroy_dev(softc->dev);
|
||||
cam_periph_lock(periph);
|
||||
free(softc, M_DEVBUF);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -165,13 +165,12 @@ passcleanup(struct cam_periph *periph)
|
|||
|
||||
softc = (struct pass_softc *)periph->softc;
|
||||
|
||||
devstat_remove_entry(softc->device_stats);
|
||||
|
||||
destroy_dev(softc->dev);
|
||||
|
||||
if (bootverbose) {
|
||||
if (bootverbose)
|
||||
xpt_print(periph->path, "removing device entry\n");
|
||||
}
|
||||
devstat_remove_entry(softc->device_stats);
|
||||
cam_periph_unlock(periph);
|
||||
destroy_dev(softc->dev);
|
||||
cam_periph_lock(periph);
|
||||
free(softc, M_DEVBUF);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -342,11 +342,11 @@ ptdtor(struct cam_periph *periph)
|
|||
|
||||
softc = (struct pt_softc *)periph->softc;
|
||||
|
||||
devstat_remove_entry(softc->device_stats);
|
||||
|
||||
destroy_dev(softc->dev);
|
||||
|
||||
xpt_print(periph->path, "removing device entry\n");
|
||||
devstat_remove_entry(softc->device_stats);
|
||||
cam_periph_unlock(periph);
|
||||
destroy_dev(softc->dev);
|
||||
cam_periph_lock(periph);
|
||||
free(softc, M_DEVBUF);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1377,17 +1377,16 @@ sacleanup(struct cam_periph *periph)
|
|||
|
||||
softc = (struct sa_softc *)periph->softc;
|
||||
|
||||
xpt_print(periph->path, "removing device entry\n");
|
||||
devstat_remove_entry(softc->device_stats);
|
||||
|
||||
cam_periph_unlock(periph);
|
||||
destroy_dev(softc->devs.ctl_dev);
|
||||
|
||||
for (i = 0; i < SA_NUM_MODES; i++) {
|
||||
destroy_dev(softc->devs.mode_devs[i].r_dev);
|
||||
destroy_dev(softc->devs.mode_devs[i].nr_dev);
|
||||
destroy_dev(softc->devs.mode_devs[i].er_dev);
|
||||
}
|
||||
|
||||
xpt_print(periph->path, "removing device entry\n");
|
||||
cam_periph_lock(periph);
|
||||
free(softc, M_SCSISA);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -227,9 +227,10 @@ sescleanup(struct cam_periph *periph)
|
|||
|
||||
softc = (struct ses_softc *)periph->softc;
|
||||
|
||||
destroy_dev(softc->ses_dev);
|
||||
|
||||
xpt_print(periph->path, "removing device entry\n");
|
||||
cam_periph_unlock(periph);
|
||||
destroy_dev(softc->ses_dev);
|
||||
cam_periph_lock(periph);
|
||||
free(softc, M_SCSISES);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -200,11 +200,12 @@ sgcleanup(struct cam_periph *periph)
|
|||
struct sg_softc *softc;
|
||||
|
||||
softc = (struct sg_softc *)periph->softc;
|
||||
devstat_remove_entry(softc->device_stats);
|
||||
destroy_dev(softc->dev);
|
||||
if (bootverbose) {
|
||||
if (bootverbose)
|
||||
xpt_print(periph->path, "removing device entry\n");
|
||||
}
|
||||
devstat_remove_entry(softc->device_stats);
|
||||
cam_periph_unlock(periph);
|
||||
destroy_dev(softc->dev);
|
||||
cam_periph_lock(periph);
|
||||
free(softc, M_DEVBUF);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue