diff options
Diffstat (limited to 'sys-freebsd/freebsd-sources/files/freebsd-sources-9.1-ciss.patch')
-rw-r--r-- | sys-freebsd/freebsd-sources/files/freebsd-sources-9.1-ciss.patch | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/sys-freebsd/freebsd-sources/files/freebsd-sources-9.1-ciss.patch b/sys-freebsd/freebsd-sources/files/freebsd-sources-9.1-ciss.patch new file mode 100644 index 000000000000..697984b92e74 --- /dev/null +++ b/sys-freebsd/freebsd-sources/files/freebsd-sources-9.1-ciss.patch @@ -0,0 +1,65 @@ +Index: sys/dev/ciss/ciss.c +=================================================================== +--- sys/dev/ciss/ciss.c (revision 264510) ++++ sys/dev/ciss/ciss.c (revision 264511) +@@ -180,8 +180,6 @@ + static void ciss_cam_poll(struct cam_sim *sim); + static void ciss_cam_complete(struct ciss_request *cr); + static void ciss_cam_complete_fixup(struct ciss_softc *sc, struct ccb_scsiio *csio); +-static struct cam_periph *ciss_find_periph(struct ciss_softc *sc, +- int bus, int target); + static int ciss_name_device(struct ciss_softc *sc, int bus, int target); + + /* periodic status monitoring */ +@@ -3398,27 +3396,6 @@ + + + /******************************************************************************** +- * Find a peripheral attached at (target) +- */ +-static struct cam_periph * +-ciss_find_periph(struct ciss_softc *sc, int bus, int target) +-{ +- struct cam_periph *periph; +- struct cam_path *path; +- int status; +- +- status = xpt_create_path(&path, NULL, cam_sim_path(sc->ciss_cam_sim[bus]), +- target, 0); +- if (status == CAM_REQ_CMP) { +- periph = cam_periph_find(path, NULL); +- xpt_free_path(path); +- } else { +- periph = NULL; +- } +- return(periph); +-} +- +-/******************************************************************************** + * Name the device at (target) + * + * XXX is this strictly correct? +@@ -3427,12 +3404,22 @@ + ciss_name_device(struct ciss_softc *sc, int bus, int target) + { + struct cam_periph *periph; ++ struct cam_path *path; ++ int status; + + if (CISS_IS_PHYSICAL(bus)) + return (0); +- if ((periph = ciss_find_periph(sc, bus, target)) != NULL) { ++ ++ status = xpt_create_path(&path, NULL, cam_sim_path(sc->ciss_cam_sim[bus]), ++ target, 0); ++ ++ if (status == CAM_REQ_CMP) { ++ mtx_lock(&sc->ciss_mtx); ++ periph = cam_periph_find(path, NULL); + sprintf(sc->ciss_logical[bus][target].cl_name, "%s%d", + periph->periph_name, periph->unit_number); ++ mtx_unlock(&sc->ciss_mtx); ++ xpt_free_path(path); + return(0); + } + sc->ciss_logical[bus][target].cl_name[0] = 0; |