Whamcloud - gitweb
LU-3517 llite: don't check for O_CREAT in it_create_mode 86/6786/5
authorJohn L. Hammond <john.hammond@intel.com>
Mon, 1 Jul 2013 17:26:15 +0000 (12:26 -0500)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 26 Jul 2013 17:57:15 +0000 (17:57 +0000)
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 0e72637..a3d6d6e 100644 (file)
@@ -432,13 +432,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 81bf255..857c450 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;
        }