X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmdd%2Fmdd_internal.h;h=1a525a31ccd91cd5b4f866b2b294b4c744102f48;hb=51ed079112c9a9eeac37eaf680637a4d04dd3cc9;hp=2b7961169e8ffcc7fbd555da15eba637aa4a2b52;hpb=9587ede5df1cd99c74dd732b84d885106af57ca0;p=fs%2Flustre-release.git diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h index 2b79611..1a525a3 100644 --- a/lustre/mdd/mdd_internal.h +++ b/lustre/mdd/mdd_internal.h @@ -26,8 +26,11 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2011 Whamcloud, Inc. + * */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -41,8 +44,6 @@ #ifndef _MDD_INTERNAL_H #define _MDD_INTERNAL_H -#include - #include #include #include @@ -50,7 +51,6 @@ #include #include #include -#include #ifdef HAVE_QUOTA_SUPPORT # include #endif @@ -67,6 +67,10 @@ static inline void mdd_quota_wrapper(struct lu_attr *la, unsigned int *qids) } #endif +/* PDO lock is unnecessary for current MDT stack because operations + * are already protected by ldlm lock */ +#define MDD_DISABLE_PDO_LOCK 1 + enum mdd_txn_op { MDD_TXN_OBJECT_DESTROY_OP = 0, MDD_TXN_OBJECT_CREATE_OP, @@ -80,6 +84,7 @@ enum mdd_txn_op { MDD_TXN_RENAME_TGT_OP, MDD_TXN_CREATE_DATA_OP, MDD_TXN_MKDIR_OP, + MDD_TXN_CLOSE_OP, MDD_TXN_LAST_OP }; @@ -102,13 +107,12 @@ struct mdd_txn_op_descr { #define CLM_PURGE 0x40000 struct mdd_changelog { - spinlock_t mc_lock; /* for index */ - cfs_waitq_t mc_waitq; + cfs_spinlock_t mc_lock; /* for index */ int mc_flags; int mc_mask; __u64 mc_index; __u64 mc_starttime; - spinlock_t mc_user_lock; + cfs_spinlock_t mc_user_lock; int mc_lastuser; }; @@ -144,10 +148,6 @@ enum mod_flags { MNLINK_OBJ = 1 << 4 }; -#define LUSTRE_APPEND_FL LDISKFS_APPEND_FL -#define LUSTRE_IMMUTABLE_FL LDISKFS_IMMUTABLE_FL -#define LUSTRE_DIRSYNC_FL LDISKFS_DIRSYNC_FL - enum mdd_object_role { MOR_SRC_PARENT, MOR_SRC_CHILD, @@ -163,7 +163,9 @@ struct mdd_object { __u32 mod_valid; __u64 mod_cltime; unsigned long mod_flags; +#ifndef MDD_DISABLE_PDO_LOCK struct dynlock mod_pdlock; +#endif #ifdef CONFIG_LOCKDEP /* "dep_map" name is assumed by lockdep.h macros. */ struct lockdep_map dep_map; @@ -227,6 +229,11 @@ void mdd_lov_objid_update(struct mdd_device *mdd, struct lov_mds_md *lmm); void mdd_lov_create_finish(const struct lu_env *env, struct mdd_device *mdd, struct lov_mds_md *lmm, int lmm_size, const struct md_op_spec *spec); +int mdd_file_lock(const struct lu_env *env, struct md_object *obj, + struct lov_mds_md *lmm, struct ldlm_extent *extent, + struct lustre_handle *lockh); +int mdd_file_unlock(const struct lu_env *env, struct md_object *obj, + struct lov_mds_md *lmm, struct lustre_handle *lockh); int mdd_get_md(const struct lu_env *env, struct mdd_object *obj, void *md, int *md_size, const char *name); int mdd_get_md_locked(const struct lu_env *env, struct mdd_object *obj, @@ -248,6 +255,8 @@ int mdd_object_kill(const struct lu_env *env, struct mdd_object *obj, struct md_attr *ma); int mdd_iattr_get(const struct lu_env *env, struct mdd_object *mdd_obj, struct md_attr *ma); +int mdd_attr_get_internal(const struct lu_env *env, struct mdd_object *mdd_obj, + struct md_attr *ma); int mdd_attr_get_internal_locked(const struct lu_env *env, struct mdd_object *mdd_obj, struct md_attr *ma); @@ -274,18 +283,14 @@ int mdd_write_locked(const struct lu_env *env, struct mdd_object *obj); void mdd_pdlock_init(struct mdd_object *obj); unsigned long mdd_name2hash(const char *name); -struct dynlock_handle *mdd_pdo_write_lock(const struct lu_env *env, - struct mdd_object *obj, - const char *name, - enum mdd_object_role role); -struct dynlock_handle *mdd_pdo_read_lock(const struct lu_env *env, - struct mdd_object *obj, - const char *name, - enum mdd_object_role role); +void *mdd_pdo_write_lock(const struct lu_env *env, struct mdd_object *obj, + const char *name, enum mdd_object_role role); +void *mdd_pdo_read_lock(const struct lu_env *env, struct mdd_object *obj, + const char *name, enum mdd_object_role role); void mdd_pdo_write_unlock(const struct lu_env *env, struct mdd_object *obj, - struct dynlock_handle *dlh); + void *dlh); void mdd_pdo_read_unlock(const struct lu_env *env, struct mdd_object *obj, - struct dynlock_handle *dlh); + void *dlh); /* mdd_dir.c */ int mdd_is_subdir(const struct lu_env *env, struct md_object *mo, const struct lu_fid *fid, struct lu_fid *sfid); @@ -374,11 +379,11 @@ extern const struct lu_device_operations mdd_lu_ops; struct mdd_object *mdd_object_find(const struct lu_env *env, struct mdd_device *d, const struct lu_fid *f); -int mdd_get_default_md(struct mdd_object *mdd_obj, struct lov_mds_md *lmm, - int *size); +int mdd_get_default_md(struct mdd_object *mdd_obj, struct lov_mds_md *lmm); int mdd_readpage(const struct lu_env *env, struct md_object *obj, const struct lu_rdpg *rdpg); - +int mdd_changelog(const struct lu_env *env, enum changelog_rec_type type, + int flags, struct md_object *obj); /* mdd_quota.c*/ #ifdef HAVE_QUOTA_SUPPORT int mdd_quota_notify(const struct lu_env *env, struct md_device *m); @@ -412,11 +417,17 @@ int mdd_quota_finvalidate(const struct lu_env *env, struct md_device *m, /* mdd_trans.c */ void mdd_txn_param_build(const struct lu_env *env, struct mdd_device *mdd, - enum mdd_txn_op); + enum mdd_txn_op, int changelog_cnt); +int mdd_create_txn_param_build(const struct lu_env *env, struct mdd_device *mdd, + struct lov_mds_md *lmm, enum mdd_txn_op op, + int changelog_cnt); int mdd_log_txn_param_build(const struct lu_env *env, struct md_object *obj, - struct md_attr *ma, enum mdd_txn_op); -int mdd_setattr_txn_param_build(const struct lu_env *env, struct md_object *obj, - struct md_attr *ma, enum mdd_txn_op); + struct md_attr *ma, enum mdd_txn_op, + int changelog_cnt); +void mdd_setattr_txn_param_build(const struct lu_env *env, + struct md_object *obj, + struct md_attr *ma, enum mdd_txn_op, + int changelog_cnt); int mdd_lov_destroy(const struct lu_env *env, struct mdd_device *mdd, struct mdd_object *obj, struct lu_attr *la); @@ -439,8 +450,6 @@ int mdd_txn_start_cb(const struct lu_env *env, struct txn_param *param, int mdd_txn_stop_cb(const struct lu_env *env, struct thandle *txn, void *cookie); -int mdd_txn_commit_cb(const struct lu_env *env, struct thandle *txn, - void *cookie); /* mdd_device.c */ struct lu_object *mdd_object_alloc(const struct lu_env *env, const struct lu_object_header *hdr, @@ -546,7 +555,7 @@ static inline const struct lu_fid *mdo2fid(const struct mdd_object *obj) return lu_object_fid(&obj->mod_obj.mo_lu); } -static inline umode_t mdd_object_type(const struct mdd_object *obj) +static inline cfs_umode_t mdd_object_type(const struct mdd_object *obj) { return lu_object_attr(&obj->mod_obj.mo_lu); }