[PATCH] hwmon: Add missing parentheses

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Jean Delvare wrote:
> On Tue, 17 Feb 2009 21:03:23 +0000, Alistair John Strachan wrote:
>> On Tuesday 17 February 2009 13:17:54 Roel Kluin wrote:
>>> I think this was intended? please review.
>> This one's been there from the beginning.
>>
>> The change looks right to me. (i * count) account the previous successes, add 
>> either zero or x depending on the kind of read failure (timeout/short read vs 
>> other I/O error). I'm not entirely sure why i must be >0 for accounting the 
>> short read.
> 
> I can't make any sense of that "i &&" either. Hans?
> 

This is in an error handling path, if some bytes were read but not count bytes, 
then we return i * count + x, where i * count is the number of bytes read 
successful so far and x is the number of bytes read for the offset we were 
reading from when we got the short read.

However if this is not just a short read, but a read which error-ed out then x 
< 0. If we then would return i * count + x, we would return less then what 
we've actually read. So in this case we want to return just i * count, which 
gets done in the form of i * count + 0.

There is one special case however if we get an error code in the form of x < 0, 
and we've not done any successfull reads (so i == 0), then the right thing to 
do is to pass the error code along. So the condition in which we want to add 0 
to the result instead of x becomes (i && x < 0)

Hopes this helps.

Regards,

Hans

>> Nothing calling abituguru3_read_increment_offset() checks for anything other 
>> than complete success. Every caller passes count=1, and offset_count>1, so 
>> both the new code and the old could never return a full count 
>> (offset_count*count) when an error has occured (old returns either 0 or x, 
>> x=count). Ergo, the change can't cause any regressions.
>>
>> Acked-by: Alistair John Strachan <alistair at devzero.co.uk>
>>
>> Jean, are you happy to take this?
> 
> Yes, but I'd like to understand why the "i &&" is there, and if there's
> no good reason we should drop it.
> 
>>> --------------------------->8-------------8<------------------------------
>>> Add missing parentheses
>>>
>>> Signed-off-by: Roel Kluin <roel.kluin at gmail.com>
>>> ---
>>> diff --git a/drivers/hwmon/abituguru3.c b/drivers/hwmon/abituguru3.c
>>> index e52b388..fd98685 100644
>>> --- a/drivers/hwmon/abituguru3.c
>>> +++ b/drivers/hwmon/abituguru3.c
>>> @@ -761,7 +761,7 @@ static int abituguru3_read_increment_offset(struct
>>> abituguru3_data *data, for (i = 0; i < offset_count; i++)
>>>  		if ((x = abituguru3_read(data, bank, offset + i, count,
>>>  				buf + i * count)) != count)
>>> -			return i * count + (i && (x < 0)) ? 0 : x;
>>> +			return i * count + ((i && (x < 0)) ? 0 : x);
>>>
>>>  	return i * count;
>>>  }
> 
> 



[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux