static void vdev_disk_free(vdev_t *vd) { vdev_disk_t *dvd = vd->vdev_tsd; #ifdef illumos vdev_disk_ldi_cb_t *lcb; #endif if (dvd == NULL) return; #ifdef illumos /* * We have already closed the LDI handle. Clean up the LDI event * callbacks and free vd->vdev_tsd. */ while ((lcb = list_head(&dvd->vd_ldi_cbs)) != NULL) { list_remove(&dvd->vd_ldi_cbs, lcb); (void) ldi_ev_remove_callbacks(lcb->lcb_id); kmem_free(lcb, sizeof (vdev_disk_ldi_cb_t)); } list_destroy(&dvd->vd_ldi_cbs); #endif kmem_free(dvd, sizeof (vdev_disk_t)); vd->vdev_tsd = NULL; }
static void vdev_disk_free_locked(vdev_t *vd) { vdev_disk_ldi_cb_t *lcb; vdev_disk_t *dvd = vd->vdev_tsd; ASSERT(rw_lock_held(&vd->vdev_tsd_lock)); if (dvd == NULL) return; /* * We have already closed the LDI handle. Clean up the LDI event * callbacks and free vd->vdev_tsd. */ vd->vdev_tsd = NULL; while ((lcb = list_head(&dvd->vd_ldi_cbs)) != NULL) { list_remove(&dvd->vd_ldi_cbs, lcb); (void) ldi_ev_remove_callbacks(lcb->lcb_id); kmem_free(lcb, sizeof (vdev_disk_ldi_cb_t)); } list_destroy(&dvd->vd_ldi_cbs); kmem_free(dvd, sizeof (vdev_disk_t)); }