[PATCH 08/13] staging/lustre: Always return EEXIST on mkdir for existing names
From: Oleg Drokin
Date: Sat Aug 20 2016 - 17:35:14 EST
- Next message: Oleg Drokin: "[PATCH 09/13] staging/lustre: Add spaces preferred around that '{+,-,*,/,|,<<,>>,&}'"
- Previous message: Oleg Drokin: "[PATCH 05/13] lustre: constify lib-move.c stuff"
- In reply to: Oleg Drokin: "[PATCH 05/13] lustre: constify lib-move.c stuff"
- Next in thread: Oleg Drokin: "[PATCH 09/13] staging/lustre: Add spaces preferred around that '{+,-,*,/,|,<<,>>,&}'"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
if the name already exists, but we don't have write permissions
in the parent, force talking to the MDS to determine what
more sensical error code to return.
This also happens to fix matlab and other such programs that
assume that EEXIST is the only valid error code for mkdir of
an existing directory.
Signed-off-by: Oleg Drokin <green@xxxxxxxxxxxxxx>
---
drivers/staging/lustre/lustre/llite/namei.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/lustre/lustre/llite/namei.c b/drivers/staging/lustre/lustre/llite/namei.c
index 09e1801..8350943 100644
--- a/drivers/staging/lustre/lustre/llite/namei.c
+++ b/drivers/staging/lustre/lustre/llite/namei.c
@@ -541,8 +541,12 @@ static struct dentry *ll_lookup_nd(struct inode *parent, struct dentry *dentry,
CDEBUG(D_VFSTRACE, "VFS Op:name=%pd, dir="DFID"(%p),flags=%u\n",
dentry, PFID(ll_inode2fid(parent)), parent, flags);
- /* Optimize away (CREATE && !OPEN). Let .create handle the race. */
- if ((flags & LOOKUP_CREATE) && !(flags & LOOKUP_OPEN))
+ /* Optimize away (CREATE && !OPEN). Let .create handle the race.
+ * but only if we have write permissions there, otherwise we need
+ * to proceed with lookup. LU-4185
+ */
+ if ((flags & LOOKUP_CREATE) && !(flags & LOOKUP_OPEN) &&
+ (inode_permission(parent, MAY_WRITE | MAY_EXEC) == 0))
return NULL;
if (flags & (LOOKUP_PARENT|LOOKUP_OPEN|LOOKUP_CREATE))
--
2.7.4
- Next message: Oleg Drokin: "[PATCH 09/13] staging/lustre: Add spaces preferred around that '{+,-,*,/,|,<<,>>,&}'"
- Previous message: Oleg Drokin: "[PATCH 05/13] lustre: constify lib-move.c stuff"
- In reply to: Oleg Drokin: "[PATCH 05/13] lustre: constify lib-move.c stuff"
- Next in thread: Oleg Drokin: "[PATCH 09/13] staging/lustre: Add spaces preferred around that '{+,-,*,/,|,<<,>>,&}'"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]