From: Bruno Faccini Date: Thu, 4 Jul 2013 08:13:40 +0000 (+0200) Subject: LU-3474 mdd: mdd_links_read() to return linkea_init() errors X-Git-Tag: 2.4.53~66 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=3b3ea5e35f1859add7bf9f51ca47f4ab0a2eb563;hp=dd0adebec5edade78562c0168169ec024bf33a44 LU-3474 mdd: mdd_links_read() to return linkea_init() errors 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 Change-Id: I35b1076d8eb036dd600e0fda711417634590b9df Reviewed-on: http://review.whamcloud.com/6676 Tested-by: Hudson Reviewed-by: wangdi Tested-by: Maloo Reviewed-by: Mike Pershin Reviewed-by: Oleg Drokin --- diff --git a/lustre/mdd/mdd_dir.c b/lustre/mdd/mdd_dir.c index 27db0a7..6ac8aed 100644 --- a/lustre/mdd/mdd_dir.c +++ b/lustre/mdd/mdd_dir.c @@ -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 ((check == 0) || + if ((check == 1) || (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); - if (rc2 == -EEXIST) - rc2 = 0; } rc = rc != 0 ? rc : rc2; @@ -987,7 +985,7 @@ out: 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, @@ -1075,8 +1073,7 @@ int mdd_links_read(const struct lu_env *env, struct mdd_object *mdd_obj, if (rc < 0) return rc; - linkea_init(ldata); - return 0; + return linkea_init(ldata); } /** Read the link EA into a temp buffer.