Commit 28424d3a503d43482a5537e556f7b7652d8e56d8

Authored by Boaz Harrosh
Committed by James Bottomley
1 parent dff6de73f9

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