X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Flov%2Flov_cl_internal.h;h=5c43cbb60570e9bf93fa2d815188a71530e392e8;hb=d5390bbde9b525b13ab91f5610abe1c4bb98eff9;hp=efc8d04f69576f42d757ca85893f36e348b2da6e;hpb=08aa217ce49aba1ded52e0f7adb8a607035123fd;p=fs%2Flustre-release.git diff --git a/lustre/lov/lov_cl_internal.h b/lustre/lov/lov_cl_internal.h index efc8d04..5c43cbb 100644 --- a/lustre/lov/lov_cl_internal.h +++ b/lustre/lov/lov_cl_internal.h @@ -40,6 +40,7 @@ * Internal interfaces of LOV layer. * * Author: Nikita Danilov + * Author: Jinshan Xiong */ #ifndef LOV_CL_INTERNAL_H @@ -197,23 +198,28 @@ struct lov_object { * \see lov_object::lo_type */ struct rw_semaphore lo_type_guard; - /** - * Type of an object. Protected by lov_object::lo_type_guard. - */ - enum lov_layout_type lo_type; /** - * True if layout is valid. This bit is cleared when layout lock + * Type of an object. Protected by lov_object::lo_type_guard. + */ + enum lov_layout_type lo_type; + /** + * True if layout is invalid. This bit is cleared when layout lock * is lost. */ - unsigned lo_lsm_invalid:1; + bool lo_layout_invalid; /** - * Layout metadata. + * How many IOs are on going on this object. Layout can be changed + * only if there is no active IO. */ - struct lov_stripe_md *lo_lsm; + cfs_atomic_t lo_active_ios; /** * Waitq - wait for no one else is using lo_lsm */ cfs_waitq_t lo_waitq; + /** + * Layout metadata. NULL if empty layout. + */ + struct lov_stripe_md *lo_lsm; union lov_layout_state { struct lov_layout_raid0 { @@ -297,7 +303,7 @@ struct lov_lock { * Set when sub-lock was canceled, while top-lock was being * used, or unused. */ - int lls_cancel_race:1; + unsigned int lls_cancel_race:1; /** * An array of sub-locks * @@ -482,11 +488,6 @@ struct lov_io { * lov_io::lis_cl::cis_object. */ struct lov_object *lis_object; - /** - * Lov stripe - this determines how this io fans out. - * Hold a refcount to the lsm so it can't go away during IO. - */ - struct lov_stripe_md *lis_lsm; /** * Original end-of-io position for this IO, set by the upper layer as * cl_io::u::ci_rw::pos + cl_io::u::ci_rw::count. lov remembers this, @@ -554,14 +555,12 @@ extern struct lu_device_type lovsub_device_type; extern struct lu_context_key lov_key; extern struct lu_context_key lov_session_key; -extern cfs_mem_cache_t *lov_page_kmem; extern cfs_mem_cache_t *lov_lock_kmem; extern cfs_mem_cache_t *lov_object_kmem; extern cfs_mem_cache_t *lov_thread_kmem; extern cfs_mem_cache_t *lov_session_kmem; extern cfs_mem_cache_t *lov_req_kmem; -extern cfs_mem_cache_t *lovsub_page_kmem; extern cfs_mem_cache_t *lovsub_lock_kmem; extern cfs_mem_cache_t *lovsub_object_kmem; extern cfs_mem_cache_t *lovsub_req_kmem; @@ -598,17 +597,17 @@ int lov_sublock_modify (const struct lu_env *env, struct lov_lock *lov, const struct cl_lock_descr *d, int idx); -struct cl_page *lov_page_init (const struct lu_env *env, struct cl_object *ob, - struct cl_page *page, cfs_page_t *vmpage); -struct cl_page *lovsub_page_init(const struct lu_env *env, struct cl_object *ob, - struct cl_page *page, cfs_page_t *vmpage); +int lov_page_init (const struct lu_env *env, struct cl_object *ob, + struct cl_page *page, cfs_page_t *vmpage); +int lovsub_page_init (const struct lu_env *env, struct cl_object *ob, + struct cl_page *page, cfs_page_t *vmpage); -struct cl_page *lov_page_init_empty(const struct lu_env *env, - struct cl_object *obj, - struct cl_page *page, cfs_page_t *vmpage); -struct cl_page *lov_page_init_raid0(const struct lu_env *env, - struct cl_object *obj, - struct cl_page *page, cfs_page_t *vmpage); +int lov_page_init_empty (const struct lu_env *env, + struct cl_object *obj, + struct cl_page *page, cfs_page_t *vmpage); +int lov_page_init_raid0 (const struct lu_env *env, + struct cl_object *obj, + struct cl_page *page, cfs_page_t *vmpage); struct lu_object *lov_object_alloc (const struct lu_env *env, const struct lu_object_header *hdr, struct lu_device *dev);