linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH 2/3] writeback: fix incorrect return value type of bdi_dirty_limit
       [not found] <1345283361-7802-1-git-send-email-linkinjeon@gmail.com>
@ 2012-08-19  2:17 ` Fengguang Wu
  2012-08-19 10:23   ` Marco Stornelli
  2012-08-20  0:09   ` Namjae Jeon
  0 siblings, 2 replies; 5+ messages in thread
From: Fengguang Wu @ 2012-08-19  2:17 UTC (permalink / raw)
  To: Namjae Jeon; +Cc: akpm, linux-kernel, linux-fsdevel

On Sat, Aug 18, 2012 at 05:49:21AM -0400, Namjae Jeon wrote:
> unsigned long bdi_dirty_limit(struct backing_dev_info *bdi, unsigned long dirty)
> 
> Above function return type is unsigned long, but return value is
> kept in "u64 bdi_dirty".
> It can return incorrect value by type casting.

I don't see how the cast can return wrong value.
The u64 is necessary for the intermediate calculations.

Thanks,
Fengguang

> Signed-off-by: Namjae Jeon <linkinjeon@gmail.com>
> ---
>  mm/page-writeback.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/mm/page-writeback.c b/mm/page-writeback.c
> index 49133b6..73a7a06 100644
> --- a/mm/page-writeback.c
> +++ b/mm/page-writeback.c
> @@ -546,7 +546,7 @@ static unsigned long hard_dirty_limit(unsigned long thresh)
>   */
>  unsigned long bdi_dirty_limit(struct backing_dev_info *bdi, unsigned long dirty)
>  {
> -	u64 bdi_dirty;
> +	unsigned long bdi_dirty;
>  	long numerator, denominator;
>  
>  	/*
> -- 
> 1.7.9.5

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/3] writeback: fix incorrect return value type of bdi_dirty_limit
  2012-08-19  2:17 ` [PATCH 2/3] writeback: fix incorrect return value type of bdi_dirty_limit Fengguang Wu
@ 2012-08-19 10:23   ` Marco Stornelli
  2012-08-19 10:35     ` Marco Stornelli
  2012-08-19 23:49     ` Namjae Jeon
  2012-08-20  0:09   ` Namjae Jeon
  1 sibling, 2 replies; 5+ messages in thread
From: Marco Stornelli @ 2012-08-19 10:23 UTC (permalink / raw)
  To: Fengguang Wu; +Cc: Namjae Jeon, akpm, linux-kernel, linux-fsdevel

Il 19/08/2012 04:17, Fengguang Wu ha scritto:
> On Sat, Aug 18, 2012 at 05:49:21AM -0400, Namjae Jeon wrote:
>> unsigned long bdi_dirty_limit(struct backing_dev_info *bdi, unsigned long dirty)
>>
>> Above function return type is unsigned long, but return value is
>> kept in "u64 bdi_dirty".
>> It can return incorrect value by type casting.
>
> I don't see how the cast can return wrong value.
> The u64 is necessary for the intermediate calculations.
>
> Thanks,
> Fengguang
>

We are sure u64 is 8byte long, but unsigned long is 4byte long on 32-bit 
machine, so if bdi_dirty can assume values bigger than 2^32 there is an 
implicit truncate of its value, isn't it?

Marco

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/3] writeback: fix incorrect return value type of bdi_dirty_limit
  2012-08-19 10:23   ` Marco Stornelli
@ 2012-08-19 10:35     ` Marco Stornelli
  2012-08-19 23:49     ` Namjae Jeon
  1 sibling, 0 replies; 5+ messages in thread
From: Marco Stornelli @ 2012-08-19 10:35 UTC (permalink / raw)
  To: Fengguang Wu; +Cc: Namjae Jeon, akpm, linux-kernel, linux-fsdevel

Il 19/08/2012 12:23, Marco Stornelli ha scritto:
> Il 19/08/2012 04:17, Fengguang Wu ha scritto:
>> On Sat, Aug 18, 2012 at 05:49:21AM -0400, Namjae Jeon wrote:
>>> unsigned long bdi_dirty_limit(struct backing_dev_info *bdi, unsigned
>>> long dirty)
>>>
>>> Above function return type is unsigned long, but return value is
>>> kept in "u64 bdi_dirty".
>>> It can return incorrect value by type casting.
>>
>> I don't see how the cast can return wrong value.
>> The u64 is necessary for the intermediate calculations.
>>
>> Thanks,
>> Fengguang
>>
>
> We are sure u64 is 8byte long, but unsigned long is 4byte long on 32-bit
> machine, so if bdi_dirty can assume values bigger than 2^32 there is an
> implicit truncate of its value, isn't it?
>
> Marco

Sorry but I didn't see the code, it seems not possible so the wrong 
situation can't happen. Maybe we can simply add a comment, nothing more.

Marco

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/3] writeback: fix incorrect return value type of bdi_dirty_limit
  2012-08-19 10:23   ` Marco Stornelli
  2012-08-19 10:35     ` Marco Stornelli
@ 2012-08-19 23:49     ` Namjae Jeon
  1 sibling, 0 replies; 5+ messages in thread
From: Namjae Jeon @ 2012-08-19 23:49 UTC (permalink / raw)
  To: Marco Stornelli; +Cc: Fengguang Wu, akpm, linux-kernel, linux-fsdevel

2012/8/19, Marco Stornelli <marco.stornelli@gmail.com>:
> Il 19/08/2012 04:17, Fengguang Wu ha scritto:
>> On Sat, Aug 18, 2012 at 05:49:21AM -0400, Namjae Jeon wrote:
>>> unsigned long bdi_dirty_limit(struct backing_dev_info *bdi, unsigned long
>>> dirty)
>>>
>>> Above function return type is unsigned long, but return value is
>>> kept in "u64 bdi_dirty".
>>> It can return incorrect value by type casting.
>>
>> I don't see how the cast can return wrong value.
>> The u64 is necessary for the intermediate calculations.
>>
>> Thanks,
>> Fengguang
>>
>
> We are sure u64 is 8byte long, but unsigned long is 4byte long on 32-bit
> machine, so if bdi_dirty can assume values bigger than 2^32 there is an
> implicit truncate of its value, isn't it?
Yes, right.
Thanks.
>
> Marco
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/3] writeback: fix incorrect return value type of bdi_dirty_limit
  2012-08-19  2:17 ` [PATCH 2/3] writeback: fix incorrect return value type of bdi_dirty_limit Fengguang Wu
  2012-08-19 10:23   ` Marco Stornelli
@ 2012-08-20  0:09   ` Namjae Jeon
  1 sibling, 0 replies; 5+ messages in thread
From: Namjae Jeon @ 2012-08-20  0:09 UTC (permalink / raw)
  To: Fengguang Wu; +Cc: akpm, linux-kernel, linux-fsdevel

2012/8/19, Fengguang Wu <fengguang.wu@intel.com>:
> On Sat, Aug 18, 2012 at 05:49:21AM -0400, Namjae Jeon wrote:
>> unsigned long bdi_dirty_limit(struct backing_dev_info *bdi, unsigned long
>> dirty)
>>
>> Above function return type is unsigned long, but return value is
>> kept in "u64 bdi_dirty".
>> It can return incorrect value by type casting.
>
> I don't see how the cast can return wrong value.
> The u64 is necessary for the intermediate calculations.
>
> Thanks,
> Fengguang
Hi Wu.
I understand.
Thanks for your reply.
>
>> Signed-off-by: Namjae Jeon <linkinjeon@gmail.com>
>> ---
>>  mm/page-writeback.c |    2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/mm/page-writeback.c b/mm/page-writeback.c
>> index 49133b6..73a7a06 100644
>> --- a/mm/page-writeback.c
>> +++ b/mm/page-writeback.c
>> @@ -546,7 +546,7 @@ static unsigned long hard_dirty_limit(unsigned long
>> thresh)
>>   */
>>  unsigned long bdi_dirty_limit(struct backing_dev_info *bdi, unsigned long
>> dirty)
>>  {
>> -	u64 bdi_dirty;
>> +	unsigned long bdi_dirty;
>>  	long numerator, denominator;
>>
>>  	/*
>> --
>> 1.7.9.5
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-08-20  0:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <1345283361-7802-1-git-send-email-linkinjeon@gmail.com>
2012-08-19  2:17 ` [PATCH 2/3] writeback: fix incorrect return value type of bdi_dirty_limit Fengguang Wu
2012-08-19 10:23   ` Marco Stornelli
2012-08-19 10:35     ` Marco Stornelli
2012-08-19 23:49     ` Namjae Jeon
2012-08-20  0:09   ` Namjae Jeon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).