[dm-devel] Re: [PATCH] Always pass result and sense on request completion

Hannes Reinecke hare at suse.de
Thu Dec 10 09:49:11 UTC 2009


Hi James,

would you mind commenting on this patch?
We really need this if we ever want to be able to do proper error code
handling from multipath.

Hannes Reinecke wrote:
> Currently we're passing the SCSI result and sense
> code only for BLK_PC commands. However, some
> instances up the stack might be interested
> in them, too. So we can as well pass the
> result and a possible sense code with every
> request.
> 
> Signed-off-by: Hannes Reinecke <hare at suse.de>
> ---
>  drivers/scsi/scsi_lib.c |   28 ++++++++++++----------------
>  1 files changed, 12 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
> index cc0a06f..10aa084 100644
> --- a/drivers/scsi/scsi_lib.c
> +++ b/drivers/scsi/scsi_lib.c
> @@ -722,23 +722,19 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
>  			sense_deferred = scsi_sense_is_deferred(&sshdr);
>  	}
>  
> -	if (blk_pc_request(req)) { /* SG_IO ioctl from block level */
> -		req->errors = result;
> -		if (result) {
> -			if (sense_valid && req->sense) {
> -				/*
> -				 * SG_IO wants current and deferred errors
> -				 */
> -				int len = 8 + cmd->sense_buffer[7];
> +	req->errors = result;
> +	if (sense_valid && req->sense) {
> +		int len = 8 + cmd->sense_buffer[7];
> +
> +		if (len > SCSI_SENSE_BUFFERSIZE)
> +			len = SCSI_SENSE_BUFFERSIZE;
> +		memcpy(req->sense, cmd->sense_buffer,  len);
> +		req->sense_len = len;
> +	}
>  
> -				if (len > SCSI_SENSE_BUFFERSIZE)
> -					len = SCSI_SENSE_BUFFERSIZE;
> -				memcpy(req->sense, cmd->sense_buffer,  len);
> -				req->sense_len = len;
> -			}
> -			if (!sense_deferred)
> -				error = -EIO;
> -		}
> +	if (blk_pc_request(req)) { /* SG_IO ioctl from block level */
> +		if ((result) && (!sense_deferred))
> +			error = -EIO;
>  
>  		req->resid_len = scsi_get_resid(cmd);
>  

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		      zSeries & Storage
hare at suse.de			      +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Markus Rex, HRB 16746 (AG Nürnberg)




More information about the dm-devel mailing list