1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-25 11:37:56 +00:00

Fix targbh crash on XPT_IMMED_NOTIFY error during attach.

This commit is contained in:
Alexander Motin 2013-09-01 11:50:37 +00:00
parent 27492bea85
commit d1d536f0eb
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=255118

View File

@ -283,16 +283,13 @@ targbhenlun(struct cam_periph *periph)
xpt_setup_ccb(&atio->ccb_h, periph->path, CAM_PRIORITY_NORMAL);
atio->ccb_h.func_code = XPT_ACCEPT_TARGET_IO;
atio->ccb_h.cbfcnp = targbhdone;
xpt_action((union ccb *)atio);
status = atio->ccb_h.status;
if (status != CAM_REQ_INPROG) {
targbhfreedescr(atio->ccb_h.ccb_descr);
free(atio, M_SCSIBH);
break;
}
((struct targbh_cmd_desc*)atio->ccb_h.ccb_descr)->atio_link =
softc->accept_tio_list;
softc->accept_tio_list = atio;
xpt_action((union ccb *)atio);
status = atio->ccb_h.status;
if (status != CAM_REQ_INPROG)
break;
}
if (i == 0) {
@ -321,14 +318,12 @@ targbhenlun(struct cam_periph *periph)
xpt_setup_ccb(&inot->ccb_h, periph->path, CAM_PRIORITY_NORMAL);
inot->ccb_h.func_code = XPT_IMMED_NOTIFY;
inot->ccb_h.cbfcnp = targbhdone;
xpt_action((union ccb *)inot);
status = inot->ccb_h.status;
if (status != CAM_REQ_INPROG) {
free(inot, M_SCSIBH);
break;
}
SLIST_INSERT_HEAD(&softc->immed_notify_slist, &inot->ccb_h,
periph_links.sle);
xpt_action((union ccb *)inot);
status = inot->ccb_h.status;
if (status != CAM_REQ_INPROG)
break;
}
if (i == 0) {
@ -413,7 +408,9 @@ targbhctor(struct cam_periph *periph, void *arg)
periph->softc = softc;
softc->init_level++;
return (targbhenlun(periph));
if (targbhenlun(periph) != CAM_REQ_CMP)
cam_periph_invalidate(periph);
return (CAM_REQ_CMP);
}
static void