[4139] in Athena Bugs
6.4R VS3100 sdc driver does not send errors to user
daemon@ATHENA.MIT.EDU (epeisach@ATHENA.MIT.EDU)
Mon Feb 5 13:06:44 1990
From: epeisach@ATHENA.MIT.EDU
Date: Mon, 5 Feb 90 13:05:44 -0500
To: bugs@ATHENA.MIT.EDU
I discovered when starting to work on the sdc driver that errors were
not being sent to the user, but instead simply to /usr/adm/messages. The
following changes use printf to display the messages on the console.
(The cause of the below problem happened during our integration for the
3100's)
Ezra
*** /tmp/,RCSt1003098 Mon Feb 5 13:00:22 1990
--- /tmp/,RCSt2003098 Mon Feb 5 13:00:28 1990
***************
*** 372,378 ****
return (0);
}
if (sd_rdfmt(ui->ui_slave)) {
! log(LOG_WARNING, "%s%d:%s:cannot read XBN\n",
DEV_ID, ui->ui_slave, HARD_ERR);
sd_st.sd_type[ui->ui_slave] = -1;
return (0);
--- 372,378 ----
return (0);
}
if (sd_rdfmt(ui->ui_slave)) {
! printf("%s%d:%s:cannot read XBN\n",
DEV_ID, ui->ui_slave, HARD_ERR);
sd_st.sd_type[ui->ui_slave] = -1;
return (0);
***************
*** 381,388 ****
/* Sanity check on RCT: see if bbr was stopped in the middle */
if (put_rbn(-1)) {
! log(LOG_WARNING,
! "%s%d:%s: CANNOT RECOVER FROM PREVIOUS BBR\n",
DEV_ID, ui->ui_slave, HARD_ERR);
}
sd_st.sd_cyl.sd_word = -1;
--- 381,387 ----
/* Sanity check on RCT: see if bbr was stopped in the middle */
if (put_rbn(-1)) {
! printf("%s%d:%s: CANNOT RECOVER FROM PREVIOUS BBR\n",
DEV_ID, ui->ui_slave, HARD_ERR);
}
sd_st.sd_cyl.sd_word = -1;
***************
*** 824,830 ****
"sdustart: SELECTING DISKETTE ALL OVER\n");
if (sd_diskette()) {
if (!sd_nodelay)
! log(LOG_WARNING, "%s%d:%s: Drive select failed\n",
DEV_ID, unit, HARD_ERR);
sd_st.sd_flags[unit] |= DEV_OFFLINE;
sd_st.sd_cmd = SD_RESET; /* Just to be safe so that intrupt
--- 823,829 ----
"sdustart: SELECTING DISKETTE ALL OVER\n");
if (sd_diskette()) {
if (!sd_nodelay)
! printf("%s%d:%s: Drive select failed\n",
DEV_ID, unit, HARD_ERR);
sd_st.sd_flags[unit] |= DEV_OFFLINE;
sd_st.sd_cmd = SD_RESET; /* Just to be safe so that intrupt
***************
*** 963,970 ****
/* Find if there is a diskette in the RX23 drive */
if (sd_diskette()) {
if (!sd_nodelay)
! log(LOG_WARNING,
! "%s%d:%s: Drive select failed\n",
DEV_ID, unit, HARD_ERR);
sd_st.sd_flags[unit] |= DEV_OFFLINE;
sd_st.sd_cmd = SD_RESET;
--- 962,968 ----
/* Find if there is a diskette in the RX23 drive */
if (sd_diskette()) {
if (!sd_nodelay)
! printf("%s%d:%s: Drive select failed\n",
DEV_ID, unit, HARD_ERR);
sd_st.sd_flags[unit] |= DEV_OFFLINE;
sd_st.sd_cmd = SD_RESET;
***************
*** 1076,1082 ****
cmd = (SD_SELECT | DTRT_RX33 | (0377 & DRV_NUM2));
rx_reselect = 0;
if (sd_select(cmd, 1)) {
! log(LOG_WARNING, "%s%d:%s: Drive Select failed\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
return (1);
}
--- 1074,1080 ----
cmd = (SD_SELECT | DTRT_RX33 | (0377 & DRV_NUM2));
rx_reselect = 0;
if (sd_select(cmd, 1)) {
! printf("%s%d:%s: Drive Select failed\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
return (1);
}
***************
*** 1208,1220 ****
sdiaddr->nb_int_msk |= SINT_DC;
if (retry >= 10) {
if (udc_cstat & CST_CMPER)
! log(LOG_WARNING, "%s%d:%s: compare error\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
else if (udc_cstat & CST_ECCER)
! log(LOG_WARNING, "%s%d:%s: eccerror\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
else if (udc_cstat & CST_SYNER) {
! log(LOG_WARNING, "%s%d:%s: syncerr\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
}
log(LOG_WARNING, "RX23 Double Density\n");
--- 1206,1218 ----
sdiaddr->nb_int_msk |= SINT_DC;
if (retry >= 10) {
if (udc_cstat & CST_CMPER)
! printf("%s%d:%s: compare error\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
else if (udc_cstat & CST_ECCER)
! printf("%s%d:%s: eccerror\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
else if (udc_cstat & CST_SYNER) {
! printf("%s%d:%s: syncerr\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
}
log(LOG_WARNING, "RX23 Double Density\n");
***************
*** 1801,1807 ****
TERM_WRPR | TERM_WRFL);
rx_reselect = 0;
if (sd_select(sel_cmd, 1)) {
! log(LOG_WARNING, "%s%d:%s: Drive select failed\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
if (sd_poll) {
sd_poll = 0;
--- 1799,1805 ----
TERM_WRPR | TERM_WRFL);
rx_reselect = 0;
if (sd_select(sel_cmd, 1)) {
! printf("%s%d:%s: Drive select failed\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
if (sd_poll) {
sd_poll = 0;
***************
*** 1824,1830 ****
TERM_WRPR | TERM_WRFL);
sel_cmd = (SD_SELECT | DTRT_HDSK | sd_st.sd_drno);
if (sd_select(sel_cmd, 0)) {
! log(LOG_WARNING, "%s%d:%s: Drive select failed\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
sd_st.sd_flags[sd_st.sd_drno] |= DEV_OFFLINE;
if (sd_poll) {
--- 1822,1828 ----
TERM_WRPR | TERM_WRFL);
sel_cmd = (SD_SELECT | DTRT_HDSK | sd_st.sd_drno);
if (sd_select(sel_cmd, 0)) {
! printf("%s%d:%s: Drive select failed\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
sd_st.sd_flags[sd_st.sd_drno] |= DEV_OFFLINE;
if (sd_poll) {
***************
*** 2032,2051 ****
if (err) {
if (ddm_err) {
! log(LOG_WARNING, "%s%d%c: hard error sn %d\n",
DEV_ID, sd_st.sd_drno, 'a' + xunit,
BAD_SECT(sd_st.sd_drno, xunit));
! log(LOG_WARNING,
! "%s%d: Forced Error Modifier set LBN %d\n",
DEV_ID, sd_st.sd_drno, BAD_LBN(sd_st.sd_drno));
ddm_err = 0;
sd_st.sd_bleft -=
(sd_st.ucb[sd_st.sd_drno].badsect + 1) * SD_SIZE;
} else if (udc_cstat & CST_CMPER)
! log(LOG_WARNING, "%s%d:%s: compare error\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
else
! log(LOG_WARNING, "%s%d:%s: eccerror\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
if (sdbbrdbug) {
log(LOG_DEBUG,
--- 2030,2048 ----
if (err) {
if (ddm_err) {
! printf("%s%d%c: hard error sn %d\n",
DEV_ID, sd_st.sd_drno, 'a' + xunit,
BAD_SECT(sd_st.sd_drno, xunit));
! printf("%s%d: Forced Error Modifier set LBN %d\n",
DEV_ID, sd_st.sd_drno, BAD_LBN(sd_st.sd_drno));
ddm_err = 0;
sd_st.sd_bleft -=
(sd_st.ucb[sd_st.sd_drno].badsect + 1) * SD_SIZE;
} else if (udc_cstat & CST_CMPER)
! printf("%s%d:%s: compare error\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
else
! printf("%s%d:%s: eccerror\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
if (sdbbrdbug) {
log(LOG_DEBUG,
***************
*** 2078,2088 ****
return;
}
rtr_cnt = 0;
! log(LOG_WARNING, "%s%d:%s: syncerr\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
err++;
} else if ((status & DKC_OVRUN) == DKC_OVRUN) {
! log(LOG_WARNING, "%s%d:%s: overrun/underrun\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
err++;
sd_reset();
--- 2075,2085 ----
return;
}
rtr_cnt = 0;
! printf("%s%d:%s: syncerr\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
err++;
} else if ((status & DKC_OVRUN) == DKC_OVRUN) {
! printf("%s%d:%s: overrun/underrun\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
err++;
sd_reset();
***************
*** 2102,2108 ****
return;
}
}
! log(LOG_WARNING, "%s%d:%s: WRITE FAULT\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
rtr_cnt = 0;
err++;
--- 2099,2105 ----
return;
}
}
! printf("%s%d:%s: WRITE FAULT\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
rtr_cnt = 0;
err++;
***************
*** 2126,2154 ****
err++;
else if (sd_retry(1)) {
if (ddm_err) {
! log(LOG_WARNING, "%s%d%c: hard error sn %d\n",
DEV_ID, sd_st.sd_drno, 'a' + xunit,
BAD_SECT(sd_st.sd_drno, xunit));
! log(LOG_WARNING,
! "%s%d: Forced Error Modifier set LBN %d\n",
DEV_ID, sd_st.sd_drno, BAD_LBN(sd_st.sd_drno));
ddm_err = 0;
sd_st.sd_bleft -=
(sd_st.ucb[sd_st.sd_drno].badsect + 1) * SD_SIZE;
} else
! log(LOG_WARNING, "%s%d:%s:\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
err++;
}
} else if ((status & DKC_BADSECT) == DKC_BADSECT) {
if ((sd_st.sd_drno == DRV_NUM2) || xbnflag) {
! log(LOG_WARNING, "%s%d:%s: bad sector\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
err++;
} else if (sd_retry(0))
err++;
} else if ((udc_dstat & DST_WRPROT) == DST_WRPROT) {
! log(LOG_WARNING, "%s%d: WRITE PROTECTED\n",
DEV_ID, sd_st.sd_drno);
sd_st.sd_flags[sd_st.sd_drno] |= DEV_WRTLCK;
err++;
--- 2123,2150 ----
err++;
else if (sd_retry(1)) {
if (ddm_err) {
! printf("%s%d%c: hard error sn %d\n",
DEV_ID, sd_st.sd_drno, 'a' + xunit,
BAD_SECT(sd_st.sd_drno, xunit));
! printf("%s%d: Forced Error Modifier set LBN %d\n",
DEV_ID, sd_st.sd_drno, BAD_LBN(sd_st.sd_drno));
ddm_err = 0;
sd_st.sd_bleft -=
(sd_st.ucb[sd_st.sd_drno].badsect + 1) * SD_SIZE;
} else
! printf("%s%d:%s:\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
err++;
}
} else if ((status & DKC_BADSECT) == DKC_BADSECT) {
if ((sd_st.sd_drno == DRV_NUM2) || xbnflag) {
! printf("%s%d:%s: bad sector\n",
DEV_ID, sd_st.sd_drno, HARD_ERR);
err++;
} else if (sd_retry(0))
err++;
} else if ((udc_dstat & DST_WRPROT) == DST_WRPROT) {
! printf("%s%d: WRITE PROTECTED\n",
DEV_ID, sd_st.sd_drno);
sd_st.sd_flags[sd_st.sd_drno] |= DEV_WRTLCK;
err++;
***************
*** 3139,3145 ****
STEP_4:
if (sdbbrdbug)
log(LOG_DEBUG, "PUT_RBN: STEP 4\n");
! log(LOG_WARNING, "%s%d: Bad Block Reported at LBN %d \n",
DEV_ID, sd_st.sd_drno, lbn);
bzero(rct1, SD_SIZE);
block = lbn + sd_st.ucb[sd_st.sd_drno].lbnbase;
--- 3135,3141 ----
STEP_4:
if (sdbbrdbug)
log(LOG_DEBUG, "PUT_RBN: STEP 4\n");
! printf("%s%d: Bad Block Reported at LBN %d \n",
DEV_ID, sd_st.sd_drno, lbn);
bzero(rct1, SD_SIZE);
block = lbn + sd_st.ucb[sd_st.sd_drno].lbnbase;
***************
*** 3307,3318 ****
if (*data_ptr++ != *temp_ptr++)
goto STEP_9;
! log(LOG_WARNING, "%s%d: Transient error on LBN %d, Block not bad \n",
DEV_ID, sd_st.sd_drno, lbn);
#ifdef BBR_TST
if (bbr_force) {
! log(LOG_WARNING, "%s%d: LBN %d being forced to be replaced\n",
DEV_ID, sd_st.sd_drno, lbn);
goto STEP_9;
}
--- 3303,3314 ----
if (*data_ptr++ != *temp_ptr++)
goto STEP_9;
! printf("%s%d: Transient error on LBN %d, Block not bad \n",
DEV_ID, sd_st.sd_drno, lbn);
#ifdef BBR_TST
if (bbr_force) {
! printf("%s%d: LBN %d being forced to be replaced\n",
DEV_ID, sd_st.sd_drno, lbn);
goto STEP_9;
}
***************
*** 3435,3441 ****
if (*data_ptr++ != *temp_ptr++)
goto STEP_9;
if (replace(lbn)) { /* Big trouble if replace failed */
! log(LOG_WARNING, "%s%d: REPLACE FAILURE at LBN %d \n",
DEV_ID, sd_st.sd_drno, lbn);
goto STEP_16;
}
--- 3431,3437 ----
if (*data_ptr++ != *temp_ptr++)
goto STEP_9;
if (replace(lbn)) { /* Big trouble if replace failed */
! printf("%s%d: REPLACE FAILURE at LBN %d \n",
DEV_ID, sd_st.sd_drno, lbn);
goto STEP_16;
}
***************
*** 3459,3465 ****
* STEP 14 -- Exit successfully.
*/
if (newrbn >= 0) {
! log(LOG_WARNING, "%s%d: LBN %d replaced \n",
DEV_ID, sd_st.sd_drno, lbn);
log(LOG_WARNING, "%s%d: Replacement Block No = %d\n",
DEV_ID, sd_st.sd_drno, newrbn);
--- 3455,3461 ----
* STEP 14 -- Exit successfully.
*/
if (newrbn >= 0) {
! printf("%s%d: LBN %d replaced \n",
DEV_ID, sd_st.sd_drno, lbn);
log(LOG_WARNING, "%s%d: Replacement Block No = %d\n",
DEV_ID, sd_st.sd_drno, newrbn);