summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2015-05-08 02:32:22 +0200
committerAl Viro <viro@zeniv.linux.org.uk>2015-05-11 14:13:13 +0200
commit6548fae2eca6b66c7257af6663fdbdf5a50745fd (patch)
tree9bd27e6603841fa48feca5a053b8c8b1ecd5129c /fs
parentnew helper: free_page_put_link() (diff)
downloadlinux-6548fae2eca6b66c7257af6663fdbdf5a50745fd.tar.xz
linux-6548fae2eca6b66c7257af6663fdbdf5a50745fd.zip
namei: make put_link() RCU-safe
very simple - just make path_put() conditional on !RCU. Note that right now it doesn't get called in RCU mode - we leave it before getting anything into stack. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs')
-rw-r--r--fs/namei.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/namei.c b/fs/namei.c
index 43034046a0e1..998c3c2c9488 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -750,7 +750,8 @@ static inline void put_link(struct nameidata *nd)
struct inode *inode = last->inode;
if (last->cookie && inode->i_op->put_link)
inode->i_op->put_link(inode, last->cookie);
- path_put(&last->link);
+ if (!(nd->flags & LOOKUP_RCU))
+ path_put(&last->link);
}
int sysctl_protected_symlinks __read_mostly = 0;