Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1271716

[PATCHSET] ->follow_link() without dropping from RCU mode

From Al Viro <viro@ZenIV.linux.org.uk>
Newsgroups linux.kernel
Subject [PATCHSET] ->follow_link() without dropping from RCU mode
Date 2015-11-18 00:00 +0100
Message-ID <qvXoe-2MS-5@gated-at.bofh.it> (permalink)
Organization linux.* mail to news gateway

Show all headers | View raw


	Right now we stay in RCU mode for fast symlink traversal.
However, anything trickier drops out of RCU mode - back in 4.2
the symlink-related pile had grown too large to add this on top
of everything else.  Below is an attempt to do that now.

Those who prefer to use git for review can find that series in
git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git work.symlinks
The branch is 4.4-rc1-based, only lightly tested so far (ltp and
xfstests pass without regressions, though).

What's in there:
1) switch befs long symlinks to page_symlink_operations
2) logfs: don't duplicate page_symlink_inode_operations
3) udf: don't duplicate page_symlink_inode_operations
4) ufs: get rid of ->setattr() for symlinks
	Simplifying things a bit by switching them to page_symlink_operations
where possible.

5) namei: page_getlink() and page_follow_link_light() are the same thing
	Get rid of some code duplication

6) [vfs] don't put symlink bodies in pagecache into highmem
	Bugfix for a long-standing mess.  For pagecache-based symlinks we end
up with kmap() of the body for the duration of traversal.  Which could take
a long time if we walk into e.g. slow automount along the way.  It's DoSable,
actually.  Not hard to fix - there's no reason to use GFP_HIGHUSER_MOVABLE
for those guys; GFP_USER serves just as well.

7) [vfs] replace ->follow_link() with new method that could stay in RCU mode
	Meat of the series - we switch to a new method (->get_link()) that
differs from ->follow_link() in getting dentry and inode separately; it
can be called in RCU mode (with NULL dentry) and it should bail out with
ERR_PTR(-ECHILD) if it needs non-RCU.  All instances converted, most of them
by making them bail out immediately in RCU mode.  Some are trivialy
RCU-safe, though; those do not bail out at all.

8) teach page_get_link() to work in RCU mode
9) teach shmem_get_link() to work in RCU mode
10) teach proc_self_get_link()/proc_thread_self_get_link() to work in RCU mode
	Teaching more instances to stay in RCU mode if they can.  (8) is
similar to what Neil had done back in March, except for the lack of kmap
mess to deal with.

	One thing I'd left out is NFS; something similar to Neil's patch from
the March patchset would probably do, though.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextNext in thread | Find similar | Unroll thread


Thread

[PATCHSET] ->follow_link() without dropping from RCU mode Al Viro <viro@ZenIV.linux.org.uk> - 2015-11-18 00:00 +0100
  [PATCH 08/10] teach page_get_link() to work in RCU mode Al Viro <viro@ZenIV.linux.org.uk> - 2015-11-18 00:10 +0100
  [PATCH 09/10] teach shmem_get_link() to work in RCU mode Al Viro <viro@ZenIV.linux.org.uk> - 2015-11-18 00:10 +0100
  [PATCH 01/10] switch befs long symlinks to page_symlink_operations Al Viro <viro@ZenIV.linux.org.uk> - 2015-11-18 00:10 +0100
  [PATCH 10/10] teach proc_self_get_link()/proc_thread_self_get_link() to work in RCU mode Al Viro <viro@ZenIV.linux.org.uk> - 2015-11-18 00:10 +0100
  [PATCH 06/10] [vfs] don't put symlink bodies in pagecache into highmem Al Viro <viro@ZenIV.linux.org.uk> - 2015-11-18 00:10 +0100
    Re: [PATCH 06/10] [vfs] don't put symlink bodies in pagecache into  highmem Dave Chinner <david@fromorbit.com> - 2015-11-20 00:10 +0100
  [PATCH 05/10] namei: page_getlink() and page_follow_link_light() are the same thing Al Viro <viro@ZenIV.linux.org.uk> - 2015-11-18 00:10 +0100
  [PATCH 03/10] udf: don't duplicate page_symlink_inode_operations Al Viro <viro@ZenIV.linux.org.uk> - 2015-11-18 00:10 +0100
  [PATCH 04/10] ufs: get rid of ->setattr() for symlinks Al Viro <viro@ZenIV.linux.org.uk> - 2015-11-18 00:10 +0100
  [PATCH 02/10] logfs: don't duplicate page_symlink_inode_operations Al Viro <viro@ZenIV.linux.org.uk> - 2015-11-18 00:10 +0100

csiph-web