MFC r272308: Fix old iSCSI initiator to work with new CAM locking.
This switches code to using xpt_rescan() routine, irrelevant to locking. Using xpt_action() directly requires knowledge about higher level locks, that SIM does not need to have. This code is obsolete, but that is not a reason to crash.
This commit is contained in:
parent
7db7c41fe7
commit
6cd0342073
@ -125,7 +125,7 @@ scan_callback(struct cam_periph *periph, union ccb *ccb)
|
||||
|
||||
debug_called(8);
|
||||
|
||||
free(ccb, M_TEMP);
|
||||
xpt_free_ccb(ccb);
|
||||
|
||||
if(sp->flags & ISC_SCANWAIT) {
|
||||
sp->flags &= ~ISC_SCANWAIT;
|
||||
@ -141,30 +141,15 @@ ic_scan(isc_session_t *sp)
|
||||
debug_called(8);
|
||||
sdebug(2, "scanning sid=%d", sp->sid);
|
||||
|
||||
if((ccb = malloc(sizeof(union ccb), M_TEMP, M_WAITOK | M_ZERO)) == NULL) {
|
||||
xdebug("scan failed (can't allocate CCB)");
|
||||
return ENOMEM; // XXX
|
||||
}
|
||||
|
||||
sp->flags &= ~ISC_CAMDEVS;
|
||||
sp->flags |= ISC_SCANWAIT;
|
||||
|
||||
CAM_LOCK(sp);
|
||||
if(xpt_create_path(&sp->cam_path, NULL, cam_sim_path(sp->cam_sim),
|
||||
0, CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
|
||||
xdebug("can't create cam path");
|
||||
CAM_UNLOCK(sp);
|
||||
free(ccb, M_TEMP);
|
||||
return ENODEV; // XXX
|
||||
}
|
||||
xpt_setup_ccb(&ccb->ccb_h, sp->cam_path, 5/*priority (low)*/);
|
||||
ccb->ccb_h.func_code = XPT_SCAN_BUS;
|
||||
ccb = xpt_alloc_ccb();
|
||||
ccb->ccb_h.path = sp->cam_path;
|
||||
ccb->ccb_h.cbfcnp = scan_callback;
|
||||
ccb->crcn.flags = CAM_FLAG_NONE;
|
||||
ccb->ccb_h.spriv_ptr0 = sp;
|
||||
|
||||
xpt_action(ccb);
|
||||
CAM_UNLOCK(sp);
|
||||
xpt_rescan(ccb);
|
||||
|
||||
while(sp->flags & ISC_SCANWAIT)
|
||||
tsleep(sp, PRIBIO, "ffp", 5*hz); // the timeout time should
|
||||
@ -374,6 +359,16 @@ ic_init(isc_session_t *sp)
|
||||
return ENXIO;
|
||||
}
|
||||
sp->cam_sim = sim;
|
||||
if(xpt_create_path(&sp->cam_path, NULL, cam_sim_path(sp->cam_sim),
|
||||
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
|
||||
xpt_bus_deregister(cam_sim_path(sp->cam_sim));
|
||||
cam_sim_free(sim, /*free_devq*/TRUE);
|
||||
CAM_UNLOCK(sp);
|
||||
#if __FreeBSD_version >= 700000
|
||||
mtx_destroy(&sp->cam_mtx);
|
||||
#endif
|
||||
return ENXIO;
|
||||
}
|
||||
CAM_UNLOCK(sp);
|
||||
|
||||
sdebug(1, "cam subsystem initialized");
|
||||
|
Loading…
x
Reference in New Issue
Block a user