From: Eric W. Biederman <[EMAIL PROTECTED]> - unquoted This patch modifies the startup of kafscmd, kafsasyncd, and kafstimod to use kthread_run instead of a combination of kernel_thread and daemonize making the code slightly simpler and more maintainable.
In addition since by default all signals are ignored when delivered to a kernel thread the code to flush signals has been removed. Cc: David Howells <[EMAIL PROTECTED]> Signed-off-by: Eric W. Biederman <[EMAIL PROTECTED]> --- fs/afs/cmservice.c | 10 +++++----- fs/afs/internal.h | 11 ----------- fs/afs/kafsasyncd.c | 17 ++++++----------- fs/afs/kafstimod.c | 16 ++++++---------- 4 files changed, 17 insertions(+), 37 deletions(-) diff --git a/fs/afs/cmservice.c b/fs/afs/cmservice.c index 3d097fd..f7e2355 100644 --- a/fs/afs/cmservice.c +++ b/fs/afs/cmservice.c @@ -13,6 +13,7 @@ #include <linux/init.h> #include <linux/sched.h> #include <linux/completion.h> +#include <linux/kthread.h> #include "server.h" #include "cell.h" #include "transport.h" @@ -120,8 +121,6 @@ static int kafscmd(void *arg) printk(KERN_INFO "kAFS: Started kafscmd %d\n", current->pid); - daemonize("kafscmd"); - complete(&kafscmd_alive); /* loop around looking for things to attend to */ @@ -133,7 +132,6 @@ static int kafscmd(void *arg) for (;;) { set_current_state(TASK_INTERRUPTIBLE); if (!list_empty(&kafscmd_attention_list) || - signal_pending(current) || kafscmd_die) break; @@ -297,8 +295,10 @@ int afscm_start(void) down_write(&afscm_sem); if (!afscm_usage) { - ret = kernel_thread(kafscmd, NULL, 0); - if (ret < 0) + struct task_struct *task; + task = kthread_run(kafscmd, NULL, "kafscmd"); + ret = PTR_ERR(task); + if (IS_ERR(task)) goto out; wait_for_completion(&kafscmd_alive); diff --git a/fs/afs/internal.h b/fs/afs/internal.h index 5151d5d..2d667b7 100644 --- a/fs/afs/internal.h +++ b/fs/afs/internal.h @@ -40,17 +40,6 @@ #define _net(FMT, a...) do { } while(0) #endif -static inline void afs_discard_my_signals(void) -{ - while (signal_pending(current)) { - siginfo_t sinfo; - - spin_lock_irq(¤t->sighand->siglock); - dequeue_signal(current,¤t->blocked, &sinfo); - spin_unlock_irq(¤t->sighand->siglock); - } -} - /* * cell.c */ diff --git a/fs/afs/kafsasyncd.c b/fs/afs/kafsasyncd.c index 615df24..ead025f 100644 --- a/fs/afs/kafsasyncd.c +++ b/fs/afs/kafsasyncd.c @@ -21,6 +21,7 @@ #include <linux/sched.h> #include <linux/completion.h> #include <linux/freezer.h> +#include <linux/kthread.h> #include "cell.h" #include "server.h" #include "volume.h" @@ -56,15 +57,15 @@ static void kafsasyncd_null_call_error_func(struct rxrpc_call *call) */ int afs_kafsasyncd_start(void) { - int ret; + struct task_struct *task; - ret = kernel_thread(kafsasyncd, NULL, 0); - if (ret < 0) - return ret; + task = kthread_run(kafsasyncd, NULL, "kafsasyncd"); + if (IS_ERR(task)) + return PTR_ERR(task); wait_for_completion(&kafsasyncd_alive); - return ret; + return 0; } /* end afs_kafsasyncd_start() */ /*****************************************************************************/ @@ -95,8 +96,6 @@ static int kafsasyncd(void *arg) printk("kAFS: Started kafsasyncd %d\n", current->pid); - daemonize("kafsasyncd"); - complete(&kafsasyncd_alive); /* loop around looking for things to attend to */ @@ -106,7 +105,6 @@ static int kafsasyncd(void *arg) for (;;) { if (!list_empty(&kafsasyncd_async_attnq) || - signal_pending(current) || kafsasyncd_die) break; @@ -119,9 +117,6 @@ static int kafsasyncd(void *arg) try_to_freeze(); - /* discard pending signals */ - afs_discard_my_signals(); - die = kafsasyncd_die; /* deal with the next asynchronous operation requiring diff --git a/fs/afs/kafstimod.c b/fs/afs/kafstimod.c index 694344e..caeac88 100644 --- a/fs/afs/kafstimod.c +++ b/fs/afs/kafstimod.c @@ -14,6 +14,7 @@ #include <linux/sched.h> #include <linux/completion.h> #include <linux/freezer.h> +#include <linux/kthread.h> #include "cell.h" #include "volume.h" #include "kafstimod.h" @@ -36,15 +37,15 @@ static int kafstimod(void *arg); */ int afs_kafstimod_start(void) { - int ret; + struct task_struct *task; - ret = kernel_thread(kafstimod, NULL, 0); - if (ret < 0) - return ret; + task = kthread_run(kafstimod, NULL, "kafstimod"); + if (IS_ERR(task)) + return PTR_ERR(task); wait_for_completion(&kafstimod_alive); - return ret; + return 0; } /* end afs_kafstimod_start() */ /*****************************************************************************/ @@ -72,8 +73,6 @@ static int kafstimod(void *arg) printk("kAFS: Started kafstimod %d\n", current->pid); - daemonize("kafstimod"); - complete(&kafstimod_alive); /* loop around looking for things to attend to */ @@ -94,9 +93,6 @@ static int kafstimod(void *arg) try_to_freeze(); - /* discard pending signals */ - afs_discard_my_signals(); - /* work out the time to elapse before the next event */ spin_lock(&kafstimod_lock); if (list_empty(&kafstimod_list)) { -- 1.5.0.g53756 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/