* [PATCH] kernel/params.c: print failure information instead of 'KOBJ_ADD' to user space, when sysfs_create_file() fails. @ 2013-07-09 3:37 Chen Gang 2013-07-09 8:07 ` Rusty Russell 0 siblings, 1 reply; 10+ messages in thread From: Chen Gang @ 2013-07-09 3:37 UTC (permalink / raw) To: Rusty Russell, khali, David.Woodhouse; +Cc: linux-kernel@vger.kernel.org When sysfs_create_file() fails, recommend to print the related failure information. And it is useless to still 'KOBJ_ADD' to user space. Signed-off-by: Chen Gang <gang.chen@asianux.com> --- kernel/params.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/kernel/params.c b/kernel/params.c index 440e65d..f5299c1 100644 --- a/kernel/params.c +++ b/kernel/params.c @@ -845,7 +845,13 @@ static void __init version_sysfs_builtin(void) mk = locate_module_kobject(vattr->module_name); if (mk) { err = sysfs_create_file(&mk->kobj, &vattr->mattr.attr); - kobject_uevent(&mk->kobj, KOBJ_ADD); + if (err) + printk(KERN_WARNING + "%s (%d): sysfs_create_file fail for %s, err: %d\n", + __FILE__, __LINE__, + vattr->module_name, err); + else + kobject_uevent(&mk->kobj, KOBJ_ADD); kobject_put(&mk->kobj); } } -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] kernel/params.c: print failure information instead of 'KOBJ_ADD' to user space, when sysfs_create_file() fails. 2013-07-09 3:37 [PATCH] kernel/params.c: print failure information instead of 'KOBJ_ADD' to user space, when sysfs_create_file() fails Chen Gang @ 2013-07-09 8:07 ` Rusty Russell 2013-07-10 2:17 ` Chen Gang F T 0 siblings, 1 reply; 10+ messages in thread From: Rusty Russell @ 2013-07-09 8:07 UTC (permalink / raw) To: Chen Gang, khali, David.Woodhouse; +Cc: linux-kernel@vger.kernel.org Chen Gang <gang.chen@asianux.com> writes: > When sysfs_create_file() fails, recommend to print the related failure > information. And it is useless to still 'KOBJ_ADD' to user space. > > Signed-off-by: Chen Gang <gang.chen@asianux.com> sysfs_create_file() should not fail during boot, should it? Cheers, Rusty. > --- > kernel/params.c | 8 +++++++- > 1 files changed, 7 insertions(+), 1 deletions(-) > > diff --git a/kernel/params.c b/kernel/params.c > index 440e65d..f5299c1 100644 > --- a/kernel/params.c > +++ b/kernel/params.c > @@ -845,7 +845,13 @@ static void __init version_sysfs_builtin(void) > mk = locate_module_kobject(vattr->module_name); > if (mk) { > err = sysfs_create_file(&mk->kobj, &vattr->mattr.attr); > - kobject_uevent(&mk->kobj, KOBJ_ADD); > + if (err) > + printk(KERN_WARNING > + "%s (%d): sysfs_create_file fail for %s, err: %d\n", > + __FILE__, __LINE__, > + vattr->module_name, err); > + else > + kobject_uevent(&mk->kobj, KOBJ_ADD); > kobject_put(&mk->kobj); > } > } > -- > 1.7.7.6 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] kernel/params.c: print failure information instead of 'KOBJ_ADD' to user space, when sysfs_create_file() fails. 2013-07-09 8:07 ` Rusty Russell @ 2013-07-10 2:17 ` Chen Gang F T 2013-07-10 2:35 ` Chen Gang 2013-07-11 1:53 ` Rusty Russell 0 siblings, 2 replies; 10+ messages in thread From: Chen Gang F T @ 2013-07-10 2:17 UTC (permalink / raw) To: Rusty Russell Cc: Chen Gang, khali, David.Woodhouse, linux-kernel@vger.kernel.org On 07/09/2013 04:07 PM, Rusty Russell wrote: > Chen Gang <gang.chen@asianux.com> writes: >> When sysfs_create_file() fails, recommend to print the related failure >> information. And it is useless to still 'KOBJ_ADD' to user space. >> >> Signed-off-by: Chen Gang <gang.chen@asianux.com> > > sysfs_create_file() should not fail during boot, should it? > Hmm..., please reference locate_module_kobject() in "kernel/params.c", which is an '__init' function, and also call sysfs_create_file(), it processes the related error. So I recommend to get the check too in version_sysfs_builtin(). Thanks. > Cheers, > Rusty. > >> --- >> kernel/params.c | 8 +++++++- >> 1 files changed, 7 insertions(+), 1 deletions(-) >> >> diff --git a/kernel/params.c b/kernel/params.c >> index 440e65d..f5299c1 100644 >> --- a/kernel/params.c >> +++ b/kernel/params.c >> @@ -845,7 +845,13 @@ static void __init version_sysfs_builtin(void) >> mk = locate_module_kobject(vattr->module_name); >> if (mk) { >> err = sysfs_create_file(&mk->kobj, &vattr->mattr.attr); >> - kobject_uevent(&mk->kobj, KOBJ_ADD); >> + if (err) >> + printk(KERN_WARNING >> + "%s (%d): sysfs_create_file fail for %s, err: %d\n", >> + __FILE__, __LINE__, >> + vattr->module_name, err); >> + else >> + kobject_uevent(&mk->kobj, KOBJ_ADD); >> kobject_put(&mk->kobj); >> } >> } >> -- >> 1.7.7.6 > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > -- Chen Gang ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] kernel/params.c: print failure information instead of 'KOBJ_ADD' to user space, when sysfs_create_file() fails. 2013-07-10 2:17 ` Chen Gang F T @ 2013-07-10 2:35 ` Chen Gang 2013-07-10 3:01 ` Chen Gang F T 2013-07-11 1:53 ` Rusty Russell 1 sibling, 1 reply; 10+ messages in thread From: Chen Gang @ 2013-07-10 2:35 UTC (permalink / raw) To: Chen Gang F T Cc: Rusty Russell, khali, David.Woodhouse, linux-kernel@vger.kernel.org On 07/10/2013 10:17 AM, Chen Gang F T wrote: > On 07/09/2013 04:07 PM, Rusty Russell wrote: >> Chen Gang <gang.chen@asianux.com> writes: >>> When sysfs_create_file() fails, recommend to print the related failure >>> information. And it is useless to still 'KOBJ_ADD' to user space. >>> >>> Signed-off-by: Chen Gang <gang.chen@asianux.com> >> >> sysfs_create_file() should not fail during boot, should it? >> > > Hmm..., please reference locate_module_kobject() in "kernel/params.c", > which is an '__init' function, and also call sysfs_create_file(), it > processes the related error. > > So I recommend to get the check too in version_sysfs_builtin(). > Oh, also for locate_module_kobject(), if !CONFIG_MODULES, when error occurs, it still print the information about "Adding module". Hmm..., do we need call kobject_get() before kobject_put() in failure processing block ? 740 mk = kzalloc(sizeof(struct module_kobject), GFP_KERNEL); 741 BUG_ON(!mk); 742 743 mk->mod = THIS_MODULE; 744 mk->kobj.kset = module_kset; 745 err = kobject_init_and_add(&mk->kobj, &module_ktype, NULL, 746 "%s", name); 747 #ifdef CONFIG_MODULES 748 if (!err) 749 err = sysfs_create_file(&mk->kobj, &module_uevent.attr); 750 #endif 751 if (err) { 752 kobject_put(&mk->kobj); 753 pr_crit("Adding module '%s' to sysfs failed (%d), the system may be unstable.\n", 754 name, err); 755 return NULL; 756 } 757 758 /* So that we hold reference in both cases. */ 759 kobject_get(&mk->kobj); 760 } 761 762 return mk; 763 } > Thanks. > >> Cheers, >> Rusty. >> >>> --- >>> kernel/params.c | 8 +++++++- >>> 1 files changed, 7 insertions(+), 1 deletions(-) >>> >>> diff --git a/kernel/params.c b/kernel/params.c >>> index 440e65d..f5299c1 100644 >>> --- a/kernel/params.c >>> +++ b/kernel/params.c >>> @@ -845,7 +845,13 @@ static void __init version_sysfs_builtin(void) >>> mk = locate_module_kobject(vattr->module_name); >>> if (mk) { >>> err = sysfs_create_file(&mk->kobj, &vattr->mattr.attr); >>> - kobject_uevent(&mk->kobj, KOBJ_ADD); >>> + if (err) >>> + printk(KERN_WARNING >>> + "%s (%d): sysfs_create_file fail for %s, err: %d\n", >>> + __FILE__, __LINE__, >>> + vattr->module_name, err); >>> + else >>> + kobject_uevent(&mk->kobj, KOBJ_ADD); >>> kobject_put(&mk->kobj); >>> } >>> } >>> -- >>> 1.7.7.6 >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> Please read the FAQ at http://www.tux.org/lkml/ >> > > -- Chen Gang ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] kernel/params.c: print failure information instead of 'KOBJ_ADD' to user space, when sysfs_create_file() fails. 2013-07-10 2:35 ` Chen Gang @ 2013-07-10 3:01 ` Chen Gang F T 2013-07-11 23:45 ` Chen Gang 0 siblings, 1 reply; 10+ messages in thread From: Chen Gang F T @ 2013-07-10 3:01 UTC (permalink / raw) To: Chen Gang Cc: Rusty Russell, khali, David.Woodhouse, linux-kernel@vger.kernel.org On 07/10/2013 10:35 AM, Chen Gang wrote: > On 07/10/2013 10:17 AM, Chen Gang F T wrote: >> On 07/09/2013 04:07 PM, Rusty Russell wrote: >>> Chen Gang <gang.chen@asianux.com> writes: >>>> When sysfs_create_file() fails, recommend to print the related failure >>>> information. And it is useless to still 'KOBJ_ADD' to user space. >>>> >>>> Signed-off-by: Chen Gang <gang.chen@asianux.com> >>> >>> sysfs_create_file() should not fail during boot, should it? >>> >> >> Hmm..., please reference locate_module_kobject() in "kernel/params.c", >> which is an '__init' function, and also call sysfs_create_file(), it >> processes the related error. >> >> So I recommend to get the check too in version_sysfs_builtin(). >> > > Oh, also for locate_module_kobject(), if !CONFIG_MODULES, when error > occurs, it still print the information about "Adding module". > > Hmm..., do we need call kobject_get() before kobject_put() in failure > processing block ? > Oh, sorry for what I said for kobject_get/put() items above, it is incorrect. What about the diff below for kobject_get() ? -------------------------------diff begin------------------------------- diff --git a/kernel/params.c b/kernel/params.c index 440e65d..ef8d720 100644 --- a/kernel/params.c +++ b/kernel/params.c @@ -754,11 +754,11 @@ static struct module_kobject * __init locate_module_kobject(const char *name) name, err); return NULL; } - - /* So that we hold reference in both cases. */ - kobject_get(&mk->kobj); } + /* So that we hold reference in both cases. */ + kobject_get(&mk->kobj); + return mk; } -------------------------------diff end--------------------------------- And it also need add additional kobject_put(), if we really need process the failure in version_sysfs_builtin(). Thanks. > > 740 mk = kzalloc(sizeof(struct module_kobject), GFP_KERNEL); > 741 BUG_ON(!mk); > 742 > 743 mk->mod = THIS_MODULE; > 744 mk->kobj.kset = module_kset; > 745 err = kobject_init_and_add(&mk->kobj, &module_ktype, NULL, > 746 "%s", name); > 747 #ifdef CONFIG_MODULES > 748 if (!err) > 749 err = sysfs_create_file(&mk->kobj, &module_uevent.attr); > 750 #endif > 751 if (err) { > 752 kobject_put(&mk->kobj); > 753 pr_crit("Adding module '%s' to sysfs failed (%d), the system may be unstable.\n", > 754 name, err); > 755 return NULL; > 756 } > 757 > 758 /* So that we hold reference in both cases. */ > 759 kobject_get(&mk->kobj); > 760 } > 761 > 762 return mk; > 763 } > > >> Thanks. >> >>> Cheers, >>> Rusty. >>> >>>> --- >>>> kernel/params.c | 8 +++++++- >>>> 1 files changed, 7 insertions(+), 1 deletions(-) >>>> >>>> diff --git a/kernel/params.c b/kernel/params.c >>>> index 440e65d..f5299c1 100644 >>>> --- a/kernel/params.c >>>> +++ b/kernel/params.c >>>> @@ -845,7 +845,13 @@ static void __init version_sysfs_builtin(void) >>>> mk = locate_module_kobject(vattr->module_name); >>>> if (mk) { >>>> err = sysfs_create_file(&mk->kobj, &vattr->mattr.attr); >>>> - kobject_uevent(&mk->kobj, KOBJ_ADD); >>>> + if (err) >>>> + printk(KERN_WARNING >>>> + "%s (%d): sysfs_create_file fail for %s, err: %d\n", >>>> + __FILE__, __LINE__, >>>> + vattr->module_name, err); >>>> + else >>>> + kobject_uevent(&mk->kobj, KOBJ_ADD); >>>> kobject_put(&mk->kobj); >>>> } >>>> } >>>> -- >>>> 1.7.7.6 >>> -- >>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >>> the body of a message to majordomo@vger.kernel.org >>> More majordomo info at http://vger.kernel.org/majordomo-info.html >>> Please read the FAQ at http://www.tux.org/lkml/ >>> >> >> > > -- Chen Gang ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] kernel/params.c: print failure information instead of 'KOBJ_ADD' to user space, when sysfs_create_file() fails. 2013-07-10 3:01 ` Chen Gang F T @ 2013-07-11 23:45 ` Chen Gang 0 siblings, 0 replies; 10+ messages in thread From: Chen Gang @ 2013-07-11 23:45 UTC (permalink / raw) To: Chen Gang F T Cc: Rusty Russell, khali, David.Woodhouse, linux-kernel@vger.kernel.org On 07/10/2013 11:01 AM, Chen Gang F T wrote: > >> > Hmm..., do we need call kobject_get() before kobject_put() in failure >> > processing block ? >> > > Oh, sorry for what I said for kobject_get/put() items above, it is > incorrect. > > What about the diff below for kobject_get() ? > > -------------------------------diff begin------------------------------- > > diff --git a/kernel/params.c b/kernel/params.c > index 440e65d..ef8d720 100644 > --- a/kernel/params.c > +++ b/kernel/params.c > @@ -754,11 +754,11 @@ static struct module_kobject * __init locate_module_kobject(const char *name) > name, err); > return NULL; > } > - > - /* So that we hold reference in both cases. */ > - kobject_get(&mk->kobj); > } > > + /* So that we hold reference in both cases. */ > + kobject_get(&mk->kobj); > + > return mk; > } > > -------------------------------diff end--------------------------------- > Sorry again, this diff is incorrect, the original implementation has no issues. > And it also need add additional kobject_put(), if we really need > process the failure in version_sysfs_builtin(). If need process failure, we really need it, but now, we only use BUG_ON() is enough. Thanks. -- Chen Gang ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] kernel/params.c: print failure information instead of 'KOBJ_ADD' to user space, when sysfs_create_file() fails. 2013-07-10 2:17 ` Chen Gang F T 2013-07-10 2:35 ` Chen Gang @ 2013-07-11 1:53 ` Rusty Russell 2013-07-11 2:57 ` Chen Gang 2013-07-11 4:06 ` [PATCH v2] kernel/params.c: add/modify failure processing code " Chen Gang 1 sibling, 2 replies; 10+ messages in thread From: Rusty Russell @ 2013-07-11 1:53 UTC (permalink / raw) To: Chen Gang F T Cc: Chen Gang, khali, David.Woodhouse, linux-kernel@vger.kernel.org Chen Gang F T <chen.gang.flying.transformer@gmail.com> writes: > On 07/09/2013 04:07 PM, Rusty Russell wrote: >> Chen Gang <gang.chen@asianux.com> writes: >>> When sysfs_create_file() fails, recommend to print the related failure >>> information. And it is useless to still 'KOBJ_ADD' to user space. >>> >>> Signed-off-by: Chen Gang <gang.chen@asianux.com> >> >> sysfs_create_file() should not fail during boot, should it? >> > > Hmm..., please reference locate_module_kobject() in "kernel/params.c", > which is an '__init' function, and also call sysfs_create_file(), it > processes the related error. > > So I recommend to get the check too in version_sysfs_builtin(). It still can't fail. sysfs_create_file() can fail due to OOM (not at boot) or name duplication (not here). You can BUG_ON() if you want. And feel free to fix locate_module_kobject() in a separate patch. Cheers, Rusty. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] kernel/params.c: print failure information instead of 'KOBJ_ADD' to user space, when sysfs_create_file() fails. 2013-07-11 1:53 ` Rusty Russell @ 2013-07-11 2:57 ` Chen Gang 2013-07-11 4:06 ` [PATCH v2] kernel/params.c: add/modify failure processing code " Chen Gang 1 sibling, 0 replies; 10+ messages in thread From: Chen Gang @ 2013-07-11 2:57 UTC (permalink / raw) To: Rusty Russell Cc: Chen Gang F T, khali, David.Woodhouse, linux-kernel@vger.kernel.org On 07/11/2013 09:53 AM, Rusty Russell wrote: > Chen Gang F T <chen.gang.flying.transformer@gmail.com> writes: >> > On 07/09/2013 04:07 PM, Rusty Russell wrote: >>> >> Chen Gang <gang.chen@asianux.com> writes: >>>> >>> When sysfs_create_file() fails, recommend to print the related failure >>>> >>> information. And it is useless to still 'KOBJ_ADD' to user space. >>>> >>> >>>> >>> Signed-off-by: Chen Gang <gang.chen@asianux.com> >>> >> >>> >> sysfs_create_file() should not fail during boot, should it? >>> >> >> > >> > Hmm..., please reference locate_module_kobject() in "kernel/params.c", >> > which is an '__init' function, and also call sysfs_create_file(), it >> > processes the related error. >> > >> > So I recommend to get the check too in version_sysfs_builtin(). > It still can't fail. sysfs_create_file() can fail due to OOM (not at > boot) or name duplication (not here). > > You can BUG_ON() if you want. > OK, thanks, I will send patch v2 for it. > And feel free to fix locate_module_kobject() in a separate patch. OK, thanks, I will send related patch for it. :-) Thanks. -- Chen Gang ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2] kernel/params.c: add/modify failure processing code when sysfs_create_file() fails. 2013-07-11 1:53 ` Rusty Russell 2013-07-11 2:57 ` Chen Gang @ 2013-07-11 4:06 ` Chen Gang 2013-07-22 2:41 ` Chen Gang 1 sibling, 1 reply; 10+ messages in thread From: Chen Gang @ 2013-07-11 4:06 UTC (permalink / raw) To: Rusty Russell; +Cc: khali, David.Woodhouse, linux-kernel@vger.kernel.org When sysfs_create_file() fails, need consider about it. And process it with BUG_ON(), because sysfs_create_file() can fail due to OOM (not at boot) or name duplication (not here). Also correct the error printing information when failure occurs. Signed-off-by: Chen Gang <gang.chen@asianux.com> --- kernel/params.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel/params.c b/kernel/params.c index 440e65d..3d70f90 100644 --- a/kernel/params.c +++ b/kernel/params.c @@ -745,12 +745,14 @@ static struct module_kobject * __init locate_module_kobject(const char *name) err = kobject_init_and_add(&mk->kobj, &module_ktype, NULL, "%s", name); #ifdef CONFIG_MODULES - if (!err) + if (!err) { err = sysfs_create_file(&mk->kobj, &module_uevent.attr); + BUG_ON(err); + } #endif if (err) { kobject_put(&mk->kobj); - pr_crit("Adding module '%s' to sysfs failed (%d), the system may be unstable.\n", + pr_crit("Initializing and adding module '%s' failed (%d), the system may be unstable.\n", name, err); return NULL; } @@ -845,6 +847,7 @@ static void __init version_sysfs_builtin(void) mk = locate_module_kobject(vattr->module_name); if (mk) { err = sysfs_create_file(&mk->kobj, &vattr->mattr.attr); + BUG_ON(err); kobject_uevent(&mk->kobj, KOBJ_ADD); kobject_put(&mk->kobj); } -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2] kernel/params.c: add/modify failure processing code when sysfs_create_file() fails. 2013-07-11 4:06 ` [PATCH v2] kernel/params.c: add/modify failure processing code " Chen Gang @ 2013-07-22 2:41 ` Chen Gang 0 siblings, 0 replies; 10+ messages in thread From: Chen Gang @ 2013-07-22 2:41 UTC (permalink / raw) To: Rusty Russell; +Cc: khali, David.Woodhouse, linux-kernel@vger.kernel.org Hello Maintainers: Please help check this patch, when you have time. Thanks. On 07/11/2013 12:06 PM, Chen Gang wrote: > When sysfs_create_file() fails, need consider about it. And process it > with BUG_ON(), because sysfs_create_file() can fail due to OOM (not at > boot) or name duplication (not here). > > Also correct the error printing information when failure occurs. > > Signed-off-by: Chen Gang <gang.chen@asianux.com> > --- > kernel/params.c | 7 +++++-- > 1 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/kernel/params.c b/kernel/params.c > index 440e65d..3d70f90 100644 > --- a/kernel/params.c > +++ b/kernel/params.c > @@ -745,12 +745,14 @@ static struct module_kobject * __init locate_module_kobject(const char *name) > err = kobject_init_and_add(&mk->kobj, &module_ktype, NULL, > "%s", name); > #ifdef CONFIG_MODULES > - if (!err) > + if (!err) { > err = sysfs_create_file(&mk->kobj, &module_uevent.attr); > + BUG_ON(err); > + } > #endif > if (err) { > kobject_put(&mk->kobj); > - pr_crit("Adding module '%s' to sysfs failed (%d), the system may be unstable.\n", > + pr_crit("Initializing and adding module '%s' failed (%d), the system may be unstable.\n", > name, err); > return NULL; > } > @@ -845,6 +847,7 @@ static void __init version_sysfs_builtin(void) > mk = locate_module_kobject(vattr->module_name); > if (mk) { > err = sysfs_create_file(&mk->kobj, &vattr->mattr.attr); > + BUG_ON(err); > kobject_uevent(&mk->kobj, KOBJ_ADD); > kobject_put(&mk->kobj); > } > -- Chen Gang ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2013-07-22 2:42 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-07-09 3:37 [PATCH] kernel/params.c: print failure information instead of 'KOBJ_ADD' to user space, when sysfs_create_file() fails Chen Gang 2013-07-09 8:07 ` Rusty Russell 2013-07-10 2:17 ` Chen Gang F T 2013-07-10 2:35 ` Chen Gang 2013-07-10 3:01 ` Chen Gang F T 2013-07-11 23:45 ` Chen Gang 2013-07-11 1:53 ` Rusty Russell 2013-07-11 2:57 ` Chen Gang 2013-07-11 4:06 ` [PATCH v2] kernel/params.c: add/modify failure processing code " Chen Gang 2013-07-22 2:41 ` Chen Gang
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).