Skip to content

Support follow_link in RCU-walk.

NeilBrown linux-fsdevel lkml 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest9 patches 6 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/9FS: make all ->follow_link handlers aware for LOOKUP_RCUdrivers/staging/lustre/lustre/llite/symlink.c fs/9p/vfs_inode.c fs/9p/vfs_inode_dotl.c +18 more+78 -70 replies
2/9VFS/namei: use terminate_walk when symlink lookup fails.fs/namei.c+20 -200 replies
3/9VFS/namei: new flag to support RCU symlinks: LOOKUP_LINK_RCU.fs/namei.c include/linux/namei.h+14 -50 replies
4/9VFS/namei: abort RCU-walk on symlink if atime needs updating.fs/inode.c fs/namei.c include/linux/fs.h+26 -80 replies
5/9VFS/namei: enhance follow_link to support RCU-walk.fs/namei.c+13 -60 replies
6/9VFS/namei: enable RCU-walk when following symlinks.fs/namei.c+0 -120 replies
7/9VFS/namei: handle LOOKUP_RCU in page_follow_link_light.fs/namei.c+27 -30 replies
8/9XFS: allow follow_link to often succeed in RCU-walk.fs/xfs/xfs_ioctl.c fs/xfs/xfs_iops.c fs/xfs/xfs_symlink.c +1 more+21 -90 replies
9/9NFS: support LOOKUP_RCU in nfs_follow_link.fs/nfs/inode.c fs/nfs/symlink.c include/linux/nfs_fs.h+40 -20 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [PATCH 0/9] Support follow_link in RCU-walk.

Hi Al (and others),

I wonder if you could look over this patchset.
It allows RCU-walk to follow symlinks in many common cases, thus removing a surprising performance hit caused by using symlinks.

The last could of patches make changes to XFS and NFS to support this but I haven't forwarded to the relevant lists yet. If/when the early code meets with approval I'll do that.

The first patch almost certainly needs to be changed. I originally wrote this code when filesystems could see inside nameidata. It is now opaque so the simplest solution was to provide an accessor function.
Maybe I should as a 'flags' arg to ->follow_link?? Or have ->follow_link and ->follow_link_rcu ??
What do you suggest?

Thanks,
NeilBrown

---

NeilBrown (9):
FS: make all ->follow_link handlers aware for LOOKUP_RCU VFS/namei: use terminate_walk when symlink lookup fails. VFS/namei: new flag to support RCU symlinks: LOOKUP_LINK_RCU. VFS/namei: abort RCU-walk on symlink if atime needs updating. VFS/namei: enhance follow_link to support RCU-walk. VFS/namei: enable RCU-walk when following symlinks. VFS/namei: handle LOOKUP_RCU in page_follow_link_light.
XFS: allow follow_link to often succeed in RCU-walk.
NFS: support LOOKUP_RCU in nfs_follow_link.

 drivers/staging/lustre/lustre/llite/symlink.c |    3 +
 fs/9p/vfs_inode.c                             |    6 +
 fs/9p/vfs_inode_dotl.c                        |    5 +
 fs/befs/linuxvfs.c                            |    2 
 fs/cifs/link.c                                |    2 
 fs/configfs/symlink.c                         |    7 +
 fs/ecryptfs/inode.c                           |    7 +
 fs/fuse/dir.c                                 |    2 
 fs/gfs2/inode.c                               |    2 
 fs/hostfs/hostfs_kern.c                       |    7 +
 fs/inode.c                                    |   26 ++++-
 fs/kernfs/symlink.c                           |    7 +
 fs/namei.c                                    |  132 ++++++++++++++++---------
 fs/nfs/inode.c                                |   22 ++++
 fs/nfs/symlink.c                              |   17 +++
 fs/overlayfs/inode.c                          |    3 +
 fs/proc/base.c                                |    2 
 fs/proc/namespaces.c                          |    3 +
 fs/proc/self.c                                |    4 +
 fs/proc/thread_self.c                         |    4 +
 fs/xfs/xfs_ioctl.c                            |    2 
 fs/xfs/xfs_iops.c                             |   13 ++
 fs/xfs/xfs_symlink.c                          |   11 ++
 fs/xfs/xfs_symlink.h                          |    2 
 include/linux/fs.h                            |    2 
 include/linux/namei.h                         |    1 
 include/linux/nfs_fs.h                        |    1 
 mm/shmem.c                                    |    6 +
 28 files changed, 234 insertions(+), 67 deletions(-)

--
Signature