aboutsummaryrefslogtreecommitdiffstats
path: root/fs/namei.c
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@redhat.com>2012-08-28 10:50:40 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2013-11-09 00:16:42 -0500
commit5a14696c1795d3843673b5cf1982d0e5357a5bbf (patch)
tree8d0ec4f82f90fc5f3e50cfc8cdd78ee7a4fb2263 /fs/namei.c
parentb21996e36c8e3b92a84e972378bde80b43acd890 (diff)
locks: helper functions for delegation breaking
We'll need the same logic for rename and link. Acked-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/namei.c')
-rw-r--r--fs/namei.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/fs/namei.c b/fs/namei.c
index 67ce331a3ed8..cfaeaae0f2db 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -3650,14 +3650,9 @@ int vfs_unlink(struct inode *dir, struct dentry *dentry, struct inode **delegate
3650 else { 3650 else {
3651 error = security_inode_unlink(dir, dentry); 3651 error = security_inode_unlink(dir, dentry);
3652 if (!error) { 3652 if (!error) {
3653 error = break_deleg(target, O_WRONLY|O_NONBLOCK); 3653 error = try_break_deleg(target, delegated_inode);
3654 if (error) { 3654 if (error)
3655 if (error == -EWOULDBLOCK && delegated_inode) {
3656 *delegated_inode = target;
3657 ihold(target);
3658 }
3659 goto out; 3655 goto out;
3660 }
3661 error = dir->i_op->unlink(dir, dentry); 3656 error = dir->i_op->unlink(dir, dentry);
3662 if (!error) 3657 if (!error)
3663 dont_mount(dentry); 3658 dont_mount(dentry);
@@ -3727,9 +3722,7 @@ exit2:
3727 iput(inode); /* truncate the inode here */ 3722 iput(inode); /* truncate the inode here */
3728 inode = NULL; 3723 inode = NULL;
3729 if (delegated_inode) { 3724 if (delegated_inode) {
3730 error = break_deleg(delegated_inode, O_WRONLY); 3725 error = break_deleg_wait(&delegated_inode);
3731 iput(delegated_inode);
3732 delegated_inode = NULL;
3733 if (!error) 3726 if (!error)
3734 goto retry_deleg; 3727 goto retry_deleg;
3735 } 3728 }