Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b76d8b82 authored by Jeff Layton's avatar Jeff Layton Committed by Al Viro
Browse files

vfs: fix mkdirat to retry once on an ESTALE error

parent 972567f1
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -3243,8 +3243,10 @@ SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode)
	struct dentry *dentry;
	struct path path;
	int error;
	unsigned int lookup_flags = LOOKUP_DIRECTORY;

	dentry = user_path_create(dfd, pathname, &path, LOOKUP_DIRECTORY);
retry:
	dentry = user_path_create(dfd, pathname, &path, lookup_flags);
	if (IS_ERR(dentry))
		return PTR_ERR(dentry);

@@ -3254,6 +3256,10 @@ SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode)
	if (!error)
		error = vfs_mkdir(path.dentry->d_inode, dentry, mode);
	done_path_create(&path, dentry);
	if (retry_estale(error, lookup_flags)) {
		lookup_flags |= LOOKUP_REVAL;
		goto retry;
	}
	return error;
}