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,
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to