Commit 28424d3a503d43482a5537e556f7b7652d8e56d8
Committed by
James Bottomley
1 parent
dff6de73f9
Exists in
master
and in
39 other branches
[SCSI] NCR5380: Use scsi_eh API for REQUEST_SENSE invocation
- Use new scsi_eh_prep/restor_cmnd() for synchronous REQUEST_SENSE invocation. Signed-off-by: Boaz Harrosh <bharrosh@panasas.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Showing 4 changed files with 31 additions and 40 deletions Side-by-side Diff
drivers/scsi/NCR5380.c
... | ... | @@ -1542,9 +1542,7 @@ |
1542 | 1542 | hostdata->connected = cmd; |
1543 | 1543 | hostdata->busy[cmd->device->id] |= (1 << cmd->device->lun); |
1544 | 1544 | |
1545 | - if (cmd->SCp.ptr != (char *)cmd->sense_buffer) { | |
1546 | - initialize_SCp(cmd); | |
1547 | - } | |
1545 | + initialize_SCp(cmd); | |
1548 | 1546 | |
1549 | 1547 | return 0; |
1550 | 1548 | |
1551 | 1549 | |
1552 | 1550 | |
... | ... | @@ -2280,19 +2278,16 @@ |
2280 | 2278 | cmd->result = (cmd->result & 0x00ffff) | (DID_ERROR << 16); |
2281 | 2279 | |
2282 | 2280 | #ifdef AUTOSENSE |
2281 | + if ((cmd->cmnd[0] == REQUEST_SENSE) && | |
2282 | + hostdata->ses.cmd_len) { | |
2283 | + scsi_eh_restore_cmnd(cmd, &hostdata->ses); | |
2284 | + hostdata->ses.cmd_len = 0 ; | |
2285 | + } | |
2286 | + | |
2283 | 2287 | if ((cmd->cmnd[0] != REQUEST_SENSE) && (status_byte(cmd->SCp.Status) == CHECK_CONDITION)) { |
2284 | - dprintk(NDEBUG_AUTOSENSE, ("scsi%d : performing request sense\n", instance->host_no)); | |
2285 | - cmd->cmnd[0] = REQUEST_SENSE; | |
2286 | - cmd->cmnd[1] &= 0xe0; | |
2287 | - cmd->cmnd[2] = 0; | |
2288 | - cmd->cmnd[3] = 0; | |
2289 | - cmd->cmnd[4] = sizeof(cmd->sense_buffer); | |
2290 | - cmd->cmnd[5] = 0; | |
2288 | + scsi_eh_prep_cmnd(cmd, &hostdata->ses, NULL, 0, ~0); | |
2291 | 2289 | |
2292 | - cmd->SCp.buffer = NULL; | |
2293 | - cmd->SCp.buffers_residual = 0; | |
2294 | - cmd->SCp.ptr = (char *) cmd->sense_buffer; | |
2295 | - cmd->SCp.this_residual = sizeof(cmd->sense_buffer); | |
2290 | + dprintk(NDEBUG_AUTOSENSE, ("scsi%d : performing request sense\n", instance->host_no)); | |
2296 | 2291 | |
2297 | 2292 | LIST(cmd, hostdata->issue_queue); |
2298 | 2293 | cmd->host_scribble = (unsigned char *) |
drivers/scsi/NCR5380.h
... | ... | @@ -30,6 +30,10 @@ |
30 | 30 | |
31 | 31 | #include <linux/interrupt.h> |
32 | 32 | |
33 | +#ifdef AUTOSENSE | |
34 | +#include <scsi/scsi_eh.h> | |
35 | +#endif | |
36 | + | |
33 | 37 | #define NCR5380_PUBLIC_RELEASE 7 |
34 | 38 | #define NCR53C400_PUBLIC_RELEASE 2 |
35 | 39 | |
... | ... | @@ -280,6 +284,9 @@ |
280 | 284 | unsigned long bytes_write[8]; /* bytes written */ |
281 | 285 | unsigned pendingr; |
282 | 286 | unsigned pendingw; |
287 | +#endif | |
288 | +#ifdef AUTOSENSE | |
289 | + struct scsi_eh_save ses; | |
283 | 290 | #endif |
284 | 291 | }; |
285 | 292 |
drivers/scsi/atari_NCR5380.c
... | ... | @@ -2235,24 +2235,17 @@ |
2235 | 2235 | cmd->result = (cmd->result & 0x00ffff) | (DID_ERROR << 16); |
2236 | 2236 | |
2237 | 2237 | #ifdef AUTOSENSE |
2238 | + if ((cmd->cmnd[0] == REQUEST_SENSE) && | |
2239 | + hostdata->ses.cmd_len) { | |
2240 | + scsi_eh_restore_cmnd(cmd, &hostdata->ses); | |
2241 | + hostdata->ses.cmd_len = 0 ; | |
2242 | + } | |
2243 | + | |
2238 | 2244 | if ((cmd->cmnd[0] != REQUEST_SENSE) && |
2239 | 2245 | (status_byte(cmd->SCp.Status) == CHECK_CONDITION)) { |
2240 | - ASEN_PRINTK("scsi%d: performing request sense\n", HOSTNO); | |
2241 | - cmd->cmnd[0] = REQUEST_SENSE; | |
2242 | - cmd->cmnd[1] &= 0xe0; | |
2243 | - cmd->cmnd[2] = 0; | |
2244 | - cmd->cmnd[3] = 0; | |
2245 | - cmd->cmnd[4] = sizeof(cmd->sense_buffer); | |
2246 | - cmd->cmnd[5] = 0; | |
2247 | - cmd->cmd_len = COMMAND_SIZE(cmd->cmnd[0]); | |
2246 | + scsi_eh_prep_cmnd(cmd, &hostdata->ses, NULL, 0, ~0); | |
2248 | 2247 | |
2249 | - cmd->use_sg = 0; | |
2250 | - /* this is initialized from initialize_SCp | |
2251 | - cmd->SCp.buffer = NULL; | |
2252 | - cmd->SCp.buffers_residual = 0; | |
2253 | - */ | |
2254 | - cmd->request_buffer = (char *) cmd->sense_buffer; | |
2255 | - cmd->request_bufflen = sizeof(cmd->sense_buffer); | |
2248 | + ASEN_PRINTK("scsi%d: performing request sense\n", HOSTNO); | |
2256 | 2249 | |
2257 | 2250 | local_irq_save(flags); |
2258 | 2251 | LIST(cmd,hostdata->issue_queue); |
drivers/scsi/sun3_NCR5380.c
... | ... | @@ -2254,25 +2254,21 @@ |
2254 | 2254 | cmd->result = (cmd->result & 0x00ffff) | (DID_ERROR << 16); |
2255 | 2255 | |
2256 | 2256 | #ifdef AUTOSENSE |
2257 | + if ((cmd->cmnd[0] == REQUEST_SENSE) && | |
2258 | + hostdata->ses.cmd_len) { | |
2259 | + scsi_eh_restore_cmnd(cmd, &hostdata->ses); | |
2260 | + hostdata->ses.cmd_len = 0 ; | |
2261 | + } | |
2262 | + | |
2257 | 2263 | if ((cmd->cmnd[0] != REQUEST_SENSE) && |
2258 | 2264 | (status_byte(cmd->SCp.Status) == CHECK_CONDITION)) { |
2265 | + scsi_eh_prep_cmnd(cmd, &hostdata->ses, NULL, 0, ~0); | |
2259 | 2266 | ASEN_PRINTK("scsi%d: performing request sense\n", |
2260 | 2267 | HOSTNO); |
2261 | - cmd->cmnd[0] = REQUEST_SENSE; | |
2262 | - cmd->cmnd[1] &= 0xe0; | |
2263 | - cmd->cmnd[2] = 0; | |
2264 | - cmd->cmnd[3] = 0; | |
2265 | - cmd->cmnd[4] = sizeof(cmd->sense_buffer); | |
2266 | - cmd->cmnd[5] = 0; | |
2267 | - cmd->cmd_len = COMMAND_SIZE(cmd->cmnd[0]); | |
2268 | - | |
2269 | - cmd->use_sg = 0; | |
2270 | 2268 | /* this is initialized from initialize_SCp |
2271 | 2269 | cmd->SCp.buffer = NULL; |
2272 | 2270 | cmd->SCp.buffers_residual = 0; |
2273 | 2271 | */ |
2274 | - cmd->request_buffer = (char *) cmd->sense_buffer; | |
2275 | - cmd->request_bufflen = sizeof(cmd->sense_buffer); | |
2276 | 2272 | |
2277 | 2273 | local_irq_save(flags); |
2278 | 2274 | LIST(cmd,hostdata->issue_queue); |