From: Jeff Layton <jlayton@redhat.com>
To: viro@ZenIV.linux.org.uk
Cc: linux-fsdevel@vger.kernel.org, linux-nfs@vger.kernel.org,
linux-kernel@vger.kernel.org, michael.brantley@deshaw.com,
hch@infradead.org, miklos@szeredi.hu, pstaubach@exagrid.com
Subject: [PATCH v6 05/20] vfs: fix mknodat to retry on ESTALE errors
Date: Fri, 7 Sep 2012 10:18:12 -0400 [thread overview]
Message-ID: <1347027507-20956-6-git-send-email-jlayton@redhat.com> (raw)
In-Reply-To: <1347027507-20956-1-git-send-email-jlayton@redhat.com>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
---
fs/namei.c | 43 +++++++++++++++++++++++++------------------
1 file changed, 25 insertions(+), 18 deletions(-)
diff --git a/fs/namei.c b/fs/namei.c
index d71be0b..11fc388 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -3176,34 +3176,41 @@ SYSCALL_DEFINE4(mknodat, int, dfd, const char __user *, filename, umode_t, mode,
struct dentry *dentry;
struct path path;
int error;
+ unsigned int try = 0;
error = may_mknod(mode);
if (error)
return error;
- dentry = user_path_create(dfd, filename, &path, false, false);
- if (IS_ERR(dentry))
- return PTR_ERR(dentry);
+ do {
+ dentry = user_path_create(dfd, filename, &path, false, try);
+ if (IS_ERR(dentry))
+ return PTR_ERR(dentry);
- if (!IS_POSIXACL(path.dentry->d_inode))
- mode &= ~current_umask();
- error = security_path_mknod(&path, dentry, mode, dev);
- if (error)
- goto out;
- switch (mode & S_IFMT) {
- case 0: case S_IFREG:
- error = vfs_create(path.dentry->d_inode,dentry,mode,true);
+ if (!IS_POSIXACL(path.dentry->d_inode))
+ mode &= ~current_umask();
+ error = security_path_mknod(&path, dentry, mode, dev);
+ if (error)
+ goto out;
+ switch (mode & S_IFMT) {
+ case 0:
+ case S_IFREG:
+ error = vfs_create(path.dentry->d_inode, dentry,
+ mode, true);
break;
- case S_IFCHR: case S_IFBLK:
- error = vfs_mknod(path.dentry->d_inode,dentry,mode,
+ case S_IFCHR:
+ case S_IFBLK:
+ error = vfs_mknod(path.dentry->d_inode, dentry, mode,
new_decode_dev(dev));
break;
- case S_IFIFO: case S_IFSOCK:
- error = vfs_mknod(path.dentry->d_inode,dentry,mode,0);
- break;
- }
+ case S_IFIFO:
+ case S_IFSOCK:
+ error = vfs_mknod(path.dentry->d_inode, dentry,
+ mode, 0);
+ }
out:
- done_path_create(&path, dentry);
+ done_path_create(&path, dentry);
+ } while (retry_estale(error, try++));
return error;
}
--
1.7.11.4
next prev parent reply other threads:[~2012-09-07 14:19 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-07 14:18 [PATCH v6 00/20] vfs: add the ability to retry on ESTALE to several syscalls Jeff Layton
2012-09-07 14:18 ` [PATCH v6 01/20] vfs: add a retry_estale helper function to handle retries on ESTALE Jeff Layton
2012-09-07 14:18 ` [PATCH v6 02/20] vfs: make fstatat retry on ESTALE errors from getattr call Jeff Layton
2012-09-07 14:18 ` [PATCH v6 03/20] vfs: fix readlinkat to retry on ESTALE Jeff Layton
2012-09-07 14:18 ` [PATCH v6 04/20] vfs: add new "reval" argument to kern_path_create and user_path_create Jeff Layton
2012-09-07 14:18 ` Jeff Layton [this message]
2012-09-07 14:18 ` [PATCH v6 06/20] vfs: fix mkdir to retry on ESTALE errors Jeff Layton
2012-09-07 14:18 ` [PATCH v6 07/20] vfs: fix symlinkat " Jeff Layton
2012-09-07 14:18 ` [PATCH v6 08/20] vfs: fix linkat " Jeff Layton
2012-09-07 14:18 ` [PATCH v6 09/20] vfs: add a reval argument to user_path_parent Jeff Layton
2012-09-07 14:18 ` [PATCH v6 10/20] vfs: make rmdir retry on ESTALE errors Jeff Layton
2012-09-07 14:18 ` [PATCH v6 11/20] vfs: make do_unlinkat " Jeff Layton
2012-09-07 14:18 ` [PATCH v6 12/20] vfs: fix renameat to " Jeff Layton
2012-09-07 14:18 ` [PATCH v6 13/20] vfs: have do_sys_truncate retry once on an ESTALE error Jeff Layton
2012-09-07 14:18 ` [PATCH v6 14/20] vfs: have faccessat " Jeff Layton
2012-09-07 14:18 ` [PATCH v6 15/20] vfs: have chdir retry lookup and call once on " Jeff Layton
2012-09-07 14:18 ` [PATCH v6 16/20] vfs: make chroot retry " Jeff Layton
2012-09-07 14:18 ` [PATCH v6 17/20] vfs: make fchmodat retry once on ESTALE errors Jeff Layton
2012-09-07 14:18 ` [PATCH v6 18/20] vfs: make fchownat " Jeff Layton
2012-09-07 14:18 ` [PATCH v6 19/20] vfs: convert do_filp_open to use retry_estale helper Jeff Layton
2012-09-07 14:18 ` [PATCH v6 20/20] vfs: convert do_file_open_root " Jeff Layton
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=1347027507-20956-6-git-send-email-jlayton@redhat.com \
--to=jlayton@redhat.com \
--cc=hch@infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=michael.brantley@deshaw.com \
--cc=miklos@szeredi.hu \
--cc=pstaubach@exagrid.com \
--cc=viro@ZenIV.linux.org.uk \
/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;
as well as URLs for NNTP newsgroup(s).