From: Andrew Morton <akpm@linux-foundation.org>
To: Gerard Lledo <gerard.lledo@gmail.com>
Cc: dwmw2@infradead.org, kernel-janitors@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org
Subject: Re: [PATCH] [JFFS2] Move jffs2_gcd_mtd threads to the new kthread
Date: Mon, 01 Jun 2009 23:20:10 +0000 [thread overview]
Message-ID: <20090601162010.ed69436f.akpm@linux-foundation.org> (raw)
In-Reply-To: <1243585181-2997-1-git-send-email-gerard.lledo@gmail.com>
On Fri, 29 May 2009 11:19:41 +0300
Gerard Lledo <gerard.lledo@gmail.com> wrote:
> kernel_thread() is being depracated. This patch moves the jffs2 garbage
> collecting thread to the new kthread API with the minimal impact.
>
> Signed-off-by: Gerard Lledo <gerard.lledo@gmail.com>
> ---
> fs/jffs2/background.c | 22 ++++++++++++++--------
> 1 files changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/fs/jffs2/background.c b/fs/jffs2/background.c
> index e958010..077fa65 100644
> --- a/fs/jffs2/background.c
> +++ b/fs/jffs2/background.c
> @@ -15,6 +15,7 @@
> #include <linux/completion.h>
> #include <linux/sched.h>
> #include <linux/freezer.h>
> +#include <linux/kthread.h>
> #include "nodelist.h"
>
>
> @@ -31,7 +32,7 @@ void jffs2_garbage_collect_trigger(struct jffs2_sb_info *c)
> /* This must only ever be called when no GC thread is currently running */
> int jffs2_start_garbage_collect_thread(struct jffs2_sb_info *c)
> {
> - pid_t pid;
> + struct task_struct *tsk;
> int ret = 0;
>
> BUG_ON(c->gc_task);
> @@ -39,15 +40,16 @@ int jffs2_start_garbage_collect_thread(struct jffs2_sb_info *c)
> init_completion(&c->gc_thread_start);
> init_completion(&c->gc_thread_exit);
>
> - pid = kernel_thread(jffs2_garbage_collect_thread, c, CLONE_FS|CLONE_FILES);
> - if (pid < 0) {
> - printk(KERN_WARNING "fork failed for JFFS2 garbage collect thread: %d\n", -pid);
> + tsk = kthread_create(jffs2_garbage_collect_thread, c, "jffs2_gcd_mtd%d", c->mtd->index);
> + if (IS_ERR(tsk)) {
> + printk(KERN_WARNING "fork failed for JFFS2 garbage collect thread: %ld\n", -PTR_ERR(tsk));
> complete(&c->gc_thread_exit);
> - ret = pid;
> + ret = PTR_ERR(tsk);
> } else {
> - /* Wait for it... */
> - D1(printk(KERN_DEBUG "JFFS2: Garbage collect thread is pid %d\n", pid));
> + D1(printk(KERN_DEBUG "JFFS2: Garbage collect thread is pid %d\n", tsk->pid));
> + wake_up_process(tsk);
> wait_for_completion(&c->gc_thread_start);
> + ret = tsk->pid;
> }
A simple kthread_run() would be preferable here. The code presently
sort-of open-codes it.
> return ret;
Also, manipulating kernel threads via their pids is atypical and
inefficient. In-kernel it is better to refer to threads via their
task_struct*.
Fortunately all callers of this function ignore its return value so I
expect we can simply change it to be void-returning. But that's a
cleanup which would best be done in a spearate patch.
> @@ -71,7 +73,6 @@ static int jffs2_garbage_collect_thread(void *_c)
> {
> struct jffs2_sb_info *c = _c;
>
> - daemonize("jffs2_gcd_mtd%d", c->mtd->index);
> allow_signal(SIGKILL);
> allow_signal(SIGSTOP);
> allow_signal(SIGCONT);
> @@ -107,6 +108,11 @@ static int jffs2_garbage_collect_thread(void *_c)
> * the GC thread get there first. */
> schedule_timeout_interruptible(msecs_to_jiffies(50));
>
> + if (kthread_should_stop()) {
> + D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread(): kthread_stop() called.\n"));
> + goto die;
> + }
> +
> /* Put_super will send a SIGKILL and then wait on the sem.
> */
> while (signal_pending(current) || freezing(current)) {
WARNING: multiple messages have this Message-ID (diff)
From: Andrew Morton <akpm@linux-foundation.org>
To: Gerard Lledo <gerard.lledo@gmail.com>
Cc: dwmw2@infradead.org, gerard.lledo@gmail.com,
kernel-janitors@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-mtd@lists.infradead.org
Subject: Re: [PATCH] [JFFS2] Move jffs2_gcd_mtd threads to the new kthread API
Date: Mon, 1 Jun 2009 16:20:10 -0700 [thread overview]
Message-ID: <20090601162010.ed69436f.akpm@linux-foundation.org> (raw)
In-Reply-To: <1243585181-2997-1-git-send-email-gerard.lledo@gmail.com>
On Fri, 29 May 2009 11:19:41 +0300
Gerard Lledo <gerard.lledo@gmail.com> wrote:
> kernel_thread() is being depracated. This patch moves the jffs2 garbage
> collecting thread to the new kthread API with the minimal impact.
>
> Signed-off-by: Gerard Lledo <gerard.lledo@gmail.com>
> ---
> fs/jffs2/background.c | 22 ++++++++++++++--------
> 1 files changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/fs/jffs2/background.c b/fs/jffs2/background.c
> index e958010..077fa65 100644
> --- a/fs/jffs2/background.c
> +++ b/fs/jffs2/background.c
> @@ -15,6 +15,7 @@
> #include <linux/completion.h>
> #include <linux/sched.h>
> #include <linux/freezer.h>
> +#include <linux/kthread.h>
> #include "nodelist.h"
>
>
> @@ -31,7 +32,7 @@ void jffs2_garbage_collect_trigger(struct jffs2_sb_info *c)
> /* This must only ever be called when no GC thread is currently running */
> int jffs2_start_garbage_collect_thread(struct jffs2_sb_info *c)
> {
> - pid_t pid;
> + struct task_struct *tsk;
> int ret = 0;
>
> BUG_ON(c->gc_task);
> @@ -39,15 +40,16 @@ int jffs2_start_garbage_collect_thread(struct jffs2_sb_info *c)
> init_completion(&c->gc_thread_start);
> init_completion(&c->gc_thread_exit);
>
> - pid = kernel_thread(jffs2_garbage_collect_thread, c, CLONE_FS|CLONE_FILES);
> - if (pid < 0) {
> - printk(KERN_WARNING "fork failed for JFFS2 garbage collect thread: %d\n", -pid);
> + tsk = kthread_create(jffs2_garbage_collect_thread, c, "jffs2_gcd_mtd%d", c->mtd->index);
> + if (IS_ERR(tsk)) {
> + printk(KERN_WARNING "fork failed for JFFS2 garbage collect thread: %ld\n", -PTR_ERR(tsk));
> complete(&c->gc_thread_exit);
> - ret = pid;
> + ret = PTR_ERR(tsk);
> } else {
> - /* Wait for it... */
> - D1(printk(KERN_DEBUG "JFFS2: Garbage collect thread is pid %d\n", pid));
> + D1(printk(KERN_DEBUG "JFFS2: Garbage collect thread is pid %d\n", tsk->pid));
> + wake_up_process(tsk);
> wait_for_completion(&c->gc_thread_start);
> + ret = tsk->pid;
> }
A simple kthread_run() would be preferable here. The code presently
sort-of open-codes it.
> return ret;
Also, manipulating kernel threads via their pids is atypical and
inefficient. In-kernel it is better to refer to threads via their
task_struct*.
Fortunately all callers of this function ignore its return value so I
expect we can simply change it to be void-returning. But that's a
cleanup which would best be done in a spearate patch.
> @@ -71,7 +73,6 @@ static int jffs2_garbage_collect_thread(void *_c)
> {
> struct jffs2_sb_info *c = _c;
>
> - daemonize("jffs2_gcd_mtd%d", c->mtd->index);
> allow_signal(SIGKILL);
> allow_signal(SIGSTOP);
> allow_signal(SIGCONT);
> @@ -107,6 +108,11 @@ static int jffs2_garbage_collect_thread(void *_c)
> * the GC thread get there first. */
> schedule_timeout_interruptible(msecs_to_jiffies(50));
>
> + if (kthread_should_stop()) {
> + D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread(): kthread_stop() called.\n"));
> + goto die;
> + }
> +
> /* Put_super will send a SIGKILL and then wait on the sem.
> */
> while (signal_pending(current) || freezing(current)) {
WARNING: multiple messages have this Message-ID (diff)
From: Andrew Morton <akpm@linux-foundation.org>
To: Gerard Lledo <gerard.lledo@gmail.com>
Cc: kernel-janitors@vger.kernel.org, dwmw2@infradead.org,
linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org,
gerard.lledo@gmail.com
Subject: Re: [PATCH] [JFFS2] Move jffs2_gcd_mtd threads to the new kthread API
Date: Mon, 1 Jun 2009 16:20:10 -0700 [thread overview]
Message-ID: <20090601162010.ed69436f.akpm@linux-foundation.org> (raw)
In-Reply-To: <1243585181-2997-1-git-send-email-gerard.lledo@gmail.com>
On Fri, 29 May 2009 11:19:41 +0300
Gerard Lledo <gerard.lledo@gmail.com> wrote:
> kernel_thread() is being depracated. This patch moves the jffs2 garbage
> collecting thread to the new kthread API with the minimal impact.
>
> Signed-off-by: Gerard Lledo <gerard.lledo@gmail.com>
> ---
> fs/jffs2/background.c | 22 ++++++++++++++--------
> 1 files changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/fs/jffs2/background.c b/fs/jffs2/background.c
> index e958010..077fa65 100644
> --- a/fs/jffs2/background.c
> +++ b/fs/jffs2/background.c
> @@ -15,6 +15,7 @@
> #include <linux/completion.h>
> #include <linux/sched.h>
> #include <linux/freezer.h>
> +#include <linux/kthread.h>
> #include "nodelist.h"
>
>
> @@ -31,7 +32,7 @@ void jffs2_garbage_collect_trigger(struct jffs2_sb_info *c)
> /* This must only ever be called when no GC thread is currently running */
> int jffs2_start_garbage_collect_thread(struct jffs2_sb_info *c)
> {
> - pid_t pid;
> + struct task_struct *tsk;
> int ret = 0;
>
> BUG_ON(c->gc_task);
> @@ -39,15 +40,16 @@ int jffs2_start_garbage_collect_thread(struct jffs2_sb_info *c)
> init_completion(&c->gc_thread_start);
> init_completion(&c->gc_thread_exit);
>
> - pid = kernel_thread(jffs2_garbage_collect_thread, c, CLONE_FS|CLONE_FILES);
> - if (pid < 0) {
> - printk(KERN_WARNING "fork failed for JFFS2 garbage collect thread: %d\n", -pid);
> + tsk = kthread_create(jffs2_garbage_collect_thread, c, "jffs2_gcd_mtd%d", c->mtd->index);
> + if (IS_ERR(tsk)) {
> + printk(KERN_WARNING "fork failed for JFFS2 garbage collect thread: %ld\n", -PTR_ERR(tsk));
> complete(&c->gc_thread_exit);
> - ret = pid;
> + ret = PTR_ERR(tsk);
> } else {
> - /* Wait for it... */
> - D1(printk(KERN_DEBUG "JFFS2: Garbage collect thread is pid %d\n", pid));
> + D1(printk(KERN_DEBUG "JFFS2: Garbage collect thread is pid %d\n", tsk->pid));
> + wake_up_process(tsk);
> wait_for_completion(&c->gc_thread_start);
> + ret = tsk->pid;
> }
A simple kthread_run() would be preferable here. The code presently
sort-of open-codes it.
> return ret;
Also, manipulating kernel threads via their pids is atypical and
inefficient. In-kernel it is better to refer to threads via their
task_struct*.
Fortunately all callers of this function ignore its return value so I
expect we can simply change it to be void-returning. But that's a
cleanup which would best be done in a spearate patch.
> @@ -71,7 +73,6 @@ static int jffs2_garbage_collect_thread(void *_c)
> {
> struct jffs2_sb_info *c = _c;
>
> - daemonize("jffs2_gcd_mtd%d", c->mtd->index);
> allow_signal(SIGKILL);
> allow_signal(SIGSTOP);
> allow_signal(SIGCONT);
> @@ -107,6 +108,11 @@ static int jffs2_garbage_collect_thread(void *_c)
> * the GC thread get there first. */
> schedule_timeout_interruptible(msecs_to_jiffies(50));
>
> + if (kthread_should_stop()) {
> + D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread(): kthread_stop() called.\n"));
> + goto die;
> + }
> +
> /* Put_super will send a SIGKILL and then wait on the sem.
> */
> while (signal_pending(current) || freezing(current)) {
next prev parent reply other threads:[~2009-06-01 23:20 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-29 8:19 [PATCH] [JFFS2] Move jffs2_gcd_mtd threads to the new kthread API Gerard Lledo
2009-05-29 8:19 ` Gerard Lledo
2009-05-29 8:19 ` Gerard Lledo
2009-06-01 23:20 ` Andrew Morton [this message]
2009-06-01 23:20 ` Andrew Morton
2009-06-01 23:20 ` Andrew Morton
2009-06-02 11:32 ` [PATCH] [JFFS2] Move jffs2_gcd_mtd threads to the new kthread Gerard Lledo
2009-06-02 11:32 ` [PATCH] [JFFS2] Move jffs2_gcd_mtd threads to the new kthread API Gerard Lledo
2009-06-02 11:32 ` Gerard Lledo
2009-06-02 12:11 ` Gerard Lledo
2009-06-02 12:11 ` Gerard Lledo
2009-06-02 12:11 ` [PATCH] [JFFS2] jffs2_start_garbage_collect_thread() return value cleanup Gerard Lledo
2009-06-02 12:11 ` Gerard Lledo
2009-06-02 22:11 ` Andrew Morton
2009-06-02 22:11 ` Andrew Morton
2009-06-03 6:09 ` Gerard Lledo
2009-06-03 6:09 ` Gerard Lledo
2009-06-24 10:09 ` David Woodhouse
2009-06-25 3:00 ` Andrew Morton
2009-06-25 3:00 ` Andrew Morton
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=20090601162010.ed69436f.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=dwmw2@infradead.org \
--cc=gerard.lledo@gmail.com \
--cc=kernel-janitors@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.