Whamcloud - gitweb
LU-3474 mdd: mdd_links_read() to return linkea_init() errors 76/6676/5
authorBruno Faccini <bruno.faccini@intel.com>
Thu, 4 Jul 2013 08:13:40 +0000 (10:13 +0200)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 19 Jul 2013 04:38:56 +0000 (04:38 +0000)
ASSERTION(ldata->ld_leh != ((void *)0)) can be triggered in
linkea_links_find() due to earlier mdd_links_read() call
missing to return linkea_init() errors and thus preventing
to detect that ld_leh is not populated.
Plus a few error handling fixes to avoid unnecessary msgs
and also prevent early return.

Signed-off-by: Bruno Faccini <bruno.faccini@intel.com>
Change-Id: I35b1076d8eb036dd600e0fda711417634590b9df
Reviewed-on: http://review.whamcloud.com/6676
Tested-by: Hudson
Reviewed-by: wangdi <di.wang@intel.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Mike Pershin <mike.pershin@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/mdd/mdd_dir.c

index 27db0a7..6ac8aed 100644 (file)
@@ -932,7 +932,7 @@ static int mdd_linkea_prepare(const struct lu_env *env,
        if (oldpfid != NULL) {
                rc = __mdd_links_del(env, mdd_obj, ldata, oldlname, oldpfid);
                if (rc) {
        if (oldpfid != NULL) {
                rc = __mdd_links_del(env, mdd_obj, ldata, oldlname, oldpfid);
                if (rc) {
-                       if ((check == 0) ||
+                       if ((check == 1) ||
                            (rc != -ENODATA && rc != -ENOENT))
                                RETURN(rc);
                        /* No changes done. */
                            (rc != -ENODATA && rc != -ENOENT))
                                RETURN(rc);
                        /* No changes done. */
@@ -946,8 +946,6 @@ static int mdd_linkea_prepare(const struct lu_env *env,
                 * old link */
                rc2 = __mdd_links_add(env, mdd_obj, ldata, newlname, newpfid,
                                      first, check);
                 * old link */
                rc2 = __mdd_links_add(env, mdd_obj, ldata, newlname, newpfid,
                                      first, check);
-               if (rc2 == -EEXIST)
-                       rc2 = 0;
        }
 
        rc = rc != 0 ? rc : rc2;
        }
 
        rc = rc != 0 ? rc : rc2;
@@ -987,7 +985,7 @@ out:
                rc = rc2;
        if (rc) {
                int error = 1;
                rc = rc2;
        if (rc) {
                int error = 1;
-               if (rc == -EOVERFLOW || rc == -ENOENT || rc == -ENOSPC)
+               if (rc == -EOVERFLOW || rc == -ENOSPC)
                        error = 0;
                if (oldpfid == NULL)
                        CDEBUG(error ? D_ERROR : D_OTHER,
                        error = 0;
                if (oldpfid == NULL)
                        CDEBUG(error ? D_ERROR : D_OTHER,
@@ -1075,8 +1073,7 @@ int mdd_links_read(const struct lu_env *env, struct mdd_object *mdd_obj,
        if (rc < 0)
                return rc;
 
        if (rc < 0)
                return rc;
 
-       linkea_init(ldata);
-       return 0;
+       return linkea_init(ldata);
 }
 
 /** Read the link EA into a temp buffer.
 }
 
 /** Read the link EA into a temp buffer.