From: Jan Kara <jack@suse.cz>
To: Christoph Hellwig <hch@infradead.org>
Cc: jack@suse.cz, linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 6/6] quota: rename default quotactl methods to dqout_
Date: Tue, 18 May 2010 01:09:17 +0200 [thread overview]
Message-ID: <20100517230917.GL3364@quack.suse.cz> (raw)
In-Reply-To: <20100512194454.393853651@bombadil.infradead.org>
On Wed 12-05-10 15:44:14, Christoph Hellwig wrote:
> Follow the dqout_* style used elsewhere in dquot.c.
^^^^^ dquot
And we'll need ext2 conversion here as well...
Honza
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
>
> Index: linux-2.6/fs/ext3/super.c
> ===================================================================
> --- linux-2.6.orig/fs/ext3/super.c 2010-05-10 23:51:46.167023195 +0200
> +++ linux-2.6/fs/ext3/super.c 2010-05-10 23:52:03.792022985 +0200
> @@ -769,12 +769,12 @@ static const struct dquot_operations ext
>
> static const struct quotactl_ops ext3_qctl_operations = {
> .quota_on = ext3_quota_on,
> - .quota_off = vfs_quota_off,
> - .quota_sync = vfs_quota_sync,
> - .get_info = vfs_get_dqinfo,
> - .set_info = vfs_set_dqinfo,
> - .get_dqblk = vfs_get_dqblk,
> - .set_dqblk = vfs_set_dqblk
> + .quota_off = dquot_quota_off,
> + .quota_sync = dquot_quota_sync,
> + .get_info = dquot_get_dqinfo,
> + .set_info = dquot_set_dqinfo,
> + .get_dqblk = dquot_get_dqblk,
> + .set_dqblk = dquot_set_dqblk
> };
> #endif
>
> @@ -1529,7 +1529,7 @@ static void ext3_orphan_cleanup (struct
> /* Turn quotas off */
> for (i = 0; i < MAXQUOTAS; i++) {
> if (sb_dqopt(sb)->files[i])
> - vfs_quota_off(sb, i);
> + dquot_quota_off(sb, i);
> }
> #endif
> sb->s_flags = s_flags; /* Restore MS_RDONLY status */
> @@ -2862,8 +2862,8 @@ static int ext3_write_info(struct super_
> */
> static int ext3_quota_on_mount(struct super_block *sb, int type)
> {
> - return vfs_quota_on_mount(sb, EXT3_SB(sb)->s_qf_names[type],
> - EXT3_SB(sb)->s_jquota_fmt, type);
> + return dquot_quota_on_mount(sb, EXT3_SB(sb)->s_qf_names[type],
> + EXT3_SB(sb)->s_jquota_fmt, type);
> }
>
> /*
> @@ -2914,7 +2914,7 @@ static int ext3_quota_on(struct super_bl
> }
> }
>
> - err = vfs_quota_on_path(sb, type, format_id, &path);
> + err = dquot_quota_on_path(sb, type, format_id, &path);
> path_put(&path);
> return err;
> }
> Index: linux-2.6/fs/ext4/super.c
> ===================================================================
> --- linux-2.6.orig/fs/ext4/super.c 2010-05-10 23:51:46.174022986 +0200
> +++ linux-2.6/fs/ext4/super.c 2010-05-10 23:52:03.793011182 +0200
> @@ -1083,12 +1083,12 @@ static const struct dquot_operations ext
>
> static const struct quotactl_ops ext4_qctl_operations = {
> .quota_on = ext4_quota_on,
> - .quota_off = vfs_quota_off,
> - .quota_sync = vfs_quota_sync,
> - .get_info = vfs_get_dqinfo,
> - .set_info = vfs_set_dqinfo,
> - .get_dqblk = vfs_get_dqblk,
> - .set_dqblk = vfs_set_dqblk
> + .quota_off = dquot_quota_off,
> + .quota_sync = dquot_quota_sync,
> + .get_info = dquot_get_dqinfo,
> + .set_info = dquot_set_dqinfo,
> + .get_dqblk = dquot_get_dqblk,
> + .set_dqblk = dquot_set_dqblk
> };
> #endif
>
> @@ -2053,7 +2053,7 @@ static void ext4_orphan_cleanup(struct s
> /* Turn quotas off */
> for (i = 0; i < MAXQUOTAS; i++) {
> if (sb_dqopt(sb)->files[i])
> - vfs_quota_off(sb, i);
> + dquot_quota_off(sb, i);
> }
> #endif
> sb->s_flags = s_flags; /* Restore MS_RDONLY status */
> @@ -3916,8 +3916,8 @@ static int ext4_write_info(struct super_
> */
> static int ext4_quota_on_mount(struct super_block *sb, int type)
> {
> - return vfs_quota_on_mount(sb, EXT4_SB(sb)->s_qf_names[type],
> - EXT4_SB(sb)->s_jquota_fmt, type);
> + return dquot_quota_on_mount(sb, EXT4_SB(sb)->s_qf_names[type],
> + EXT4_SB(sb)->s_jquota_fmt, type);
> }
>
> /*
> @@ -3969,7 +3969,7 @@ static int ext4_quota_on(struct super_bl
> }
> }
>
> - err = vfs_quota_on_path(sb, type, format_id, &path);
> + err = dquot_quota_on_path(sb, type, format_id, &path);
> path_put(&path);
> return err;
> }
> Index: linux-2.6/fs/jfs/super.c
> ===================================================================
> --- linux-2.6.orig/fs/jfs/super.c 2010-05-10 23:51:46.188004338 +0200
> +++ linux-2.6/fs/jfs/super.c 2010-05-10 23:52:03.797254093 +0200
> @@ -481,7 +481,7 @@ static int jfs_fill_super(struct super_b
> sb->s_export_op = &jfs_export_operations;
> #ifdef CONFIG_QUOTA
> sb->dq_op = &dquot_operations;
> - sb->s_qcop = &vfs_quotactl_ops;
> + sb->s_qcop = &dquot_quotactl_ops;
> #endif
>
> /*
> Index: linux-2.6/fs/ocfs2/super.c
> ===================================================================
> --- linux-2.6.orig/fs/ocfs2/super.c 2010-05-10 23:51:46.200004478 +0200
> +++ linux-2.6/fs/ocfs2/super.c 2010-05-10 23:52:03.801276931 +0200
> @@ -906,8 +906,8 @@ static int ocfs2_enable_quotas(struct oc
> status = -ENOENT;
> goto out_quota_off;
> }
> - status = vfs_quota_enable(inode[type], type, QFMT_OCFS2,
> - DQUOT_USAGE_ENABLED);
> + status = dquot_enable(inode[type], type, QFMT_OCFS2,
> + DQUOT_USAGE_ENABLED);
> if (status < 0)
> goto out_quota_off;
> }
> @@ -956,8 +956,8 @@ static int ocfs2_quota_on(struct super_b
> if (!OCFS2_HAS_RO_COMPAT_FEATURE(sb, feature[type]))
> return -EINVAL;
>
> - return vfs_quota_enable(sb_dqopt(sb)->files[type], type,
> - format_id, DQUOT_LIMITS_ENABLED);
> + return dquot_enable(sb_dqopt(sb)->files[type], type,
> + format_id, DQUOT_LIMITS_ENABLED);
> }
>
> /* Handle quota off quotactl */
> @@ -969,11 +969,11 @@ static int ocfs2_quota_off(struct super_
> static const struct quotactl_ops ocfs2_quotactl_ops = {
> .quota_on = ocfs2_quota_on,
> .quota_off = ocfs2_quota_off,
> - .quota_sync = vfs_quota_sync,
> - .get_info = vfs_get_dqinfo,
> - .set_info = vfs_set_dqinfo,
> - .get_dqblk = vfs_get_dqblk,
> - .set_dqblk = vfs_set_dqblk,
> + .quota_sync = dquot_quota_sync,
> + .get_info = dquot_get_dqinfo,
> + .set_info = dquot_set_dqinfo,
> + .get_dqblk = dquot_get_dqblk,
> + .set_dqblk = dquot_set_dqblk,
> };
>
> static int ocfs2_fill_super(struct super_block *sb, void *data, int silent)
> Index: linux-2.6/fs/quota/dquot.c
> ===================================================================
> --- linux-2.6.orig/fs/quota/dquot.c 2010-05-10 23:51:46.211254233 +0200
> +++ linux-2.6/fs/quota/dquot.c 2010-05-10 23:52:03.809005664 +0200
> @@ -584,7 +584,7 @@ out:
> }
> EXPORT_SYMBOL(dquot_scan_active);
>
> -int vfs_quota_sync(struct super_block *sb, int type, int wait)
> +int dquot_quota_sync(struct super_block *sb, int type, int wait)
> {
> struct list_head *dirty;
> struct dquot *dquot;
> @@ -656,7 +656,7 @@ int vfs_quota_sync(struct super_block *s
>
> return 0;
> }
> -EXPORT_SYMBOL(vfs_quota_sync);
> +EXPORT_SYMBOL(dquot_quota_sync);
>
> /* Free unused dquots from cache */
> static void prune_dqcache(int count)
> @@ -2007,12 +2007,12 @@ put_inodes:
> }
> EXPORT_SYMBOL(dquot_disable);
>
> -int vfs_quota_off(struct super_block *sb, int type)
> +int dquot_quota_off(struct super_block *sb, int type)
> {
> return dquot_disable(sb, type,
> DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED);
> }
> -EXPORT_SYMBOL(vfs_quota_off);
> +EXPORT_SYMBOL(dquot_quota_off);
>
> /*
> * Turn quotas on on a device
> @@ -2173,7 +2173,7 @@ int dquot_resume(struct super_block *sb,
> }
> EXPORT_SYMBOL(dquot_resume);
>
> -int vfs_quota_on_path(struct super_block *sb, int type, int format_id,
> +int dquot_quota_on_path(struct super_block *sb, int type, int format_id,
> struct path *path)
> {
> int error = security_quota_on(path->dentry);
> @@ -2188,28 +2188,28 @@ int vfs_quota_on_path(struct super_block
> DQUOT_LIMITS_ENABLED);
> return error;
> }
> -EXPORT_SYMBOL(vfs_quota_on_path);
> +EXPORT_SYMBOL(dquot_quota_on_path);
>
> -int vfs_quota_on(struct super_block *sb, int type, int format_id, char *name)
> +int dquot_quota_on(struct super_block *sb, int type, int format_id, char *name)
> {
> struct path path;
> int error;
>
> error = kern_path(name, LOOKUP_FOLLOW, &path);
> if (!error) {
> - error = vfs_quota_on_path(sb, type, format_id, &path);
> + error = dquot_quota_on_path(sb, type, format_id, &path);
> path_put(&path);
> }
> return error;
> }
> -EXPORT_SYMBOL(vfs_quota_on);
> +EXPORT_SYMBOL(dquot_quota_on);
>
> /*
> * More powerful function for turning on quotas allowing setting
> * of individual quota flags
> */
> -int vfs_quota_enable(struct inode *inode, int type, int format_id,
> - unsigned int flags)
> +int dquot_enable(struct inode *inode, int type, int format_id,
> + unsigned int flags)
> {
> int ret = 0;
> struct super_block *sb = inode->i_sb;
> @@ -2249,13 +2249,13 @@ out_lock:
> load_quota:
> return vfs_load_quota_inode(inode, type, format_id, flags);
> }
> -EXPORT_SYMBOL(vfs_quota_enable);
> +EXPORT_SYMBOL(dquot_enable);
>
> /*
> * This function is used when filesystem needs to initialize quotas
> * during mount time.
> */
> -int vfs_quota_on_mount(struct super_block *sb, char *qf_name,
> +int dquot_quota_on_mount(struct super_block *sb, char *qf_name,
> int format_id, int type)
> {
> struct dentry *dentry;
> @@ -2281,7 +2281,7 @@ out:
> dput(dentry);
> return error;
> }
> -EXPORT_SYMBOL(vfs_quota_on_mount);
> +EXPORT_SYMBOL(dquot_quota_on_mount);
>
> static inline qsize_t qbtos(qsize_t blocks)
> {
> @@ -2316,8 +2316,8 @@ static void do_get_dqblk(struct dquot *d
> spin_unlock(&dq_data_lock);
> }
>
> -int vfs_get_dqblk(struct super_block *sb, int type, qid_t id,
> - struct fs_disk_quota *di)
> +int dquot_get_dqblk(struct super_block *sb, int type, qid_t id,
> + struct fs_disk_quota *di)
> {
> struct dquot *dquot;
>
> @@ -2329,7 +2329,7 @@ int vfs_get_dqblk(struct super_block *sb
>
> return 0;
> }
> -EXPORT_SYMBOL(vfs_get_dqblk);
> +EXPORT_SYMBOL(dquot_get_dqblk);
>
> #define VFS_FS_DQ_MASK \
> (FS_DQ_BCOUNT | FS_DQ_BSOFT | FS_DQ_BHARD | \
> @@ -2428,7 +2428,7 @@ static int do_set_dqblk(struct dquot *dq
> return 0;
> }
>
> -int vfs_set_dqblk(struct super_block *sb, int type, qid_t id,
> +int dquot_set_dqblk(struct super_block *sb, int type, qid_t id,
> struct fs_disk_quota *di)
> {
> struct dquot *dquot;
> @@ -2444,10 +2444,10 @@ int vfs_set_dqblk(struct super_block *sb
> out:
> return rc;
> }
> -EXPORT_SYMBOL(vfs_set_dqblk);
> +EXPORT_SYMBOL(dquot_set_dqblk);
>
> /* Generic routine for getting common part of quota file information */
> -int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii)
> +int dquot_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii)
> {
> struct mem_dqinfo *mi;
>
> @@ -2466,10 +2466,10 @@ int vfs_get_dqinfo(struct super_block *s
> mutex_unlock(&sb_dqopt(sb)->dqonoff_mutex);
> return 0;
> }
> -EXPORT_SYMBOL(vfs_get_dqinfo);
> +EXPORT_SYMBOL(dquot_get_dqinfo);
>
> /* Generic routine for setting common part of quota file information */
> -int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii)
> +int dquot_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii)
> {
> struct mem_dqinfo *mi;
> int err = 0;
> @@ -2496,16 +2496,16 @@ out:
> mutex_unlock(&sb_dqopt(sb)->dqonoff_mutex);
> return err;
> }
> -EXPORT_SYMBOL(vfs_set_dqinfo);
> +EXPORT_SYMBOL(dquot_set_dqinfo);
>
> -const struct quotactl_ops vfs_quotactl_ops = {
> - .quota_on = vfs_quota_on,
> - .quota_off = vfs_quota_off,
> - .quota_sync = vfs_quota_sync,
> - .get_info = vfs_get_dqinfo,
> - .set_info = vfs_set_dqinfo,
> - .get_dqblk = vfs_get_dqblk,
> - .set_dqblk = vfs_set_dqblk
> +const struct quotactl_ops dquot_quotactl_ops = {
> + .quota_on = dquot_quota_on,
> + .quota_off = dquot_quota_off,
> + .quota_sync = dquot_quota_sync,
> + .get_info = dquot_get_dqinfo,
> + .set_info = dquot_set_dqinfo,
> + .get_dqblk = dquot_get_dqblk,
> + .set_dqblk = dquot_set_dqblk
> };
>
>
> Index: linux-2.6/fs/reiserfs/super.c
> ===================================================================
> --- linux-2.6.orig/fs/reiserfs/super.c 2010-05-10 23:51:46.220004198 +0200
> +++ linux-2.6/fs/reiserfs/super.c 2010-05-10 23:52:03.815005943 +0200
> @@ -305,7 +305,7 @@ static int finish_unfinished(struct supe
> /* Turn quotas off */
> for (i = 0; i < MAXQUOTAS; i++) {
> if (sb_dqopt(s)->files[i])
> - vfs_quota_off(s, i);
> + dquot_quota_off(s, i);
> }
> if (ms_active_set)
> /* Restore the flag back */
> @@ -636,12 +636,12 @@ static const struct dquot_operations rei
>
> static const struct quotactl_ops reiserfs_qctl_operations = {
> .quota_on = reiserfs_quota_on,
> - .quota_off = vfs_quota_off,
> - .quota_sync = vfs_quota_sync,
> - .get_info = vfs_get_dqinfo,
> - .set_info = vfs_set_dqinfo,
> - .get_dqblk = vfs_get_dqblk,
> - .set_dqblk = vfs_set_dqblk,
> + .quota_off = dquot_quota_off,
> + .quota_sync = dquot_quota_sync,
> + .get_info = dquot_get_dqinfo,
> + .set_info = dquot_set_dqinfo,
> + .get_dqblk = dquot_get_dqblk,
> + .set_dqblk = dquot_set_dqblk,
> };
> #endif
>
> @@ -2030,8 +2030,8 @@ static int reiserfs_write_info(struct su
> */
> static int reiserfs_quota_on_mount(struct super_block *sb, int type)
> {
> - return vfs_quota_on_mount(sb, REISERFS_SB(sb)->s_qf_names[type],
> - REISERFS_SB(sb)->s_jquota_fmt, type);
> + return dquot_quota_on_mount(sb, REISERFS_SB(sb)->s_qf_names[type],
> + REISERFS_SB(sb)->s_jquota_fmt, type);
> }
>
> /*
> @@ -2091,7 +2091,7 @@ static int reiserfs_quota_on(struct supe
> if (err)
> goto out;
> }
> - err = vfs_quota_on_path(sb, type, format_id, &path);
> + err = dquot_quota_on_path(sb, type, format_id, &path);
> out:
> path_put(&path);
> return err;
> Index: linux-2.6/fs/ufs/super.c
> ===================================================================
> --- linux-2.6.orig/fs/ufs/super.c 2010-05-10 23:51:46.230004548 +0200
> +++ linux-2.6/fs/ufs/super.c 2010-05-10 23:52:03.820031087 +0200
> @@ -1046,7 +1046,7 @@ magic_found:
> sb->s_op = &ufs_super_ops;
> sb->s_export_op = &ufs_export_ops;
> #ifdef CONFIG_QUOTA
> - sb->s_qcop = &vfs_quotactl_ops;
> + sb->s_qcop = &dquot_quotactl_ops;
> sb->dq_op = NULL; /* &dquot_operations */
> #endif
>
> Index: linux-2.6/include/linux/quotaops.h
> ===================================================================
> --- linux-2.6.orig/include/linux/quotaops.h 2010-05-10 23:51:46.246274487 +0200
> +++ linux-2.6/include/linux/quotaops.h 2010-05-10 23:52:03.824276302 +0200
> @@ -54,21 +54,21 @@ int dquot_mark_dquot_dirty(struct dquot
>
> int dquot_file_open(struct inode *inode, struct file *file);
>
> -int vfs_quota_on(struct super_block *sb, int type, int format_id,
> +int dquot_quota_on(struct super_block *sb, int type, int format_id,
> char *path);
> -int vfs_quota_enable(struct inode *inode, int type, int format_id,
> +int dquot_enable(struct inode *inode, int type, int format_id,
> unsigned int flags);
> -int vfs_quota_on_path(struct super_block *sb, int type, int format_id,
> +int dquot_quota_on_path(struct super_block *sb, int type, int format_id,
> struct path *path);
> -int vfs_quota_on_mount(struct super_block *sb, char *qf_name,
> +int dquot_quota_on_mount(struct super_block *sb, char *qf_name,
> int format_id, int type);
> -int vfs_quota_off(struct super_block *sb, int type);
> -int vfs_quota_sync(struct super_block *sb, int type, int wait);
> -int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii);
> -int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii);
> -int vfs_get_dqblk(struct super_block *sb, int type, qid_t id,
> +int dquot_quota_off(struct super_block *sb, int type);
> +int dquot_quota_sync(struct super_block *sb, int type, int wait);
> +int dquot_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii);
> +int dquot_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii);
> +int dquot_get_dqblk(struct super_block *sb, int type, qid_t id,
> struct fs_disk_quota *di);
> -int vfs_set_dqblk(struct super_block *sb, int type, qid_t id,
> +int dquot_set_dqblk(struct super_block *sb, int type, qid_t id,
> struct fs_disk_quota *di);
>
> int dquot_transfer(struct inode *inode, struct iattr *iattr);
> @@ -138,7 +138,7 @@ static inline unsigned sb_any_quota_acti
> * Operations supported for diskquotas.
> */
> extern const struct dquot_operations dquot_operations;
> -extern const struct quotactl_ops vfs_quotactl_ops;
> +extern const struct quotactl_ops dquot_quotactl_ops;
>
> #else
>
> Index: linux-2.6/fs/udf/super.c
> ===================================================================
> --- linux-2.6.orig/fs/udf/super.c 2010-05-10 23:52:07.014004059 +0200
> +++ linux-2.6/fs/udf/super.c 2010-05-10 23:52:12.143256048 +0200
> @@ -1941,7 +1941,7 @@ static int udf_fill_super(struct super_b
> sb->s_op = &udf_sb_ops;
> sb->s_export_op = &udf_export_ops;
> #ifdef CONFIG_QUOTA
> - sb->s_qcop = &vfs_quotactl_ops;
> + sb->s_qcop = &dquot_quotactl_ops;
> sb->dq_op = NULL; /* &dquot_operations */
> #endif
>
>
--
Jan Kara <jack@suse.cz>
SUSE Labs, CR
next prev parent reply other threads:[~2010-05-17 23:09 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-12 19:44 [PATCH 0/6] more quota cleanups Christoph Hellwig
2010-05-12 19:44 ` [PATCH 1/6] dquot: move remount handling into the filesystem Christoph Hellwig
2010-05-17 22:34 ` Jan Kara
2010-05-19 10:55 ` Christoph Hellwig
2010-05-19 13:47 ` Jan Kara
2010-05-12 19:44 ` [PATCH 2/6] quota: kill the vfs_dq_off and vfs_dq_quota_on_remount wrappers Christoph Hellwig
2010-05-17 22:46 ` Jan Kara
2010-05-12 19:44 ` [PATCH 3/6] dquot: move unmount handling into the filesystem Christoph Hellwig
2010-05-17 22:58 ` Jan Kara
2010-05-19 11:03 ` Christoph Hellwig
2010-05-12 19:44 ` [PATCH 4/6] quota: drop remount argument to ->quota_on and ->quota_off Christoph Hellwig
2010-05-17 23:00 ` Jan Kara
2010-05-12 19:44 ` [PATCH 5/6] quota: explicitly set ->dq_op and ->s_qcop Christoph Hellwig
2010-05-17 23:06 ` Jan Kara
2010-05-19 11:07 ` Christoph Hellwig
2010-05-12 19:44 ` [PATCH 6/6] quota: rename default quotactl methods to dqout_ Christoph Hellwig
2010-05-17 23:09 ` Jan Kara [this message]
2010-05-19 11:07 ` Christoph Hellwig
-- strict thread matches above, loose matches on Subject: below --
2010-05-19 11:16 [PATCH 0/6] more quota cleanups V2 Christoph Hellwig
2010-05-19 11:16 ` [PATCH 6/6] quota: rename default quotactl methods to dqout_ Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100517230917.GL3364@quack.suse.cz \
--to=jack@suse.cz \
--cc=hch@infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).