X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Fmdd%2Fmdd_internal.h;h=9183bbaccc50ce4fd83d6603a8dce16095e23905;hb=b69b7de30c3977cb69a741099218bc4a81752717;hp=e014ffb43c2ce81b934ce52e3c6791c8e54dcdac;hpb=5c4573e327c5d027a6b877f75910767244161a1f;p=fs%2Flustre-release.git diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h index e014ffb..9183bba 100644 --- a/lustre/mdd/mdd_internal.h +++ b/lustre/mdd/mdd_internal.h @@ -160,6 +160,7 @@ struct mdd_thread_info { struct dt_object_format mti_dof; struct linkea_data mti_link_data; struct md_op_spec mti_spec; + struct dt_insert_rec mti_dt_rec; }; extern const char orph_index_name[]; @@ -199,7 +200,7 @@ int mdd_is_subdir(const struct lu_env *env, struct md_object *mo, const struct lu_fid *fid, struct lu_fid *sfid); int mdd_may_create(const struct lu_env *env, struct mdd_object *pobj, const struct lu_attr *pattr, struct mdd_object *cobj, - bool check_perm, bool check_nlink); + bool check_perm); int mdd_may_unlink(const struct lu_env *env, struct mdd_object *pobj, const struct lu_attr *pattr, const struct lu_attr *attr); int mdd_may_delete(const struct lu_env *env, struct mdd_object *tpobj, @@ -257,9 +258,8 @@ int orph_declare_index_delete(const struct lu_env *, struct mdd_object *, struct thandle *); /* mdd_lproc.c */ -void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars); int mdd_procfs_init(struct mdd_device *mdd, const char *name); -int mdd_procfs_fini(struct mdd_device *mdd); +void mdd_procfs_fini(struct mdd_device *mdd); /* mdd_object.c */ extern struct kmem_cache *mdd_object_kmem; @@ -615,32 +615,39 @@ int mdo_xattr_list(const struct lu_env *env, struct mdd_object *obj, static inline int mdo_declare_index_insert(const struct lu_env *env, struct mdd_object *obj, - const struct lu_fid *fid, const char *name, - struct thandle *handle) + const struct lu_fid *fid, __u32 type, + const char *name, struct thandle *handle) { - struct dt_object *next = mdd_object_child(obj); - int rc = 0; + struct dt_object *next = mdd_object_child(obj); + int rc = 0; + + /* + * if the object doesn't exist yet, then it's supposed to be created + * and declaration of the creation should be enough to insert ./.. + */ - /* - * if the object doesn't exist yet, then it's supposed to be created - * and declaration of the creation should be enough to insert ./.. - */ /* FIXME: remote object should not be awared by MDD layer, but local * creation does not declare insert ./.. (comments above), which * is required by remote directory creation. * This remote check should be removed when mdd_object_exists check is * removed. */ - if (mdd_object_exists(obj) || mdd_object_remote(obj)) { - rc = -ENOTDIR; - if (dt_try_as_dir(env, next)) - rc = dt_declare_insert(env, next, - (struct dt_rec *)fid, - (const struct dt_key *)name, - handle); - } - - return rc; + if (mdd_object_exists(obj) || mdd_object_remote(obj)) { + rc = -ENOTDIR; + if (dt_try_as_dir(env, next)) { + struct dt_insert_rec *rec = + &mdd_env_info(env)->mti_dt_rec; + + rec->rec_fid = fid; + rec->rec_type = type; + rc = dt_declare_insert(env, next, + (const struct dt_rec *)rec, + (const struct dt_key *)name, + handle); + } + } + + return rc; } static inline