Whamcloud - gitweb
b=23035 split changelog time record into ctime,mtime,atime
[fs/lustre-release.git] / lustre / mdd / mdd_dir.c
index 6045cf3..2ee1985 100644 (file)
@@ -26,7 +26,7 @@
  * GPL HEADER END
  */
 /*
- * Copyright  2008 Sun Microsystems, Inc. All rights reserved
+ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  */
 /*
@@ -633,8 +633,11 @@ static int mdd_changelog_ns_store(const struct lu_env  *env,
         int rc;
         ENTRY;
 
+        /* Not recording */
         if (!(mdd->mdd_cl.mc_flags & CLM_ON))
                 RETURN(0);
+        if ((mdd->mdd_cl.mc_mask & (1 << type)) == 0)
+                RETURN(0);
 
         LASSERT(parent != NULL);
         LASSERT(tname != NULL);
@@ -2313,10 +2316,12 @@ struct lu_buf *mdd_links_get(const struct lu_env *env,
 static int mdd_lee_pack(struct link_ea_entry *lee, const struct lu_name *lname,
                         const struct lu_fid *pfid)
 {
-        int reclen;
+        struct lu_fid   tmpfid;
+        int             reclen;
 
-        fid_cpu_to_be(&lee->lee_parent_fid, pfid);
-        strncpy(lee->lee_name, lname->ln_name, lname->ln_namelen);
+        fid_cpu_to_be(&tmpfid, pfid);
+        memcpy(&lee->lee_parent_fid, &tmpfid, sizeof(tmpfid));
+        memcpy(lee->lee_name, lname->ln_name, lname->ln_namelen);
         reclen = sizeof(struct link_ea_entry) + lname->ln_namelen;
 
         lee->lee_reclen[0] = (reclen >> 8) & 0xff;
@@ -2328,7 +2333,8 @@ void mdd_lee_unpack(const struct link_ea_entry *lee, int *reclen,
                     struct lu_name *lname, struct lu_fid *pfid)
 {
         *reclen = (lee->lee_reclen[0] << 8) | lee->lee_reclen[1];
-        fid_be_to_cpu(pfid, &lee->lee_parent_fid);
+        memcpy(pfid, &lee->lee_parent_fid, sizeof(*pfid));
+        fid_be_to_cpu(pfid, pfid);
         lname->ln_name = lee->lee_name;
         lname->ln_namelen = *reclen - sizeof(struct link_ea_entry);
 }
@@ -2411,9 +2417,14 @@ static int mdd_links_add(const struct lu_env *env,
         rc = __mdd_xattr_set(env, mdd_obj,
                              mdd_buf_get_const(env, buf->lb_buf, leh->leh_len),
                              XATTR_NAME_LINK, 0, handle);
-        if (rc)
-                CERROR("link_ea add failed %d "DFID"\n", rc,
-                       PFID(mdd_object_fid(mdd_obj)));
+        if (rc) {
+                if (rc == -ENOSPC)
+                        CDEBUG(D_INODE, "link_ea add failed %d "DFID"\n", rc,
+                               PFID(mdd_object_fid(mdd_obj)));
+                else
+                        CERROR("link_ea add failed %d "DFID"\n", rc,
+                               PFID(mdd_object_fid(mdd_obj)));
+        }
 
         if (buf->lb_vmalloc)
                 /* if we vmalloced a large buffer drop it */
@@ -2450,8 +2461,12 @@ static int mdd_links_rename(const struct lu_env *env,
         buf = mdd_links_get(env, mdd_obj);
         if (IS_ERR(buf)) {
                 rc = PTR_ERR(buf);
-                CERROR("link_ea read failed %d "DFID"\n",
-                       rc, PFID(mdd_object_fid(mdd_obj)));
+                if (rc == -ENODATA)
+                        CDEBUG(D_INODE, "link_ea read failed %d "DFID"\n",
+                               rc, PFID(mdd_object_fid(mdd_obj)));
+                else
+                        CERROR("link_ea read failed %d "DFID"\n",
+                               rc, PFID(mdd_object_fid(mdd_obj)));
                 RETURN(rc);
         }
         leh = buf->lb_buf;