Merge branch 'for-2.6.31' of git://git.kernel.dk/linux-2.6-block
* 'for-2.6.31' of git://git.kernel.dk/linux-2.6-block: (153 commits) block: add request clone interface (v2) floppy: fix hibernation ramdisk: remove long-deprecated "ramdisk=" boot-time parameter fs/bio.c: add missing __user annotation block: prevent possible io_context->refcount overflow Add serial number support for virtio_blk, V4a block: Add missing bounce_pfn stacking and fix comments Revert "block: Fix bounce limit setting in DM" cciss: decode unit attention in SCSI error handling code cciss: Remove no longer needed sendcmd reject processing code cciss: change SCSI error handling routines to work with interrupts enabled. cciss: separate error processing and command retrying code in sendcmd_withirq_core() cciss: factor out fix target status processing code from sendcmd functions cciss: simplify interface of sendcmd() and sendcmd_withirq() cciss: factor out core of sendcmd_withirq() for use by SCSI error handling code cciss: Use schedule_timeout_uninterruptible in SCSI error handling code block: needs to set the residual length of a bidi request Revert "block: implement blkdev_readpages" block: Fix bounce limit setting in DM Removed reference to non-existing file Documentation/PCI/PCI-DMA-mapping.txt ... Manually fix conflicts with tracing updates in: block/blk-sysfs.c drivers/ide/ide-atapi.c drivers/ide/ide-cd.c drivers/ide/ide-floppy.c drivers/ide/ide-tape.c include/trace/events/block.h kernel/trace/blktrace.c
This commit is contained in:
@ -246,6 +246,7 @@ EXPORT_SYMBOL_GPL(ide_queue_sense_rq);
|
||||
*/
|
||||
void ide_retry_pc(ide_drive_t *drive)
|
||||
{
|
||||
struct request *failed_rq = drive->hwif->rq;
|
||||
struct request *sense_rq = &drive->sense_rq;
|
||||
struct ide_atapi_pc *pc = &drive->request_sense_pc;
|
||||
|
||||
@ -255,13 +256,22 @@ void ide_retry_pc(ide_drive_t *drive)
|
||||
ide_init_pc(pc);
|
||||
memcpy(pc->c, sense_rq->cmd, 12);
|
||||
pc->buf = bio_data(sense_rq->bio); /* pointer to mapped address */
|
||||
pc->req_xfer = sense_rq->data_len;
|
||||
pc->req_xfer = blk_rq_bytes(sense_rq);
|
||||
|
||||
if (drive->media == ide_tape)
|
||||
set_bit(IDE_AFLAG_IGNORE_DSC, &drive->atapi_flags);
|
||||
|
||||
if (ide_queue_sense_rq(drive, pc))
|
||||
ide_complete_rq(drive, -EIO, blk_rq_bytes(drive->hwif->rq));
|
||||
/*
|
||||
* Push back the failed request and put request sense on top
|
||||
* of it. The failed command will be retried after sense data
|
||||
* is acquired.
|
||||
*/
|
||||
blk_requeue_request(failed_rq->q, failed_rq);
|
||||
drive->hwif->rq = NULL;
|
||||
if (ide_queue_sense_rq(drive, pc)) {
|
||||
blk_start_request(failed_rq);
|
||||
ide_complete_rq(drive, -EIO, blk_rq_bytes(failed_rq));
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ide_retry_pc);
|
||||
|
||||
@ -303,7 +313,7 @@ int ide_cd_get_xferlen(struct request *rq)
|
||||
return 32768;
|
||||
else if (blk_sense_request(rq) || blk_pc_request(rq) ||
|
||||
rq->cmd_type == REQ_TYPE_ATA_PC)
|
||||
return rq->data_len;
|
||||
return blk_rq_bytes(rq);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
@ -367,7 +377,6 @@ static ide_startstop_t ide_pc_intr(ide_drive_t *drive)
|
||||
/* No more interrupts */
|
||||
if ((stat & ATA_DRQ) == 0) {
|
||||
int uptodate, error;
|
||||
unsigned int done;
|
||||
|
||||
debug_log("Packet command completed, %d bytes transferred\n",
|
||||
pc->xferred);
|
||||
@ -431,7 +440,7 @@ static ide_startstop_t ide_pc_intr(ide_drive_t *drive)
|
||||
error = uptodate ? 0 : -EIO;
|
||||
}
|
||||
|
||||
ide_complete_rq(drive, error, done);
|
||||
ide_complete_rq(drive, error, blk_rq_bytes(rq));
|
||||
return ide_stopped;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user