[4139] in Athena Bugs

home help back first fref pref prev next nref lref last post

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);

home help back first fref pref prev next nref lref last post