On Mon, Mar 07, 2011 at 03:05:43PM -0800, [email protected] wrote:
> Add a proc_dointvec_unsigned() sysctl handler for positive value cases.
> --- a/kernel/sysctl.c~sysctl-add-proc_dointvec_unsigned-handler
> +++ a/kernel/sysctl.c
> +int proc_dointvec_unsigned(struct ctl_table *table, int write,
> + void __user *buffer, size_t *lenp, loff_t *ppos)
> +{
> + struct do_proc_dointvec_minmax_conv_param param = {
> + .min = &zero,
> + };
> + return do_proc_dointvec(table, write, buffer, lenp, ppos,
> + do_proc_dointvec_minmax_conv, ¶m);
> +}
This silently ignored max value in .extra2 .
On Tue, Mar 8, 2011 at 7:26 AM, Alexey Dobriyan <[email protected]> wrote:
> On Mon, Mar 07, 2011 at 03:05:43PM -0800, [email protected] wrote:
>> Add a proc_dointvec_unsigned() sysctl handler for positive value cases.
>
>> --- a/kernel/sysctl.c~sysctl-add-proc_dointvec_unsigned-handler
>> +++ a/kernel/sysctl.c
>
>> +int proc_dointvec_unsigned(struct ctl_table *table, int write,
>> + void __user *buffer, size_t *lenp, loff_t *ppos)
>> +{
>> + struct do_proc_dointvec_minmax_conv_param param = {
>> + .min = &zero,
>> + };
>> + return do_proc_dointvec(table, write, buffer, lenp, ppos,
>> + do_proc_dointvec_minmax_conv, ¶m);
>> +}
>
> This silently ignored max value in .extra2 .
Hi,
Good cache, should set .max = NULL here
Thanks, will update this patch.
--
Regards
dave
On Tue, Mar 8, 2011 at 1:15 PM, Dave Young <[email protected]> wrote:
> On Tue, Mar 8, 2011 at 7:26 AM, Alexey Dobriyan <[email protected]> wrote:
>> On Mon, Mar 07, 2011 at 03:05:43PM -0800, [email protected] wrote:
>>> Add a proc_dointvec_unsigned() sysctl handler for positive value cases.
>>
>>> --- a/kernel/sysctl.c~sysctl-add-proc_dointvec_unsigned-handler
>>> +++ a/kernel/sysctl.c
>>
>>> +int proc_dointvec_unsigned(struct ctl_table *table, int write,
>>> + void __user *buffer, size_t *lenp, loff_t *ppos)
>>> +{
>>> + struct do_proc_dointvec_minmax_conv_param param = {
>>> + .min = &zero,
>>> + };
>>> + return do_proc_dointvec(table, write, buffer, lenp, ppos,
>>> + do_proc_dointvec_minmax_conv, ¶m);
>>> +}
>>
>> This silently ignored max value in .extra2 .
>
> Hi,
>
> Good cache, should set .max = NULL here
Oh, c99 set default value to 0, isn't it?
What do you mean silently ignore here?
Let's see the code:
if ((param->min && *param->min > val) ||
(param->max && *param->max < val))
return -EINVAL;
There's no problem max == NULL
--
Regards
dave
On Tue, Mar 08, 2011 at 01:43:31PM +0800, Dave Young wrote:
> On Tue, Mar 8, 2011 at 1:15 PM, Dave Young <[email protected]> wrote:
> > On Tue, Mar 8, 2011 at 7:26 AM, Alexey Dobriyan <[email protected]> wrote:
> >> On Mon, Mar 07, 2011 at 03:05:43PM -0800, [email protected] wrote:
> >>> Add a proc_dointvec_unsigned() sysctl handler for positive value cases.
> >>
> >>> --- a/kernel/sysctl.c~sysctl-add-proc_dointvec_unsigned-handler
> >>> +++ a/kernel/sysctl.c
> >>
> >>> +int proc_dointvec_unsigned(struct ctl_table *table, int write,
> >>> + ? ? ? ? ? ? ? void __user *buffer, size_t *lenp, loff_t *ppos)
> >>> +{
> >>> + ? ? struct do_proc_dointvec_minmax_conv_param param = {
> >>> + ? ? ? ? ? ? .min = &zero,
> >>> + ? ? };
> >>> + ? ? return do_proc_dointvec(table, write, buffer, lenp, ppos,
> >>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? do_proc_dointvec_minmax_conv, ¶m);
> >>> +}
> >>
> >> This silently ignored max value in .extra2 .
> >
> > Hi,
> >
> > Good cache, should set .max = NULL here
>
> Oh, c99 set default value to 0, isn't it?
>
> What do you mean silently ignore here?
>
> Let's see the code:
>
> if ((param->min && *param->min > val) ||
> (param->max && *param->max < val))
> return -EINVAL;
>
> There's no problem max == NULL
I mean literally "silently ignore".
Try
{
.name = "foo",
.data = &foo,
.maxlen = sizeof(foo),
.proc_handler = proc_dointvec_unsigned,
.extra2 = &_42,
}
On Tue, Mar 8, 2011 at 4:24 PM, Alexey Dobriyan <[email protected]> wrote:
> On Tue, Mar 08, 2011 at 01:43:31PM +0800, Dave Young wrote:
>> On Tue, Mar 8, 2011 at 1:15 PM, Dave Young <[email protected]> wrote:
>> > On Tue, Mar 8, 2011 at 7:26 AM, Alexey Dobriyan <[email protected]> wrote:
>> >> On Mon, Mar 07, 2011 at 03:05:43PM -0800, [email protected] wrote:
>> >>> Add a proc_dointvec_unsigned() sysctl handler for positive value cases.
>> >>
>> >>> --- a/kernel/sysctl.c~sysctl-add-proc_dointvec_unsigned-handler
>> >>> +++ a/kernel/sysctl.c
>> >>
>> >>> +int proc_dointvec_unsigned(struct ctl_table *table, int write,
>> >>> + void __user *buffer, size_t *lenp, loff_t *ppos)
>> >>> +{
>> >>> + struct do_proc_dointvec_minmax_conv_param param = {
>> >>> + .min = &zero,
>> >>> + };
>> >>> + return do_proc_dointvec(table, write, buffer, lenp, ppos,
>> >>> + do_proc_dointvec_minmax_conv, ¶m);
>> >>> +}
>> >>
>> >> This silently ignored max value in .extra2 .
>> >
>> > Hi,
>> >
>> > Good cache, should set .max = NULL here
>>
>> Oh, c99 set default value to 0, isn't it?
>>
>> What do you mean silently ignore here?
>>
>> Let's see the code:
>>
>> if ((param->min && *param->min > val) ||
>> (param->max && *param->max < val))
>> return -EINVAL;
>>
>> There's no problem max == NULL
>
> I mean literally "silently ignore".
>
> Try
> {
> .name = "foo",
> .data = &foo,
> .maxlen = sizeof(foo),
> .proc_handler = proc_dointvec_unsigned,
> .extra2 = &_42,
> }
>
Yes, extra2 is ignored, what would you like to do for this kind of ignore?
--
Regards
dave
On Tue, Mar 08, 2011 at 04:43:36PM +0800, Dave Young wrote:
> On Tue, Mar 8, 2011 at 4:24 PM, Alexey Dobriyan <[email protected]> wrote:
> > On Tue, Mar 08, 2011 at 01:43:31PM +0800, Dave Young wrote:
> >> On Tue, Mar 8, 2011 at 1:15 PM, Dave Young <[email protected]> wrote:
> >> > On Tue, Mar 8, 2011 at 7:26 AM, Alexey Dobriyan <[email protected]> wrote:
> >> >> On Mon, Mar 07, 2011 at 03:05:43PM -0800, [email protected] wrote:
> >> >>> Add a proc_dointvec_unsigned() sysctl handler for positive value cases.
> >> >>
> >> >>> --- a/kernel/sysctl.c~sysctl-add-proc_dointvec_unsigned-handler
> >> >>> +++ a/kernel/sysctl.c
> >> >>
> >> >>> +int proc_dointvec_unsigned(struct ctl_table *table, int write,
> >> >>> + ? ? ? ? ? ? ? void __user *buffer, size_t *lenp, loff_t *ppos)
> >> >>> +{
> >> >>> + ? ? struct do_proc_dointvec_minmax_conv_param param = {
> >> >>> + ? ? ? ? ? ? .min = &zero,
> >> >>> + ? ? };
> >> >>> + ? ? return do_proc_dointvec(table, write, buffer, lenp, ppos,
> >> >>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? do_proc_dointvec_minmax_conv, ¶m);
> >> >>> +}
> >> >>
> >> >> This silently ignored max value in .extra2 .
> >> >
> >> > Hi,
> >> >
> >> > Good cache, should set .max = NULL here
> >>
> >> Oh, c99 set default value to 0, isn't it?
> >>
> >> What do you mean silently ignore here?
> >>
> >> Let's see the code:
> >>
> >> ?if ((param->min && *param->min > val) ||
> >> ? ? ? ? ? ? ? ? ? ? (param->max && *param->max < val))
> >> ? ? ? ? ? ? ? ? ? ? return -EINVAL;
> >>
> >> There's no problem max == NULL
> >
> > I mean literally "silently ignore".
> >
> > Try
> > ? ? ? ?{
> > ? ? ? ? ? ? ? ?.name = "foo",
> > ? ? ? ? ? ? ? ?.data = &foo,
> > ? ? ? ? ? ? ? ?.maxlen = sizeof(foo),
> > ? ? ? ? ? ? ? ?.proc_handler = proc_dointvec_unsigned,
> > ? ? ? ? ? ? ? ?.extra2 = &_42,
> > ? ? ? ?}
> >
>
> Yes, extra2 is ignored, what would you like to do for this kind of ignore?
Obviously it should remain upper bound.
On Tue, Mar 8, 2011 at 5:02 PM, Alexey Dobriyan <[email protected]> wrote:
> On Tue, Mar 08, 2011 at 04:43:36PM +0800, Dave Young wrote:
>> On Tue, Mar 8, 2011 at 4:24 PM, Alexey Dobriyan <[email protected]> wrote:
>> > On Tue, Mar 08, 2011 at 01:43:31PM +0800, Dave Young wrote:
>> >> On Tue, Mar 8, 2011 at 1:15 PM, Dave Young <[email protected]> wrote:
>> >> > On Tue, Mar 8, 2011 at 7:26 AM, Alexey Dobriyan <[email protected]> wrote:
>> >> >> On Mon, Mar 07, 2011 at 03:05:43PM -0800, [email protected] wrote:
>> >> >>> Add a proc_dointvec_unsigned() sysctl handler for positive value cases.
>> >> >>
>> >> >>> --- a/kernel/sysctl.c~sysctl-add-proc_dointvec_unsigned-handler
>> >> >>> +++ a/kernel/sysctl.c
>> >> >>
>> >> >>> +int proc_dointvec_unsigned(struct ctl_table *table, int write,
>> >> >>> + void __user *buffer, size_t *lenp, loff_t *ppos)
>> >> >>> +{
>> >> >>> + struct do_proc_dointvec_minmax_conv_param param = {
>> >> >>> + .min = &zero,
>> >> >>> + };
>> >> >>> + return do_proc_dointvec(table, write, buffer, lenp, ppos,
>> >> >>> + do_proc_dointvec_minmax_conv, ¶m);
>> >> >>> +}
>> >> >>
>> >> >> This silently ignored max value in .extra2 .
>> >> >
>> >> > Hi,
>> >> >
>> >> > Good cache, should set .max = NULL here
>> >>
>> >> Oh, c99 set default value to 0, isn't it?
>> >>
>> >> What do you mean silently ignore here?
>> >>
>> >> Let's see the code:
>> >>
>> >> if ((param->min && *param->min > val) ||
>> >> (param->max && *param->max < val))
>> >> return -EINVAL;
>> >>
>> >> There's no problem max == NULL
>> >
>> > I mean literally "silently ignore".
>> >
>> > Try
>> > {
>> > .name = "foo",
>> > .data = &foo,
>> > .maxlen = sizeof(foo),
>> > .proc_handler = proc_dointvec_unsigned,
>> > .extra2 = &_42,
>> > }
>> >
>>
>> Yes, extra2 is ignored, what would you like to do for this kind of ignore?
>
> Obviously it should remain upper bound.
>
This function is intend for case val >=0, So I don't think extra2
should be added.
--
Regards
dave
So... where did we end up with this discussion?
There are four patches involved:
http://userweb.kernel.org/~akpm/mmotm/broken-out/sysctl-add-proc_dointvec_bool-handler.patch
http://userweb.kernel.org/~akpm/mmotm/broken-out/sysctl-use-proc_dointvec_bool-where-appropriate.patch
http://userweb.kernel.org/~akpm/mmotm/broken-out/sysctl-add-proc_dointvec_unsigned-handler.patch
http://userweb.kernel.org/~akpm/mmotm/broken-out/sysctl-use-proc_dointvec_unsigned-where-appropriate.patch
On Thu, May 26, 2011 at 12:59:18PM -0700, Andrew Morton wrote:
>
> So... where did we end up with this discussion?
>
> There are four patches involved:
> http://userweb.kernel.org/~akpm/mmotm/broken-out/sysctl-add-proc_dointvec_unsigned-handler.patch
> http://userweb.kernel.org/~akpm/mmotm/broken-out/sysctl-use-proc_dointvec_unsigned-where-appropriate.patch
This still sucks:
* .extra2 aka max is ignored(!)
* even if not ignored, API can't be used on array, because min and max
boundaries should match wrt length.
On Fri, May 27, 2011 at 12:51 PM, Alexey Dobriyan <[email protected]> wrote:
> On Thu, May 26, 2011 at 12:59:18PM -0700, Andrew Morton wrote:
>>
>> So... where did we end up with this discussion?
>>
>> There are four patches involved:
>
>> http://userweb.kernel.org/~akpm/mmotm/broken-out/sysctl-add-proc_dointvec_unsigned-handler.patch
>> http://userweb.kernel.org/~akpm/mmotm/broken-out/sysctl-use-proc_dointvec_unsigned-where-appropriate.patch
>
> This still sucks:
> * .extra2 aka max is ignored(!)
> * even if not ignored, API can't be used on array, because min and max
> boundaries should match wrt length.
>
Andrew, I'm offline last days, sorry for late reply.
Alexey, I updated the patch, do you feel better?
--
Regards
dave