[PATCH 0/4] allow multiple kthreadd's

From: J. Bruce Fields
Date: Fri May 01 2020 - 12:02:00 EST


From: "J. Bruce Fields" <bfields@xxxxxxxxxx>

These patches allow a caller to create its own kthreadd.

The motivation is file delegations: currently any write operation from a
client breaks all delegations, even delegations held by the same client.

To fix that, we need to know which client is performing a given
operation.

So, we let nfsd put all the nfsd threads into the same thread group (by
spawning them from its own private kthreadd), then patch the delegation
code to treat delegation breaks from the same thread group as not
conflicting, and then leave it to nfsd to sort out conflicts among its
own clients. Those patches are in:

git://linux-nfs.org/~bfields/linux.git deleg-fix-self-conflicts

This was an idea from Trond. Part of his motivation was that it could
work for userspace servers (like Ganesha and Samba) as well. (We don't
currently let them request delegations, but probably will some day--it
shouldn't be difficult.)

Previously I considered instead adding a new field somewhere in the
struct task. That might require a new system call to expose to user
space. Or we might be able to put this in a keyring, if David Howells
thought that would work.

Before that I tried passing the identity of the breaker explicitly, but
that looks like it would require passing the new argument around to huge
swaths of the VFS.

Anyway, does this multiple kthreadd approach look reasonable?

(If so, who should handle the patches?)

--b.

J. Bruce Fields (4):
kthreads: minor kthreadd refactoring
kthreads: Simplify tsk_fork_get_node
kthreads: allow multiple kthreadd's
kthreads: allow cloning threads with different flags

include/linux/kthread.h | 21 +++++-
init/init_task.c | 3 +
init/main.c | 4 +-
kernel/fork.c | 4 ++
kernel/kthread.c | 140 +++++++++++++++++++++++++++++-----------
5 files changed, 132 insertions(+), 40 deletions(-)

--
2.26.2