NACK to this and following patch.--b.
On Tue, Jul 07, 2020 at 05:17:15PM +0200, Greg Kroah-Hartman wrote:
From: J. Bruce Fields bfields@redhat.com
[ Upstream commit 52782c92ac85c4e393eb4a903a62e6c24afa633f ]
It's handy to keep the kthread_fn just as a unique cookie to identify classes of kthreads. E.g. if you can verify that a given task is running your thread_fn, then you may know what sort of type kthread_data points to.
We'll use this in nfsd to pass some information into the vfs. Note it will need kthread_data() exported too.
Original-patch-by: Tejun Heo tj@kernel.org Signed-off-by: J. Bruce Fields bfields@redhat.com Signed-off-by: Sasha Levin sashal@kernel.org
include/linux/kthread.h | 1 + kernel/kthread.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+)
diff --git a/include/linux/kthread.h b/include/linux/kthread.h index 8bbcaad7ef0f4..c2a274b79c429 100644 --- a/include/linux/kthread.h +++ b/include/linux/kthread.h @@ -57,6 +57,7 @@ bool kthread_should_stop(void); bool kthread_should_park(void); bool __kthread_should_park(struct task_struct *k); bool kthread_freezable_should_stop(bool *was_frozen); +void *kthread_func(struct task_struct *k); void *kthread_data(struct task_struct *k); void *kthread_probe_data(struct task_struct *k); int kthread_park(struct task_struct *k); diff --git a/kernel/kthread.c b/kernel/kthread.c index bfbfa481be3a5..b84fc7eec0358 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -46,6 +46,7 @@ struct kthread_create_info struct kthread { unsigned long flags; unsigned int cpu;
- int (*threadfn)(void *); void *data; struct completion parked; struct completion exited;
@@ -152,6 +153,20 @@ bool kthread_freezable_should_stop(bool *was_frozen) } EXPORT_SYMBOL_GPL(kthread_freezable_should_stop); +/**
- kthread_func - return the function specified on kthread creation
- @task: kthread task in question
- Returns NULL if the task is not a kthread.
- */
+void *kthread_func(struct task_struct *task) +{
- if (task->flags & PF_KTHREAD)
return to_kthread(task)->threadfn;
- return NULL;
+} +EXPORT_SYMBOL_GPL(kthread_func);
/**
- kthread_data - return data value specified on kthread creation
- @task: kthread task in question
@@ -164,6 +179,7 @@ void *kthread_data(struct task_struct *task) { return to_kthread(task)->data; } +EXPORT_SYMBOL_GPL(kthread_data); /**
- kthread_probe_data - speculative version of kthread_data()
@@ -244,6 +260,7 @@ static int kthread(void *_create) do_exit(-ENOMEM); }
- self->threadfn = threadfn; self->data = data; init_completion(&self->exited); init_completion(&self->parked);
-- 2.25.1