[Bug 226510] panic: Re-refing for reason 5, cnt = 1
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Tue Mar 20 20:23:37 UTC 2018
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=226510
--- Comment #16 from Warner Losh <imp at FreeBSD.org> ---
It looks like we're not releasing the DA_REF_TUR. We clear it, but don't
release, then see if it is set and clear it and release. This isn't going to
work out too well, so always release when we clear the work flag.
diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c
index 4bcddbb8dff9..beeda8d90f79 100644
--- a/sys/cam/scsi/scsi_da.c
+++ b/sys/cam/scsi/scsi_da.c
@@ -3114,6 +3114,7 @@ dastart(struct cam_periph *periph, union ccb *start_ccb)
if (bp == NULL) {
if (cam_iosched_has_work_flags(softc->cam_iosched,
DA_WORK_TUR)) {
cam_iosched_clr_work_flags(softc->cam_iosched,
DA_WORK_TUR);
+ da_periph_release_locked(periph, DA_REF_TUR);
scsi_test_unit_ready(&start_ccb->csio,
/*retries*/ da_retry_count,
dadone,
@@ -3139,11 +3140,6 @@ dastart(struct cam_periph *periph, union ccb *start_ccb)
}
}
- if (cam_iosched_has_work_flags(softc->cam_iosched,
DA_WORK_TUR)) {
- cam_iosched_clr_work_flags(softc->cam_iosched,
DA_WORK_TUR);
- da_periph_release_locked(periph, DA_REF_TUR);
- }
-
if ((bp->bio_flags & BIO_ORDERED) != 0 ||
(softc->flags & DA_FLAG_NEED_OTAG) != 0) {
softc->flags &= ~DA_FLAG_NEED_OTAG;
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list