When I cat some ipmi_watchdog parameters by sysfs, it displays as
follows. It's better to add a newline for easy reading.
root@(none):/# cat /sys/module/ipmi_watchdog/parameters/action
resetroot@(none):/# cat /sys/module/ipmi_watchdog/parameters/preaction
pre_noneroot@(none):/# cat /sys/module/ipmi_watchdog/parameters/preop
preop_noneroot@(none):/#
Signed-off-by: Xiongfeng Wang <[email protected]>
---
drivers/char/ipmi/ipmi_watchdog.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c
index 55986e1..3e05a1d 100644
--- a/drivers/char/ipmi/ipmi_watchdog.c
+++ b/drivers/char/ipmi/ipmi_watchdog.c
@@ -232,12 +232,16 @@ static int set_param_str(const char *val, const struct kernel_param *kp)
static int get_param_str(char *buffer, const struct kernel_param *kp)
{
action_fn fn = (action_fn) kp->arg;
- int rv;
+ int rv, len;
rv = fn(NULL, buffer);
if (rv)
return rv;
- return strlen(buffer);
+
+ len = strlen(buffer);
+ len += sprintf(buffer + len, "\n");
+
+ return len;
}
--
1.7.12.4
On Mon, Jul 20, 2020 at 10:03:25AM +0800, Xiongfeng Wang wrote:
> When I cat some ipmi_watchdog parameters by sysfs, it displays as
> follows. It's better to add a newline for easy reading.
>
> root@(none):/# cat /sys/module/ipmi_watchdog/parameters/action
> resetroot@(none):/# cat /sys/module/ipmi_watchdog/parameters/preaction
> pre_noneroot@(none):/# cat /sys/module/ipmi_watchdog/parameters/preop
> preop_noneroot@(none):/#
Yeah, that's not consistent with other things displayed in the kernel.
>
> Signed-off-by: Xiongfeng Wang <[email protected]>
> ---
> drivers/char/ipmi/ipmi_watchdog.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c
> index 55986e1..3e05a1d 100644
> --- a/drivers/char/ipmi/ipmi_watchdog.c
> +++ b/drivers/char/ipmi/ipmi_watchdog.c
> @@ -232,12 +232,16 @@ static int set_param_str(const char *val, const struct kernel_param *kp)
> static int get_param_str(char *buffer, const struct kernel_param *kp)
> {
> action_fn fn = (action_fn) kp->arg;
> - int rv;
> + int rv, len;
>
> rv = fn(NULL, buffer);
> if (rv)
> return rv;
> - return strlen(buffer);
> +
> + len = strlen(buffer);
> + len += sprintf(buffer + len, "\n");
sprintf is kind of overkill to stick a \n on the end of a line. How
about:
buffer[len++] = '\n';
Since you are returning the length, you shouldn't need to nil terminate
the string.
An unrelated question: Are you using any of the special functions of the
IPMI watchdog, like the pretimeout?
-corey
> +
> + return len;
> }
>
>
> --
> 1.7.12.4
>
Hi Corey,
Thanks for your reply !
On 2020/7/21 3:52, Corey Minyard wrote:
> On Mon, Jul 20, 2020 at 10:03:25AM +0800, Xiongfeng Wang wrote:
>> When I cat some ipmi_watchdog parameters by sysfs, it displays as
>> follows. It's better to add a newline for easy reading.
>>
>> root@(none):/# cat /sys/module/ipmi_watchdog/parameters/action
>> resetroot@(none):/# cat /sys/module/ipmi_watchdog/parameters/preaction
>> pre_noneroot@(none):/# cat /sys/module/ipmi_watchdog/parameters/preop
>> preop_noneroot@(none):/#
>
> Yeah, that's not consistent with other things displayed in the kernel.
>
>>
>> Signed-off-by: Xiongfeng Wang <[email protected]>
>> ---
>> drivers/char/ipmi/ipmi_watchdog.c | 8 ++++++--
>> 1 file changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c
>> index 55986e1..3e05a1d 100644
>> --- a/drivers/char/ipmi/ipmi_watchdog.c
>> +++ b/drivers/char/ipmi/ipmi_watchdog.c
>> @@ -232,12 +232,16 @@ static int set_param_str(const char *val, const struct kernel_param *kp)
>> static int get_param_str(char *buffer, const struct kernel_param *kp)
>> {
>> action_fn fn = (action_fn) kp->arg;
>> - int rv;
>> + int rv, len;
>>
>> rv = fn(NULL, buffer);
>> if (rv)
>> return rv;
>> - return strlen(buffer);
>> +
>> + len = strlen(buffer);
>> + len += sprintf(buffer + len, "\n");
>
> sprintf is kind of overkill to stick a \n on the end of a line. How
> about:
>
> buffer[len++] = '\n';
>
> Since you are returning the length, you shouldn't need to nil terminate
> the string.
Thanks for your advice. I will change it in the next version.
>
> An unrelated question: Are you using any of the special functions of the
> IPMI watchdog, like the pretimeout?
I am not using any special functions of the IPMI watchdog. It's just that I cat
the parameters below 'ipmi_watchdog' and find we can add a newline here.
Thanks,
Xiongfeng
>
> -corey
>
>> +
>> + return len;
>> }
>>
>>
>> --
>> 1.7.12.4
>>
>
> .
>
On Tue, 2020-07-21 at 09:20 +0800, Xiongfeng Wang wrote:
> On 2020/7/21 3:52, Corey Minyard wrote:
> > On Mon, Jul 20, 2020 at 10:03:25AM +0800, Xiongfeng Wang wrote:
> > > When I cat some ipmi_watchdog parameters by sysfs, it displays as
> > > follows. It's better to add a newline for easy reading.
[]
> > > diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c
[]
> > > @@ -232,12 +232,16 @@ static int set_param_str(const char *val, const struct kernel_param *kp)
> > > static int get_param_str(char *buffer, const struct kernel_param *kp)
> > > {
> > > action_fn fn = (action_fn) kp->arg;
> > > - int rv;
> > > + int rv, len;
> > >
> > > rv = fn(NULL, buffer);
> > > if (rv)
> > > return rv;
> > > - return strlen(buffer);
> > > +
> > > + len = strlen(buffer);
> > > + len += sprintf(buffer + len, "\n");
> >
> > sprintf is kind of overkill to stick a \n on the end of a line. How
> > about:
> >
> > buffer[len++] = '\n';
> >
> > Since you are returning the length, you shouldn't need to nil terminate
> > the string.
You never quite know for sure so I suggest making
the string null terminated just in case.
i.e.:
buffer[len++] = '\n';
buffer[len] = 0;
On 2020/7/21 10:00, Joe Perches wrote:
> On Tue, 2020-07-21 at 09:20 +0800, Xiongfeng Wang wrote:
>> On 2020/7/21 3:52, Corey Minyard wrote:
>>> On Mon, Jul 20, 2020 at 10:03:25AM +0800, Xiongfeng Wang wrote:
>>>> When I cat some ipmi_watchdog parameters by sysfs, it displays as
>>>> follows. It's better to add a newline for easy reading.
> []
>>>> diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c
> []
>>>> @@ -232,12 +232,16 @@ static int set_param_str(const char *val, const struct kernel_param *kp)
>>>> static int get_param_str(char *buffer, const struct kernel_param *kp)
>>>> {
>>>> action_fn fn = (action_fn) kp->arg;
>>>> - int rv;
>>>> + int rv, len;
>>>>
>>>> rv = fn(NULL, buffer);
>>>> if (rv)
>>>> return rv;
>>>> - return strlen(buffer);
>>>> +
>>>> + len = strlen(buffer);
>>>> + len += sprintf(buffer + len, "\n");
>>>
>>> sprintf is kind of overkill to stick a \n on the end of a line. How
>>> about:
>>>
>>> buffer[len++] = '\n';
>>>
>>> Since you are returning the length, you shouldn't need to nil terminate
>>> the string.
>
> You never quite know for sure so I suggest making
> the string null terminated just in case.
>
> i.e.:
>
> buffer[len++] = '\n';
> buffer[len] = 0;
>
Thanks for your advice. I will change it in the next version.
Thanks,
Xiongfeng
>
>
> .
>