⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dasd_3990_erp.c

📁 内核linux2.4.20,可跟rtlinux3.2打补丁 组成实时linux系统,编译内核
💻 C
📖 第 1 页 / 共 5 页
字号:
	} else {		/* all other data checks */		DASD_MESSAGE (KERN_DEBUG, device, "%s",                              "Uncorrectable data check with retry count "                              "exhausted...");		erp = dasd_3990_erp_action_5 (erp);	}	return erp;} /* end dasd_3990_erp_data_check *//* * DASD_3990_ERP_OVERRUN * * DESCRIPTION *   Handles 24 byte 'Overrun' error. * * PARAMETER *   erp                current erp_head * RETURN VALUES *   erp                new erp_head - pointer to new ERP */ccw_req_t *dasd_3990_erp_overrun (ccw_req_t *erp,		       char      *sense){	dasd_device_t *device = erp->device;	erp->function = dasd_3990_erp_overrun;        DASD_MESSAGE (KERN_DEBUG, device, "%s",                      "Overrun - service overrun or overrun"                      " error requested by channel");        erp = dasd_3990_erp_action_5 (erp);	return erp;} /* end dasd_3990_erp_overrun *//* * DASD_3990_ERP_INV_FORMAT * * DESCRIPTION *   Handles 24 byte 'Invalid Track Format' error. * * PARAMETER *   erp                current erp_head * RETURN VALUES *   erp                new erp_head - pointer to new ERP */ccw_req_t *dasd_3990_erp_inv_format (ccw_req_t *erp,			  char      *sense){	dasd_device_t *device = erp->device;	erp->function = dasd_3990_erp_inv_format;	if (sense[2] & SNS2_ENV_DATA_PRESENT) {		DASD_MESSAGE (KERN_DEBUG, device, "%s",                              "Track format error when destaging or "                              "staging data");		dasd_3990_handle_env_data (erp,                                           sense);		erp = dasd_3990_erp_action_4 (erp,					      sense);	} else {		DASD_MESSAGE (KERN_ERR, device, "%s",                              "Invalid Track Format - Fatal error should have "                              "been handled within the interrupt handler");                erp= dasd_3990_erp_cleanup (erp,                                            CQR_STATUS_FAILED);        }	return erp;} /* end dasd_3990_erp_inv_format *//* * DASD_3990_ERP_EOC * * DESCRIPTION *   Handles 24 byte 'End-of-Cylinder' error. * * PARAMETER *   erp                already added default erp * RETURN VALUES *   erp                pointer to original (failed) cqr. */ccw_req_t *dasd_3990_erp_EOC (ccw_req_t *default_erp,		   char      *sense){	dasd_device_t *device = default_erp->device;        DASD_MESSAGE (KERN_ERR, device, "%s",                      "End-of-Cylinder - must never happen");        /* implement action 7 - BUG */        return dasd_3990_erp_cleanup (default_erp,                                      CQR_STATUS_FAILED);} /* end dasd_3990_erp_EOC *//* * DASD_3990_ERP_ENV_DATA * * DESCRIPTION *   Handles 24 byte 'Environmental-Data Present' error. * * PARAMETER *   erp                current erp_head * RETURN VALUES *   erp                new erp_head - pointer to new ERP */ccw_req_t *dasd_3990_erp_env_data (ccw_req_t *erp,			char      *sense){	dasd_device_t *device = erp->device;	erp->function = dasd_3990_erp_env_data;        DASD_MESSAGE (KERN_DEBUG, device, "%s",                      "Environmental data present");        dasd_3990_handle_env_data (erp,                                   sense);        /* don't retry on disabled interface */        if (sense[7] != 0x0F) {                erp = dasd_3990_erp_action_4 (erp,                                              sense);        } else {                erp = dasd_3990_erp_cleanup (erp,                                             CQR_STATUS_IN_IO);        }	return erp;} /* end dasd_3990_erp_env_data *//* * DASD_3990_ERP_NO_REC * * DESCRIPTION *   Handles 24 byte 'No Record Found' error. * * PARAMETER *   erp                already added default ERP *               * RETURN VALUES *   erp                new erp_head - pointer to new ERP */ccw_req_t *dasd_3990_erp_no_rec (ccw_req_t *default_erp,		      char      *sense){	dasd_device_t *device = default_erp->device;        DASD_MESSAGE (KERN_ERR, device, "%s",                      "No Record Found - Fatal error should "                      "have been handled within the interrupt handler");        return dasd_3990_erp_cleanup (default_erp,                                      CQR_STATUS_FAILED);} /* end dasd_3990_erp_no_rec *//* * DASD_3990_ERP_FILE_PROT * * DESCRIPTION *   Handles 24 byte 'File Protected' error. *   Note: Seek related recovery is not implemented because *         wee don't use the seek command yet. * * PARAMETER *   erp                current erp_head * RETURN VALUES *   erp                new erp_head - pointer to new ERP */ccw_req_t *dasd_3990_erp_file_prot (ccw_req_t *erp){	dasd_device_t *device = erp->device;        DASD_MESSAGE (KERN_ERR, device, "%s",                      "File Protected");        return dasd_3990_erp_cleanup (erp,                                      CQR_STATUS_FAILED);} /* end dasd_3990_erp_file_prot *//* * DASD_3990_ERP_INSPECT_24  * * DESCRIPTION *   Does a detailed inspection of the 24 byte sense data *   and sets up a related error recovery action.   * * PARAMETER *   sense              sense data of the actual error *   erp                pointer to the currently created default ERP * * RETURN VALUES *   erp                pointer to the (addtitional) ERP */ccw_req_t *dasd_3990_erp_inspect_24 (ccw_req_t *erp,                          char      *sense){	ccw_req_t *erp_filled = NULL;	/* Check sense for ....    */	/* 'Command Reject'        */	if ((erp_filled == NULL) &&	    (sense[0] & SNS0_CMD_REJECT)) {		erp_filled = dasd_3990_erp_com_rej (erp,						    sense);	}	/* 'Intervention Required' */	if ((erp_filled == NULL) &&	    (sense[0] & SNS0_INTERVENTION_REQ)) {		erp_filled = dasd_3990_erp_int_req (erp);	}	/* 'Bus Out Parity Check'  */	if ((erp_filled == NULL) &&	    (sense[0] & SNS0_BUS_OUT_CHECK)) {		erp_filled = dasd_3990_erp_bus_out (erp);	}	/* 'Equipment Check'       */	if ((erp_filled == NULL) &&	    (sense[0] & SNS0_EQUIPMENT_CHECK)) {		erp_filled = dasd_3990_erp_equip_check (erp,							sense);	}	/* 'Data Check'            */	if ((erp_filled == NULL) &&	    (sense[0] & SNS0_DATA_CHECK)) {		erp_filled = dasd_3990_erp_data_check (erp,						       sense);	}	/* 'Overrun'               */	if ((erp_filled == NULL) &&	    (sense[0] & SNS0_OVERRUN)) {		erp_filled = dasd_3990_erp_overrun (erp,						    sense);	}	/* 'Invalid Track Format'  */	if ((erp_filled == NULL) &&	    (sense[1] & SNS1_INV_TRACK_FORMAT)) {		erp_filled = dasd_3990_erp_inv_format (erp,						       sense);	}	/* 'End-of-Cylinder'       */	if ((erp_filled == NULL) &&	    (sense[1] & SNS1_EOC)) {		erp_filled = dasd_3990_erp_EOC (erp,						sense);	}	/* 'Environmental Data'    */	if ((erp_filled == NULL) &&	    (sense[2] & SNS2_ENV_DATA_PRESENT)) {		erp_filled = dasd_3990_erp_env_data (erp,						     sense);	}	/* 'No Record Found'       */	if ((erp_filled == NULL) &&	    (sense[1] & SNS1_NO_REC_FOUND)) {		erp_filled = dasd_3990_erp_no_rec (erp,						   sense);	}	/* 'File Protected'        */	if ((erp_filled == NULL) &&	    (sense[1] & SNS1_FILE_PROTECTED)) {		erp_filled = dasd_3990_erp_file_prot (erp);	}	/* other (unknown) error - do default ERP */	if (erp_filled == NULL) {		erp_filled = erp;		}	return erp_filled;} /* END dasd_3990_erp_inspect_24 *//* *****************************************************************************  * 32 byte sense ERP functions (only) *****************************************************************************  *//* * DASD_3990_ERPACTION_10_32  * * DESCRIPTION *   Handles 32 byte 'Action 10' of Single Program Action Codes. *   Just retry and if retry doesn't work, return with error. * * PARAMETER *   erp                current erp_head *   sense              current sense data  * RETURN VALUES *   erp                modified erp_head */ccw_req_t *dasd_3990_erp_action_10_32 (ccw_req_t *erp,                            char      *sense){	dasd_device_t *device = erp->device;        erp->retries  = 256;        erp->function = dasd_3990_erp_action_10_32;	DASD_MESSAGE (KERN_DEBUG, device, "%s",                      "Perform logging requested");	return erp;} /* end dasd_3990_erp_action_10_32 *//* * DASD_3990_ERP_ACTION_1B_32 * * DESCRIPTION *   Handles 32 byte 'Action 1B' of Single Program Action Codes. *   A write operation could not be finished because of an unexpected  *   condition. *   The already created 'default erp' is used to get the link to  *   the erp chain, but it can not be used for this recovery  *   action because it contains no DE/LO data space. * * PARAMETER *   default_erp        already added default erp. *   sense              current sense data  * * RETURN VALUES *   erp                new erp or  *                      default_erp in case of imprecise ending or error */ccw_req_t *dasd_3990_erp_action_1B_32 (ccw_req_t *default_erp,                            char      *sense){	dasd_device_t  *device = default_erp->device;        __u32          cpa     = 0;        ccw_req_t      *cqr;	ccw_req_t      *erp;	DE_eckd_data_t *DE_data;	char           *LO_data;   /* LO_eckd_data_t */        ccw1_t         *ccw;	DASD_MESSAGE (KERN_DEBUG, device, "%s",                      "Write not finished because of unexpected condition");                default_erp->function = dasd_3990_erp_action_1B_32;        /* determine the original cqr */        cqr = default_erp;         while (cqr->refers != NULL){                cqr = cqr->refers;        }        /* for imprecise ending just do default erp */        if (sense[1] & 0x01) {                DASD_MESSAGE (KERN_DEBUG, device, "%s",                              "Imprecise ending is set - just retry");              

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -