From: Niu Yawei Date: Thu, 8 Aug 2013 05:02:33 +0000 (-0400) Subject: LU-3659 llog: missed dt_try_as_dir() in llog_osd_dir_get() X-Git-Tag: 2.4.92~44 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=48f6c6f97823f0b64acaa17524b49132ab3058db LU-3659 llog: missed dt_try_as_dir() in llog_osd_dir_get() dt_try_as_dir() should be called in llog_osd_dir_get() to make sure the do_index_ops being initialized. Signed-off-by: Niu Yawei Change-Id: I879c47bb59fbd28f3351f61e59cff2a6666e7d7a Reviewed-on: http://review.whamcloud.com/7267 Tested-by: Hudson Reviewed-by: Mike Pershin Tested-by: Maloo Reviewed-by: Keith Mannthey Reviewed-by: Oleg Drokin --- diff --git a/lustre/mgs/mgs_fs.c b/lustre/mgs/mgs_fs.c index e621bf0..6d237c4 100644 --- a/lustre/mgs/mgs_fs.c +++ b/lustre/mgs/mgs_fs.c @@ -151,6 +151,11 @@ int mgs_fs_setup(const struct lu_env *env, struct mgs_device *mgs) if (IS_ERR(o)) GOTO(out_root, rc = PTR_ERR(o)); + if (!dt_try_as_dir(env, o)) { + lu_object_put(env, &o->do_lu); + GOTO(out_root, rc = -ENOTDIR); + } + mgs->mgs_configs_dir = o; /* create directory to store nid table versions */ diff --git a/lustre/mgs/mgs_llog.c b/lustre/mgs/mgs_llog.c index 6303c4c..ebd4fbc 100644 --- a/lustre/mgs/mgs_llog.c +++ b/lustre/mgs/mgs_llog.c @@ -67,9 +67,6 @@ int class_dentry_readdir(const struct lu_env *env, CFS_INIT_LIST_HEAD(list); - if (!dt_try_as_dir(env, dir)) - GOTO(out, rc = -ENOTDIR); - LASSERT(dir); LASSERT(dir->do_index_ops); @@ -122,7 +119,6 @@ next: fini: iops->fini(env, it); -out: if (rc) CERROR("%s: key failed when listing %s: rc = %d\n", mgs->mgs_obd->obd_name, MOUNT_CONFIGS_DIR, rc); diff --git a/lustre/obdclass/llog_osd.c b/lustre/obdclass/llog_osd.c index de7c0b5..57dcd76 100644 --- a/lustre/obdclass/llog_osd.c +++ b/lustre/obdclass/llog_osd.c @@ -774,6 +774,11 @@ struct dt_object *llog_osd_dir_get(const struct lu_env *env, if (rc) return ERR_PTR(rc); dir = dt_locate(env, dt, &dti->dti_fid); + + if (!IS_ERR(dir) && !dt_try_as_dir(env, dir)) { + lu_object_put(env, &dir->do_lu); + return ERR_PTR(-ENOTDIR); + } } else { lu_object_get(&ctxt->loc_dir->do_lu); dir = ctxt->loc_dir;