Re: [PATCH 18/24] st: return error code in st_scsi_execute()

2019-10-22 Thread Bart Van Assche
On 2019-10-21 23:28, Hannes Reinecke wrote:
> On 10/21/19 6:41 PM, Bart Van Assche wrote:
>> On 10/21/19 2:53 AM, Hannes Reinecke wrote:
>>> We should return the actual error code in st_scsi_execute(),
>>> avoiding the need to use DRIVER_ERROR.
>>>
>>> Signed-off-by: Hannes Reinecke 
>>> ---
>>>   drivers/scsi/st.c | 4 ++--
>>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
>>> index e3266a64a477..5f38369cc62f 100644
>>> --- a/drivers/scsi/st.c
>>> +++ b/drivers/scsi/st.c
>>> @@ -549,7 +549,7 @@ static int st_scsi_execute(struct st_request
>>> *SRpnt, const unsigned char *cmd,
>>>   data_direction == DMA_TO_DEVICE ?
>>>   REQ_OP_SCSI_OUT : REQ_OP_SCSI_IN, 0);
>>>   if (IS_ERR(req))
>>> -    return DRIVER_ERROR << 24;
>>> +    return PTR_ERR(req);
>>>   rq = scsi_req(req);
>>>   req->rq_flags |= RQF_QUIET;
>>>   @@ -560,7 +560,7 @@ static int st_scsi_execute(struct st_request
>>> *SRpnt, const unsigned char *cmd,
>>>     GFP_KERNEL);
>>>   if (err) {
>>>   blk_put_request(req);
>>> -    return DRIVER_ERROR << 24;
>>> +    return err;
>>>   }
>>>   }
>>
>> The patch description looks confusing to me. Is it perhaps because the
>> caller compares the st_scsi_execute() return value with zero and doesn't
>> use the return value in any other way that it is fine to return an
>> integer error code instead of a SCSI status?
>>
> Yes. The caller does:
> 
>   ret = st_scsi_execute(SRpnt, cmd, direction, NULL, bytes, timeout,
> retries);
>   if (ret) {
>   /* could not allocate the buffer or request was too large */
>   (STp->buffer)->syscall_result = (-EBUSY);
>   (STp->buffer)->last_SRpnt = NULL;
> 
> So it's immaterial _what_ we return here as long as it's non-zero.

Please make this clear in the patch description. I think that will make
this patch easier to review.

Thanks,

Bart.


Re: [PATCH 18/24] st: return error code in st_scsi_execute()

2019-10-21 Thread Hannes Reinecke
On 10/21/19 6:41 PM, Bart Van Assche wrote:
> On 10/21/19 2:53 AM, Hannes Reinecke wrote:
>> We should return the actual error code in st_scsi_execute(),
>> avoiding the need to use DRIVER_ERROR.
>>
>> Signed-off-by: Hannes Reinecke 
>> ---
>>   drivers/scsi/st.c | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
>> index e3266a64a477..5f38369cc62f 100644
>> --- a/drivers/scsi/st.c
>> +++ b/drivers/scsi/st.c
>> @@ -549,7 +549,7 @@ static int st_scsi_execute(struct st_request
>> *SRpnt, const unsigned char *cmd,
>>   data_direction == DMA_TO_DEVICE ?
>>   REQ_OP_SCSI_OUT : REQ_OP_SCSI_IN, 0);
>>   if (IS_ERR(req))
>> -    return DRIVER_ERROR << 24;
>> +    return PTR_ERR(req);
>>   rq = scsi_req(req);
>>   req->rq_flags |= RQF_QUIET;
>>   @@ -560,7 +560,7 @@ static int st_scsi_execute(struct st_request
>> *SRpnt, const unsigned char *cmd,
>>     GFP_KERNEL);
>>   if (err) {
>>   blk_put_request(req);
>> -    return DRIVER_ERROR << 24;
>> +    return err;
>>   }
>>   }
> 
> The patch description looks confusing to me. Is it perhaps because the
> caller compares the st_scsi_execute() return value with zero and doesn't
> use the return value in any other way that it is fine to return an
> integer error code instead of a SCSI status?
> 
Yes. The caller does:

ret = st_scsi_execute(SRpnt, cmd, direction, NULL, bytes, timeout,
  retries);
if (ret) {
/* could not allocate the buffer or request was too large */
(STp->buffer)->syscall_result = (-EBUSY);
(STp->buffer)->last_SRpnt = NULL;

So it's immaterial _what_ we return here as long as it's non-zero.

Cheers,

Hannes
-- 
Dr. Hannes Reinecke   Teamlead Storage & Networking
h...@suse.de  +49 911 74053 688
SUSE Software Solutions Germany GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 247165 (AG München), GF: Felix Imendörffer


Re: [PATCH 18/24] st: return error code in st_scsi_execute()

2019-10-21 Thread Bart Van Assche

On 10/21/19 2:53 AM, Hannes Reinecke wrote:

We should return the actual error code in st_scsi_execute(),
avoiding the need to use DRIVER_ERROR.

Signed-off-by: Hannes Reinecke 
---
  drivers/scsi/st.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
index e3266a64a477..5f38369cc62f 100644
--- a/drivers/scsi/st.c
+++ b/drivers/scsi/st.c
@@ -549,7 +549,7 @@ static int st_scsi_execute(struct st_request *SRpnt, const 
unsigned char *cmd,
data_direction == DMA_TO_DEVICE ?
REQ_OP_SCSI_OUT : REQ_OP_SCSI_IN, 0);
if (IS_ERR(req))
-   return DRIVER_ERROR << 24;
+   return PTR_ERR(req);
rq = scsi_req(req);
req->rq_flags |= RQF_QUIET;
  
@@ -560,7 +560,7 @@ static int st_scsi_execute(struct st_request *SRpnt, const unsigned char *cmd,

  GFP_KERNEL);
if (err) {
blk_put_request(req);
-   return DRIVER_ERROR << 24;
+   return err;
}
}


The patch description looks confusing to me. Is it perhaps because the 
caller compares the st_scsi_execute() return value with zero and doesn't 
use the return value in any other way that it is fine to return an 
integer error code instead of a SCSI status?


Thanks,

Bart.