diff options
Diffstat (limited to 'drivers/usb/storage/uas.c')
| -rw-r--r-- | drivers/usb/storage/uas.c | 28 | 
1 files changed, 13 insertions, 15 deletions
diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c index 71ace274761f..08953f0d4532 100644 --- a/drivers/usb/storage/uas.c +++ b/drivers/usb/storage/uas.c @@ -533,7 +533,7 @@ static struct urb *uas_alloc_cmd_urb(struct uas_dev_info *devinfo, gfp_t gfp,   * daft to me.   */ -static struct urb *uas_submit_sense_urb(struct scsi_cmnd *cmnd, gfp_t gfp) +static int uas_submit_sense_urb(struct scsi_cmnd *cmnd, gfp_t gfp)  {  	struct uas_dev_info *devinfo = cmnd->device->hostdata;  	struct urb *urb; @@ -541,30 +541,28 @@ static struct urb *uas_submit_sense_urb(struct scsi_cmnd *cmnd, gfp_t gfp)  	urb = uas_alloc_sense_urb(devinfo, gfp, cmnd);  	if (!urb) -		return NULL; +		return -ENOMEM;  	usb_anchor_urb(urb, &devinfo->sense_urbs);  	err = usb_submit_urb(urb, gfp);  	if (err) {  		usb_unanchor_urb(urb);  		uas_log_cmd_state(cmnd, "sense submit err", err);  		usb_free_urb(urb); -		return NULL;  	} -	return urb; +	return err;  }  static int uas_submit_urbs(struct scsi_cmnd *cmnd,  			   struct uas_dev_info *devinfo)  {  	struct uas_cmd_info *cmdinfo = scsi_cmd_priv(cmnd); -	struct urb *urb;  	int err;  	lockdep_assert_held(&devinfo->lock);  	if (cmdinfo->state & SUBMIT_STATUS_URB) { -		urb = uas_submit_sense_urb(cmnd, GFP_ATOMIC); -		if (!urb) -			return SCSI_MLQUEUE_DEVICE_BUSY; +		err = uas_submit_sense_urb(cmnd, GFP_ATOMIC); +		if (err) +			return err;  		cmdinfo->state &= ~SUBMIT_STATUS_URB;  	} @@ -572,7 +570,7 @@ static int uas_submit_urbs(struct scsi_cmnd *cmnd,  		cmdinfo->data_in_urb = uas_alloc_data_urb(devinfo, GFP_ATOMIC,  							cmnd, DMA_FROM_DEVICE);  		if (!cmdinfo->data_in_urb) -			return SCSI_MLQUEUE_DEVICE_BUSY; +			return -ENOMEM;  		cmdinfo->state &= ~ALLOC_DATA_IN_URB;  	} @@ -582,7 +580,7 @@ static int uas_submit_urbs(struct scsi_cmnd *cmnd,  		if (err) {  			usb_unanchor_urb(cmdinfo->data_in_urb);  			uas_log_cmd_state(cmnd, "data in submit err", err); -			return SCSI_MLQUEUE_DEVICE_BUSY; +			return err;  		}  		cmdinfo->state &= ~SUBMIT_DATA_IN_URB;  		cmdinfo->state |= DATA_IN_URB_INFLIGHT; @@ -592,7 +590,7 @@ static int uas_submit_urbs(struct scsi_cmnd *cmnd,  		cmdinfo->data_out_urb = uas_alloc_data_urb(devinfo, GFP_ATOMIC,  							cmnd, DMA_TO_DEVICE);  		if (!cmdinfo->data_out_urb) -			return SCSI_MLQUEUE_DEVICE_BUSY; +			return -ENOMEM;  		cmdinfo->state &= ~ALLOC_DATA_OUT_URB;  	} @@ -602,7 +600,7 @@ static int uas_submit_urbs(struct scsi_cmnd *cmnd,  		if (err) {  			usb_unanchor_urb(cmdinfo->data_out_urb);  			uas_log_cmd_state(cmnd, "data out submit err", err); -			return SCSI_MLQUEUE_DEVICE_BUSY; +			return err;  		}  		cmdinfo->state &= ~SUBMIT_DATA_OUT_URB;  		cmdinfo->state |= DATA_OUT_URB_INFLIGHT; @@ -611,7 +609,7 @@ static int uas_submit_urbs(struct scsi_cmnd *cmnd,  	if (cmdinfo->state & ALLOC_CMD_URB) {  		cmdinfo->cmd_urb = uas_alloc_cmd_urb(devinfo, GFP_ATOMIC, cmnd);  		if (!cmdinfo->cmd_urb) -			return SCSI_MLQUEUE_DEVICE_BUSY; +			return -ENOMEM;  		cmdinfo->state &= ~ALLOC_CMD_URB;  	} @@ -621,7 +619,7 @@ static int uas_submit_urbs(struct scsi_cmnd *cmnd,  		if (err) {  			usb_unanchor_urb(cmdinfo->cmd_urb);  			uas_log_cmd_state(cmnd, "cmd submit err", err); -			return SCSI_MLQUEUE_DEVICE_BUSY; +			return err;  		}  		cmdinfo->cmd_urb = NULL;  		cmdinfo->state &= ~SUBMIT_CMD_URB; @@ -698,7 +696,7 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd)  	 * of queueing, no matter how fatal the error  	 */  	if (err == -ENODEV) { -		set_host_byte(cmnd, DID_ERROR); +		set_host_byte(cmnd, DID_NO_CONNECT);  		scsi_done(cmnd);  		goto zombie;  	}  |