Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block

* 'for-linus' of git://git.kernel.dk/linux-2.6-block:
Commands needing to be retried require a complete re-initialization.

+19 -11
+11 -7
drivers/cdrom/cdrom.c
··· 2081 if (!q) 2082 return -ENXIO; 2083 2084 - rq = blk_get_request(q, READ, GFP_KERNEL); 2085 - if (!rq) 2086 - return -ENOMEM; 2087 - 2088 cdi->last_sense = 0; 2089 2090 while (nframes) { ··· 2092 2093 len = nr * CD_FRAMESIZE_RAW; 2094 2095 - ret = blk_rq_map_user(q, rq, NULL, ubuf, len, GFP_KERNEL); 2096 - if (ret) 2097 break; 2098 2099 rq->cmd[0] = GPCMD_READ_CD; 2100 rq->cmd[1] = 1 << 2; ··· 2128 2129 if (blk_rq_unmap_user(bio)) 2130 ret = -EFAULT; 2131 2132 if (ret) 2133 break; ··· 2138 ubuf += len; 2139 } 2140 2141 - blk_put_request(rq); 2142 return ret; 2143 } 2144
··· 2081 if (!q) 2082 return -ENXIO; 2083 2084 cdi->last_sense = 0; 2085 2086 while (nframes) { ··· 2096 2097 len = nr * CD_FRAMESIZE_RAW; 2098 2099 + rq = blk_get_request(q, READ, GFP_KERNEL); 2100 + if (!rq) { 2101 + ret = -ENOMEM; 2102 break; 2103 + } 2104 + 2105 + ret = blk_rq_map_user(q, rq, NULL, ubuf, len, GFP_KERNEL); 2106 + if (ret) { 2107 + blk_put_request(rq); 2108 + break; 2109 + } 2110 2111 rq->cmd[0] = GPCMD_READ_CD; 2112 rq->cmd[1] = 1 << 2; ··· 2124 2125 if (blk_rq_unmap_user(bio)) 2126 ret = -EFAULT; 2127 + blk_put_request(rq); 2128 2129 if (ret) 2130 break; ··· 2133 ubuf += len; 2134 } 2135 2136 return ret; 2137 } 2138
+8 -4
drivers/scsi/device_handler/scsi_dh_hp_sw.c
··· 107 struct request *req; 108 int ret; 109 110 req = blk_get_request(sdev->request_queue, WRITE, GFP_NOIO); 111 if (!req) 112 return SCSI_DH_RES_TEMP_UNAVAIL; ··· 122 memset(req->sense, 0, SCSI_SENSE_BUFFERSIZE); 123 req->sense_len = 0; 124 125 - retry: 126 ret = blk_execute_rq(req->q, NULL, req, 1); 127 if (ret == -EIO) { 128 if (req->sense_len > 0) { ··· 136 h->path_state = HP_SW_PATH_ACTIVE; 137 ret = SCSI_DH_OK; 138 } 139 - if (ret == SCSI_DH_IMM_RETRY) 140 goto retry; 141 if (ret == SCSI_DH_DEV_OFFLINED) { 142 h->path_state = HP_SW_PATH_PASSIVE; 143 ret = SCSI_DH_OK; ··· 202 struct request *req; 203 int ret, retry; 204 205 req = blk_get_request(sdev->request_queue, WRITE, GFP_NOIO); 206 if (!req) 207 return SCSI_DH_RES_TEMP_UNAVAIL; ··· 219 req->sense_len = 0; 220 retry = h->retries; 221 222 - retry: 223 ret = blk_execute_rq(req->q, NULL, req, 1); 224 if (ret == -EIO) { 225 if (req->sense_len > 0) { ··· 233 ret = SCSI_DH_OK; 234 235 if (ret == SCSI_DH_RETRY) { 236 - if (--retry) 237 goto retry; 238 ret = SCSI_DH_IO; 239 } 240
··· 107 struct request *req; 108 int ret; 109 110 + retry: 111 req = blk_get_request(sdev->request_queue, WRITE, GFP_NOIO); 112 if (!req) 113 return SCSI_DH_RES_TEMP_UNAVAIL; ··· 121 memset(req->sense, 0, SCSI_SENSE_BUFFERSIZE); 122 req->sense_len = 0; 123 124 ret = blk_execute_rq(req->q, NULL, req, 1); 125 if (ret == -EIO) { 126 if (req->sense_len > 0) { ··· 136 h->path_state = HP_SW_PATH_ACTIVE; 137 ret = SCSI_DH_OK; 138 } 139 + if (ret == SCSI_DH_IMM_RETRY) { 140 + blk_put_request(req); 141 goto retry; 142 + } 143 if (ret == SCSI_DH_DEV_OFFLINED) { 144 h->path_state = HP_SW_PATH_PASSIVE; 145 ret = SCSI_DH_OK; ··· 200 struct request *req; 201 int ret, retry; 202 203 + retry: 204 req = blk_get_request(sdev->request_queue, WRITE, GFP_NOIO); 205 if (!req) 206 return SCSI_DH_RES_TEMP_UNAVAIL; ··· 216 req->sense_len = 0; 217 retry = h->retries; 218 219 ret = blk_execute_rq(req->q, NULL, req, 1); 220 if (ret == -EIO) { 221 if (req->sense_len > 0) { ··· 231 ret = SCSI_DH_OK; 232 233 if (ret == SCSI_DH_RETRY) { 234 + if (--retry) { 235 + blk_put_request(req); 236 goto retry; 237 + } 238 ret = SCSI_DH_IO; 239 } 240