diff options
Diffstat (limited to 'drivers/scsi/scsi_lib.c')
| -rw-r--r-- | drivers/scsi/scsi_lib.c | 16 | 
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index c6642423cc6..1646fe7cbd4 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -773,8 +773,14 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)  	 * we already took a copy of the original into rq->errors which  	 * is what gets returned to the user  	 */ -	if (sense_valid && sshdr.sense_key == RECOVERED_ERROR) { -		if (!(req->cmd_flags & REQ_QUIET)) +	if (sense_valid && (sshdr.sense_key == RECOVERED_ERROR)) { +		/* if ATA PASS-THROUGH INFORMATION AVAILABLE skip +		 * print since caller wants ATA registers. Only occurs on +		 * SCSI ATA PASS_THROUGH commands when CK_COND=1 +		 */ +		if ((sshdr.asc == 0x0) && (sshdr.ascq == 0x1d)) +			; +		else if (!(req->cmd_flags & REQ_QUIET))  			scsi_print_sense("", cmd);  		result = 0;  		/* BLOCK_PC may have set error */ @@ -1624,10 +1630,10 @@ struct request_queue *__scsi_alloc_queue(struct Scsi_Host *shost,  	/*  	 * this limit is imposed by hardware restrictions  	 */ -	blk_queue_max_hw_segments(q, shost->sg_tablesize); -	blk_queue_max_phys_segments(q, SCSI_MAX_SG_CHAIN_SEGMENTS); +	blk_queue_max_segments(q, min_t(unsigned short, shost->sg_tablesize, +					SCSI_MAX_SG_CHAIN_SEGMENTS)); -	blk_queue_max_sectors(q, shost->max_sectors); +	blk_queue_max_hw_sectors(q, shost->max_sectors);  	blk_queue_bounce_limit(q, scsi_calculate_bounce_limit(shost));  	blk_queue_segment_boundary(q, shost->dma_boundary);  	dma_set_seg_boundary(dev, shost->dma_boundary);  |