Date: Fri, 20 Jun 2014 01:45:03 +0000 (UTC) From: Alexander Kabaev <kan@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r267660 - head/sys/dev/firewire Message-ID: <201406200145.s5K1j3TC083304@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kan Date: Fri Jun 20 01:45:03 2014 New Revision: 267660 URL: http://svnweb.freebsd.org/changeset/base/267660 Log: Set target->sbp field to valid value when sbp device is created. The sbp_cam_detach_target can be called from sbp_post_explore function on the first target that is not really attached and it was written with the corresponding safety check in place to tolerate that. Unfortunately the recent locking cleanup did add a locking assertion that tries to dereference the target->sbp pointer unconditionally, which causes less than desirable outcome. Since the assertion is useful, just initialize the target sbp pointer once when sbp device is being initialized instead of when the target is being attached. This makes assertion work in all cases and fixes the crash on boot. Modified: head/sys/dev/firewire/sbp.c Modified: head/sys/dev/firewire/sbp.c ============================================================================== --- head/sys/dev/firewire/sbp.c Fri Jun 20 00:43:52 2014 (r267659) +++ head/sys/dev/firewire/sbp.c Fri Jun 20 01:45:03 2014 (r267660) @@ -622,7 +622,6 @@ END_DEBUG } /* new target */ target = &sbp->targets[i]; - target->sbp = sbp; target->fwdev = fwdev; target->target_id = i; /* XXX we may want to reload mgm port after each bus reset */ @@ -1976,6 +1975,7 @@ END_DEBUG for( i = 0 ; i < SBP_NUM_TARGETS ; i++){ sbp->targets[i].fwdev = NULL; sbp->targets[i].luns = NULL; + sbp->targets[i].sbp = sbp; } sbp->sim = cam_sim_alloc(sbp_action, sbp_poll, "sbp", sbp,
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201406200145.s5K1j3TC083304>