From: Al Viro <viro@ZenIV.linux.org.uk>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-fsdevel <linux-fsdevel@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Miklos Szeredi <miklos@szeredi.hu>
Subject: Re: [rfc][possible solution] RCU vfsmounts
Date: Mon, 30 Sep 2013 20:49:22 +0100 [thread overview]
Message-ID: <20130930194921.GS13318@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20130929181047.GM13318@ZenIV.linux.org.uk>
On Sun, Sep 29, 2013 at 07:10:47PM +0100, Al Viro wrote:
> FWIW, right now I'm reviewing the subset of fs code that can be hit in
> RCU mode.
OK... AFAICS, we are not too far from being able to handle RCU pathwalk
straying into fs in the middle of being shut down.
* There are 5 methods that can be called:
->d_hash(...)
->d_compare(...)
->d_revalidate(..., LOOKUP_RCU | ...)
->d_manage(..., true)
->permission(..., MAY_NOT_BLOCK | MAY_EXEC)
Filesystem needs to be able to survive those during shutdown. The stuff
needed for that should _not_ be freed without synchronize_rcu() (or via
call_rcu()); usually ->s_fs_info is involved (when anything is needed
at all). In any case, we shouldn't allow rmmod without making sure that
everything in RCU mode has run out, but most of the filesystems have
rcu_barrier() in their exit_module anyway.
* __put_super() probably ought to delay actual freeing via
call_rcu(); might not be strictly necessary, but probably a good idea
anyway.
* shrink_dcache_for_umount() ought to use d_walk(), a-la
shrink_dcache_parent().
Note that most of the filesystems don't have any of these methods or
don't look at anything outside of inode/dentry involved in RCU case.
Zoo:
* adfs: has the name length limit in fs-private part of superblock; used
by ->d_hash() and ->d_compare(). No other methods involved, synchronize_rcu()
before doing kfree() in adfs_put_super() will suffice.
* autofs4: wants fs-private part of superblock in ->d_manage().
synchronize_rcu() in autofs4_kill_sb() would do it, or we could delay
freeing that sucker via call_rcu() (in that case we want delayed
freeing in __put_super() as well).
* btrfs: wants btrfs_root_readonly(BTRFS_I(inode)->root) usable in
->permission(). Delayed freeing of struct btrfs_root, perhaps?
* cifs: wants nls, refered to from fs-private part of superblock.
->permission() wants fs-private part of superblock as well. Just
synchronize_rcu() before unload_nls() in cifs_umount()...
* fat: same situation as with cifs
* fuse: delayed freeing of struct fuse_conn? BTW, Miklos, just what is
} else if (mask & (MAY_ACCESS | MAY_CHDIR)) {
if (mask & MAY_NOT_BLOCK)
return -ECHILD;
about, when we never pass such combinations? Oh, well...
* hpfs: similar to cifs and fat, only without use of nls (a homegrown table
of some sort).
* ncpfs: _probably_ similar to cifs et.al., but there might be dragons
* procfs: delayed freeing of pid_namespace?
* lustre: messy, haven't looked through that.
Overall, it looks doable.
next prev parent reply other threads:[~2013-09-30 19:49 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-28 20:27 [rfc][possible solution] RCU vfsmounts Al Viro
2013-09-28 20:43 ` Linus Torvalds
2013-09-29 6:06 ` Al Viro
2013-09-29 17:19 ` Linus Torvalds
2013-09-29 18:10 ` Al Viro
2013-09-29 18:26 ` Linus Torvalds
2013-09-30 10:48 ` Miklos Szeredi
2013-09-29 18:49 ` Al Viro
2013-09-29 19:04 ` Al Viro
2013-09-30 19:49 ` Al Viro [this message]
2013-10-02 1:30 ` Al Viro
2013-10-03 6:14 ` Al Viro
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130930194921.GS13318@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=miklos@szeredi.hu \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox