diff options
-rw-r--r-- | drivers/scsi/fdomain.c | 42 |
1 files changed, 20 insertions, 22 deletions
diff --git a/drivers/scsi/fdomain.c b/drivers/scsi/fdomain.c index 5d4ea6f77953..0d1661a8116b 100644 --- a/drivers/scsi/fdomain.c +++ b/drivers/scsi/fdomain.c | |||
@@ -1345,16 +1345,15 @@ static irqreturn_t do_fdomain_16x0_intr(int irq, void *dev_id) | |||
1345 | 1345 | ||
1346 | #if ERRORS_ONLY | 1346 | #if ERRORS_ONLY |
1347 | if (current_SC->cmnd[0] == REQUEST_SENSE && !current_SC->SCp.Status) { | 1347 | if (current_SC->cmnd[0] == REQUEST_SENSE && !current_SC->SCp.Status) { |
1348 | if ((unsigned char)(*((char *)current_SC->request_buffer+2)) & 0x0f) { | 1348 | char *buf = scsi_sglist(current_SC); |
1349 | if ((unsigned char)(*(buf + 2)) & 0x0f) { | ||
1349 | unsigned char key; | 1350 | unsigned char key; |
1350 | unsigned char code; | 1351 | unsigned char code; |
1351 | unsigned char qualifier; | 1352 | unsigned char qualifier; |
1352 | 1353 | ||
1353 | key = (unsigned char)(*((char *)current_SC->request_buffer + 2)) | 1354 | key = (unsigned char)(*(buf + 2)) & 0x0f; |
1354 | & 0x0f; | 1355 | code = (unsigned char)(*(buf + 12)); |
1355 | code = (unsigned char)(*((char *)current_SC->request_buffer + 12)); | 1356 | qualifier = (unsigned char)(*(buf + 13)); |
1356 | qualifier = (unsigned char)(*((char *)current_SC->request_buffer | ||
1357 | + 13)); | ||
1358 | 1357 | ||
1359 | if (key != UNIT_ATTENTION | 1358 | if (key != UNIT_ATTENTION |
1360 | && !(key == NOT_READY | 1359 | && !(key == NOT_READY |
@@ -1405,8 +1404,8 @@ static int fdomain_16x0_queue(struct scsi_cmnd *SCpnt, | |||
1405 | printk( "queue: target = %d cmnd = 0x%02x pieces = %d size = %u\n", | 1404 | printk( "queue: target = %d cmnd = 0x%02x pieces = %d size = %u\n", |
1406 | SCpnt->target, | 1405 | SCpnt->target, |
1407 | *(unsigned char *)SCpnt->cmnd, | 1406 | *(unsigned char *)SCpnt->cmnd, |
1408 | SCpnt->use_sg, | 1407 | scsi_sg_count(SCpnt), |
1409 | SCpnt->request_bufflen ); | 1408 | scsi_bufflen(SCpnt)); |
1410 | #endif | 1409 | #endif |
1411 | 1410 | ||
1412 | fdomain_make_bus_idle(); | 1411 | fdomain_make_bus_idle(); |
@@ -1416,20 +1415,19 @@ static int fdomain_16x0_queue(struct scsi_cmnd *SCpnt, | |||
1416 | 1415 | ||
1417 | /* Initialize static data */ | 1416 | /* Initialize static data */ |
1418 | 1417 | ||
1419 | if (current_SC->use_sg) { | 1418 | if (scsi_sg_count(current_SC)) { |
1420 | current_SC->SCp.buffer = | 1419 | current_SC->SCp.buffer = scsi_sglist(current_SC); |
1421 | (struct scatterlist *)current_SC->request_buffer; | 1420 | current_SC->SCp.ptr = page_address(current_SC->SCp.buffer->page) |
1422 | current_SC->SCp.ptr = page_address(current_SC->SCp.buffer->page) + current_SC->SCp.buffer->offset; | 1421 | + current_SC->SCp.buffer->offset; |
1423 | current_SC->SCp.this_residual = current_SC->SCp.buffer->length; | 1422 | current_SC->SCp.this_residual = current_SC->SCp.buffer->length; |
1424 | current_SC->SCp.buffers_residual = current_SC->use_sg - 1; | 1423 | current_SC->SCp.buffers_residual = scsi_sg_count(current_SC) - 1; |
1425 | } else { | 1424 | } else { |
1426 | current_SC->SCp.ptr = (char *)current_SC->request_buffer; | 1425 | current_SC->SCp.ptr = 0; |
1427 | current_SC->SCp.this_residual = current_SC->request_bufflen; | 1426 | current_SC->SCp.this_residual = 0; |
1428 | current_SC->SCp.buffer = NULL; | 1427 | current_SC->SCp.buffer = NULL; |
1429 | current_SC->SCp.buffers_residual = 0; | 1428 | current_SC->SCp.buffers_residual = 0; |
1430 | } | 1429 | } |
1431 | 1430 | ||
1432 | |||
1433 | current_SC->SCp.Status = 0; | 1431 | current_SC->SCp.Status = 0; |
1434 | current_SC->SCp.Message = 0; | 1432 | current_SC->SCp.Message = 0; |
1435 | current_SC->SCp.have_data_in = 0; | 1433 | current_SC->SCp.have_data_in = 0; |
@@ -1472,8 +1470,8 @@ static void print_info(struct scsi_cmnd *SCpnt) | |||
1472 | SCpnt->SCp.phase, | 1470 | SCpnt->SCp.phase, |
1473 | SCpnt->device->id, | 1471 | SCpnt->device->id, |
1474 | *(unsigned char *)SCpnt->cmnd, | 1472 | *(unsigned char *)SCpnt->cmnd, |
1475 | SCpnt->use_sg, | 1473 | scsi_sg_count(SCpnt), |
1476 | SCpnt->request_bufflen ); | 1474 | scsi_bufflen(SCpnt)); |
1477 | printk( "sent_command = %d, have_data_in = %d, timeout = %d\n", | 1475 | printk( "sent_command = %d, have_data_in = %d, timeout = %d\n", |
1478 | SCpnt->SCp.sent_command, | 1476 | SCpnt->SCp.sent_command, |
1479 | SCpnt->SCp.have_data_in, | 1477 | SCpnt->SCp.have_data_in, |