Sophie

Sophie

distrib > CentOS > 5 > x86_64 > by-pkgid > ea32411352494358b8d75a78402a4713 > files > 3971

kernel-2.6.18-238.19.1.el5.centos.plus.src.rpm

From: Hendrik Brueckner <brueckner@redhat.com>
Date: Tue, 31 Aug 2010 09:23:53 -0400
Subject: [s390] dasd: let recovery cqr get flags from failed cqr
Message-id: <20100831092351.GA3257@redhat.com>
Patchwork-id: 27960
O-Subject: [RHEL5.6 PATCH 1/1] [s390x] dasd: let recovery cqr inherit flags
	from failed cqr
Bugzilla: 628838
RH-Acked-by: Pete Zaitcev <zaitcev@redhat.com>

Description
-----------
Recovery requests behave not as expected, e.g. failfast
is not working.

The usual way to recover a failed DASD ECKD request (cqr)
is to create a new request with an appropriate recovery
CCW program. Certain features, e.g. failfast, can be
enabled per request and are stored in the requests flags.
The problem is, that these flags were not copied from the
failed to the recovery request.

Copy cqr flags when creating a recovery cqr.

Bugzilla
--------
BZ 628838
https://bugzilla.redhat.com/show_bug.cgi?id=628838

Upstream status of the patch
----------------------------
The patch has been queued and will be sent out for inclusion
into the current kernel -rc release.

Test status
-----------
The patch has been tested and fixes the problem.
The fix has been verified by the IBM test department.


diff --git a/drivers/s390/block/dasd_3990_erp.c b/drivers/s390/block/dasd_3990_erp.c
index 9fcc827..c5dca0c 100644
--- a/drivers/s390/block/dasd_3990_erp.c
+++ b/drivers/s390/block/dasd_3990_erp.c
@@ -370,6 +370,7 @@ dasd_3990_erp_DCTL(struct dasd_ccw_req * erp, char modifier)
 	ccw->cmd_code = CCW_CMD_DCTL;
 	ccw->count = 4;
 	ccw->cda = (__u32)(addr_t) DCTL_data;
+	dctl_cqr->flags = erp->flags;
 	dctl_cqr->function = dasd_3990_erp_DCTL;
 	dctl_cqr->refers = erp;
 	dctl_cqr->device = erp->device;
@@ -1769,6 +1770,7 @@ dasd_3990_erp_action_1B_32(struct dasd_ccw_req * default_erp, char *sense)
 	ccw->cda = cpa;
 
 	/* fill erp related fields */
+	erp->flags = default_erp->flags;
 	erp->function = dasd_3990_erp_action_1B_32;
 	erp->refers = default_erp->refers;
 	erp->device = device;
@@ -2383,6 +2385,7 @@ dasd_3990_erp_add_erp(struct dasd_ccw_req * cqr)
 	ccw++;
 	ccw->cmd_code = CCW_CMD_TIC;
 	ccw->cda      = (long)(cqr->cpaddr);
+	erp->flags    = cqr->flags;
 	erp->function = dasd_3990_erp_add_erp;
 	erp->refers   = cqr;
 	erp->device   = cqr->device;