On Tue, Oct 09, 2012 at 03:47:42PM -0700, Eric W. Biederman wrote:"J. Bruce Fields" <bfields@xxxxxxxxxxxx> writes:
On Tue, Oct 09, 2012 at 01:20:48PM -0700, Eric W. Biederman wrote:"Myklebust, Trond" <Trond.Myklebust@xxxxxxxxxx> writes:
On Tue, 2012-10-09 at 15:35 -0400, J. Bruce Fields wrote:Cc'ing Eric since I seem to recall he suggested doing it this way?
Yes. On second look setting fs->root won't work. We need to change fs.
The problem is that by default all kernel threads share fs so changing
fs->root will have non-local consequences.
Oh, huh. And we can't "unshare" it somehow?
I don't fully understand how nfs uses kernel threads and work queues.
My general understanding is work queues reuse their kernel threads
between different users. So it is mostly a don't pollute your
environment thing. If there was a dedicated kernel thread for each
environment this would be trivial.
What I was suggesting here is changing task->fs instead of
task->fs.root. That should just require task_lock().
Oh, OK, got it--if that works, great.
Sorry, I don't know much about devtmpfs, are you suggesting it as a
model? What exactly should we look at?
Roughly all I meant was that devtmpsfsd is a kernel thread that runs
with an unshared fs struct. Although I admit devtmpfsd is for all
practical purposes a userspace daemon that just happens to run in kernel
space.
Thanks for the explanation.
--b.