From 3b3ea5e35f1859add7bf9f51ca47f4ab0a2eb563 Mon Sep 17 00:00:00 2001 From: Bruno Faccini Date: Thu, 4 Jul 2013 10:13:40 +0200 Subject: [PATCH 1/1] 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 --- lustre/mdd/mdd_dir.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) 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. -- 1.8.3.1