On Thu, 20 Sep 2012 15:28:03 +0200, David Sterba wrote:
> On Thu, Sep 20, 2012 at 10:57:54AM +0800, Miao Xie wrote:
>> Because those functions are mostly used on the hot path, and we are sure
>> the parameters are right in the most cases, we don't add complex checks
>> for the parameters. But in the other place, we must check and make sure
>> the parameters are right. So besides the code cleanup, this patch also
>> add a check for the usage of the space balance, it is the only place that
>> we need add check to make sure the parameters of div_factor{_fine} are
>> right till now.
> 
> I've reviewed the hotpaths, makes sense to optimize for speed. Adding
> the boundary checks to balance ioctl is ok.
> 
> A few suggestions:
> 
> * drop the version that does the /10 version and keep only /100 (naming
>   it div_factor)
> * drop the
> 
> +     if (factor == 10)
> +             return num;
> 
> check, there's only one instance where we pass the maximum value (and
> it's not a frequent case), so there's the if() penalty, makes the
> function smaller and even more suitable for inlining.

OK.

> 
>> diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
>> index 9384a2a..d8d53f7 100644
>> --- a/fs/btrfs/ioctl.c
>> +++ b/fs/btrfs/ioctl.c
>> @@ -3335,6 +3335,24 @@ static long btrfs_ioctl_balance(struct file *file, 
>> void __user *arg)
>>  
>>                      goto do_balance;
>>              }
>> +
>> +            if ((bargs->data.flags & BTRFS_BALANCE_ARGS_USAGE) &&
>> +                (bargs->data.usage < 0 || bargs->data.usage > 100)) {
> 
> data.usage <= 0
> 
> otherwise you'd divide by 0 in chunk_usage_filter()

The divisor always is 100 or 10, so...

>> diff --git a/fs/btrfs/math.h b/fs/btrfs/math.h
>> new file mode 100644
>> index 0000000..b7816ce
>> --- /dev/null
>> +++ b/fs/btrfs/math.h
> 
> I think we don't need single file to hold one trivial function then :)
> 
>> @@ -0,0 +1,44 @@
>> +#include <asm/div64.h>
>> +
>> +static inline u64 div_factor(u64 num, int factor)
>> +{
>> +    num *= factor;
>> +    do_div(num, 100);
>> +    return num;
>> +}

I don't find a suitable file to put it down. Maybe we can stuff it
into ctree.h, but I prefer a single file to a unrelated file.

Thanks
Miao
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to