Date: Mon, 19 Aug 2013 14:54:26 -0400 From: Mark Johnston <markj@freebsd.org> To: sbruno@freebsd.org Cc: "FreeBSD-scsi@freebsd.org" <FreeBSD-scsi@freebsd.org> Subject: Re: Interesting, yet stupid test case Message-ID: <20130819185426.GA4765@charmander.sandvine.com> In-Reply-To: <1376934295.1455.4.camel@localhost> References: <1376934295.1455.4.camel@localhost>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Aug 19, 2013 at 10:44:54AM -0700, Sean Bruno wrote:
> Was able to get mfi to detonate (via CAM) today on stable/9
>
> At the loader prompt, physically remove some amount of drives (in my
> case drives 0-5, as 6-11 are my zroot). Boot up into single user via
> boot -s
>
> System will attempt to process all the events in the controller on boot
> up and die violently. :-)
Yuck. :(
I think we're not supposed to drop the SIM lock before calling
xpt_rescan(); the other drivers I've looked at don't do this at least.
We're also unnecessarily dropping the mfi lock around the call to
xpt_alloc_ccb_nowait().
I think the following (untested) patch should help. I can try testing it
myself later if I can get a hold of some equipment at work (might take a
few days).
Thanks,
-Mark
Index: mfi_cam.c
===================================================================
--- mfi_cam.c (revision 254539)
+++ mfi_cam.c (working copy)
@@ -307,10 +307,10 @@
return;
}
camsc->state = MFIP_STATE_RESCAN;
- mtx_unlock(&sc->mfi_io_lock);
ccb = xpt_alloc_ccb_nowait();
if (ccb == NULL) {
+ mtx_unlock(&sc->mfi_io_lock);
device_printf(sc->mfi_dev,
"Cannot allocate ccb for bus rescan.\n");
return;
@@ -317,7 +317,6 @@
}
sim = camsc->sim;
- mtx_lock(&sc->mfi_io_lock);
if (xpt_create_path(&ccb->ccb_h.path, NULL, cam_sim_path(sim),
tid, CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
xpt_free_ccb(ccb);
@@ -326,11 +325,8 @@
"Cannot create path for bus rescan.\n");
return;
}
- mtx_unlock(&sc->mfi_io_lock);
-
xpt_rescan(ccb);
- mtx_lock(&sc->mfi_io_lock);
camsc->state = MFIP_STATE_NONE;
mtx_unlock(&sc->mfi_io_lock);
}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20130819185426.GA4765>
