2022-08-29 04:31:30

by Ming Lei

[permalink] [raw]
Subject: [PATCH] kernel: export task_work_add

Firstly task_work_add() is used in several drivers. In ublk driver's
usage, request batching submission can only be applied with task_work_add,
and usually get better IOPS.

Secondly from this API's definition, the added work is always run in
the task context, and when task is exiting, either the work is rejected
to be added, or drained in do_exit(). In this way, not see obvious
disadvantage or potential issue by exporting it for module's usage.

So export it, then ublk driver can get simplified, meantime with better
performance.

Cc: Christoph Hellwig <[email protected]>
Signed-off-by: Ming Lei <[email protected]>
---
kernel/task_work.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/kernel/task_work.c b/kernel/task_work.c
index dff75bcde151..5f9a42a388f1 100644
--- a/kernel/task_work.c
+++ b/kernel/task_work.c
@@ -73,6 +73,7 @@ int task_work_add(struct task_struct *task, struct callback_head *work,

return 0;
}
+EXPORT_SYMBOL_GPL(task_work_add);

/**
* task_work_cancel_match - cancel a pending work added by task_work_add()
--
2.31.1


2022-09-07 00:54:04

by Ming Lei

[permalink] [raw]
Subject: Re: [PATCH] kernel: export task_work_add

On Mon, Aug 29, 2022 at 12:00:13PM +0800, Ming Lei wrote:
> Firstly task_work_add() is used in several drivers. In ublk driver's
> usage, request batching submission can only be applied with task_work_add,
> and usually get better IOPS.
>
> Secondly from this API's definition, the added work is always run in
> the task context, and when task is exiting, either the work is rejected
> to be added, or drained in do_exit(). In this way, not see obvious
> disadvantage or potential issue by exporting it for module's usage.
>
> So export it, then ublk driver can get simplified, meantime with better
> performance.
>
> Cc: Christoph Hellwig <[email protected]>
> Signed-off-by: Ming Lei <[email protected]>

Hello Guys,

Gentle ping...


Thanks,
Ming

2022-09-07 13:14:39

by Bart Van Assche

[permalink] [raw]
Subject: Re: [PATCH] kernel: export task_work_add

On 8/28/22 21:00, Ming Lei wrote:
> Firstly task_work_add() is used in several drivers. In ublk driver's
> usage, request batching submission can only be applied with task_work_add,
> and usually get better IOPS.
>
> Secondly from this API's definition, the added work is always run in
> the task context, and when task is exiting, either the work is rejected
> to be added, or drained in do_exit(). In this way, not see obvious
> disadvantage or potential issue by exporting it for module's usage.
>
> So export it, then ublk driver can get simplified, meantime with better
> performance.

If task_work_add() is exported, shouldn't task_work_cancel() be exported
too? Anyway:

Reviewed-by: Bart Van Assche <[email protected]>

2022-09-07 13:59:04

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH] kernel: export task_work_add

On 9/7/22 7:08 AM, Bart Van Assche wrote:
> On 8/28/22 21:00, Ming Lei wrote:
>> Firstly task_work_add() is used in several drivers. In ublk driver's
>> usage, request batching submission can only be applied with task_work_add,
>> and usually get better IOPS.
>>
>> Secondly from this API's definition, the added work is always run in
>> the task context, and when task is exiting, either the work is rejected
>> to be added, or drained in do_exit(). In this way, not see obvious
>> disadvantage or potential issue by exporting it for module's usage.
>>
>> So export it, then ublk driver can get simplified, meantime with better
>> performance.
>
> If task_work_add() is exported, shouldn't task_work_cancel() be exported
> too? Anyway:

Not if it isn't currently used...

On the patch itself, it definitely makes sense in the context of ublk.
My hesitation is mostly around not really wanting to export this to
generic modular users. It's OK for core interfaces, of which ublk is
on the way to becoming, but I really don't like the idea of random
modules using it. But that's not really something we can manage with
the export, it's either exported or it's not...

--
Jens Axboe


2022-09-07 14:15:58

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH] kernel: export task_work_add

On 9/7/22 8:05 AM, Christoph Hellwig wrote:
> On Wed, Sep 07, 2022 at 07:44:05AM -0600, Jens Axboe wrote:
>> On the patch itself, it definitely makes sense in the context of ublk.
>> My hesitation is mostly around not really wanting to export this to
>> generic modular users. It's OK for core interfaces, of which ublk is
>> on the way to becoming, but I really don't like the idea of random
>> modules using it. But that's not really something we can manage with
>> the export, it's either exported or it's not...
>
> Yes, I'm really worried about folks doing stupid things with it.
> Thinking of the whole loop saga..

Exactly. But we don't really have any tools outside of clearly marking
it as such. It's not like we have an EXPORT_MODULE_CORE_GPL() and with
that requiring a driver or modular kernel feature that marks the module
as MODULE_IS_CORE_GPL().

--
Jens Axboe

2022-09-07 14:43:22

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH] kernel: export task_work_add

On Wed, Sep 07, 2022 at 07:44:05AM -0600, Jens Axboe wrote:
> On the patch itself, it definitely makes sense in the context of ublk.
> My hesitation is mostly around not really wanting to export this to
> generic modular users. It's OK for core interfaces, of which ublk is
> on the way to becoming, but I really don't like the idea of random
> modules using it. But that's not really something we can manage with
> the export, it's either exported or it's not...

Yes, I'm really worried about folks doing stupid things with it.
Thinking of the whole loop saga..