Page MenuHomeFreeBSD

D14792.diff
No OneTemporary

D14792.diff

Index: sys/cam/scsi/scsi_da.c
===================================================================
--- sys/cam/scsi/scsi_da.c
+++ sys/cam/scsi/scsi_da.c
@@ -116,7 +116,8 @@
DA_FLAG_CAN_ATA_LOG = 0x008000,
DA_FLAG_CAN_ATA_IDLOG = 0x010000,
DA_FLAG_CAN_ATA_SUPCAP = 0x020000,
- DA_FLAG_CAN_ATA_ZONE = 0x040000
+ DA_FLAG_CAN_ATA_ZONE = 0x040000,
+ DA_FLAG_TUR_PENDING = 0x080000
} da_flags;
typedef enum {
@@ -2068,7 +2069,8 @@
case AC_SCSI_AEN:
softc = (struct da_softc *)periph->softc;
cam_periph_lock(periph);
- if (!cam_iosched_has_work_flags(softc->cam_iosched, DA_WORK_TUR)) {
+ if (!cam_iosched_has_work_flags(softc->cam_iosched, DA_WORK_TUR) &&
+ (softc->flags & DA_FLAG_TUR_PENDING) == 0) {
if (da_periph_acquire(periph, DA_REF_TUR) == 0) {
cam_iosched_set_work_flags(softc->cam_iosched, DA_WORK_TUR);
daschedule(periph);
@@ -3113,6 +3115,7 @@
bp = cam_iosched_next_bio(softc->cam_iosched);
if (bp == NULL) {
if (cam_iosched_has_work_flags(softc->cam_iosched, DA_WORK_TUR)) {
+ softc->flags |= DA_FLAG_TUR_PENDING;
cam_iosched_clr_work_flags(softc->cam_iosched, DA_WORK_TUR);
scsi_test_unit_ready(&start_ccb->csio,
/*retries*/ da_retry_count,
@@ -5570,7 +5573,7 @@
if (daerror(done_ccb, CAM_RETRY_SELTO,
SF_RETRY_UA | SF_NO_RECOVERY | SF_NO_PRINT) ==
ERESTART)
- return;
+ return; /* Will complete again, keep reference */
if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) != 0)
cam_release_devq(done_ccb->ccb_h.path,
/*relsim_flags*/0,
@@ -5579,6 +5582,7 @@
/*getcount_only*/0);
}
xpt_release_ccb(done_ccb);
+ softc->flags &= ~DA_FLAG_TUR_PENDING;
da_periph_release_locked(periph, DA_REF_TUR);
return;
}
@@ -5700,6 +5704,7 @@
struct da_softc *softc = periph->softc;
if (!cam_iosched_has_work_flags(softc->cam_iosched, DA_WORK_TUR) &&
+ (softc->flags & DA_FLAG_TUR_PENDING) == 0 &&
LIST_EMPTY(&softc->pending_ccbs)) {
if (da_periph_acquire(periph, DA_REF_TUR) == 0) {
cam_iosched_set_work_flags(softc->cam_iosched, DA_WORK_TUR);

File Metadata

Mime Type
text/plain
Expires
Sun, Oct 26, 12:44 AM (10 h, 1 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24200712
Default Alt Text
D14792.diff (2 KB)

Event Timeline