Whamcloud - gitweb
LU-3517 llite: don't check for O_CREAT in it_create_mode
authorJohn L. Hammond <john.hammond@intel.com>
Mon, 1 Jul 2013 17:26:15 +0000 (12:26 -0500)
committerOleg Drokin <oleg.drokin@intel.com>
Thu, 8 Aug 2013 06:05:22 +0000 (02:05 -0400)
ll_lookup_it() checks for O_CREAT in struct lookup_intent's
it_create_mode member which is nonsensical, as it_create_mode is used
for file mode bits (S_IFREG, S_IRUSR, ...). Fix this by just checking
for IT_CREATE in it_op and do the same in llu_lookup_it(). This will
not affect the behavior of either function, since if O_CREATE (0100)
is actually set in o_create_mode then IT_CREATE must have been set in
it_op. In ll_atomic_open() check for O_CREAT in the open_flags
parameter rather than testing mode.

Signed-off-by: John L. Hammond <john.hammond@intel.com>
Change-Id: I301964222ec043e6f0cc3b000678fe3c881a2381
Reviewed-on: http://review.whamcloud.com/6786
Reviewed-by: Lai Siyao <lai.siyao@intel.com>
Reviewed-by: Peng Tao <bergwolf@gmail.com>
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/liblustre/namei.c
lustre/llite/namei.c

index 209cc92..7d91f64 100644 (file)
@@ -436,13 +436,11 @@ static int llu_lookup_it(struct inode *parent, struct pnode *pnode,
         icbd.icbd_child = pnode;
         icbd.icbd_parent = parent;
 
-        if (it->it_op & IT_CREAT || 
-            (it->it_op & IT_OPEN && it->it_create_mode & O_CREAT)) {
-                opc = LUSTRE_OPC_CREATE;
-        } else {
-                opc = LUSTRE_OPC_ANY;
-        }
-        
+       if (it->it_op & IT_CREAT)
+               opc = LUSTRE_OPC_CREATE;
+       else
+               opc = LUSTRE_OPC_ANY;
+
         llu_prep_md_op_data(&op_data, parent, NULL,
                             pnode->p_base->pb_name.name,
                             pnode->p_base->pb_name.len, flags, opc);
index 7383c7c..1249af6 100644 (file)
@@ -529,11 +529,10 @@ static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry,
         icbd.icbd_childp = &dentry;
         icbd.icbd_parent = parent;
 
-        if (it->it_op & IT_CREAT ||
-            (it->it_op & IT_OPEN && it->it_create_mode & O_CREAT))
-                opc = LUSTRE_OPC_CREATE;
-        else
-                opc = LUSTRE_OPC_ANY;
+       if (it->it_op & IT_CREAT)
+               opc = LUSTRE_OPC_CREATE;
+       else
+               opc = LUSTRE_OPC_ANY;
 
         op_data = ll_prep_md_op_data(NULL, parent, NULL, dentry->d_name.name,
                                      dentry->d_name.len, lookup_flags, opc,
@@ -631,7 +630,7 @@ static int ll_atomic_open(struct inode *dir, struct dentry *dentry,
                RETURN(-ENOMEM);
 
        it->it_op = IT_OPEN;
-       if (mode) {
+       if (open_flags & O_CREAT) {
                it->it_op |= IT_CREAT;
                lookup_flags |= LOOKUP_CREATE;
        }