X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Fcl_object.h;h=25e518b5fccd560df72e2965367539dbcb2eec41;hb=e4872648bfaea1795133f10695c40e0fd3069831;hp=86966dc44e71032e3c7a0d725312b91b697f2cc2;hpb=f2a9374170e4522b9d2ac3b7096cf2912339d480;p=fs%2Flustre-release.git diff --git a/lustre/include/cl_object.h b/lustre/include/cl_object.h index 86966dc..25e518b 100644 --- a/lustre/include/cl_object.h +++ b/lustre/include/cl_object.h @@ -1616,9 +1616,11 @@ struct cl_lock_slice { */ enum cl_lock_transition { /** operation cannot be completed immediately. Wait for state change. */ - CLO_WAIT = 1, + CLO_WAIT = 1, /** operation had to release lock mutex, restart. */ - CLO_REPEAT = 2 + CLO_REPEAT = 2, + /** lower layer re-enqueued. */ + CLO_REENQUEUED = 3, }; /** @@ -2155,9 +2157,17 @@ enum cl_enq_flags { */ CEF_NEVER = 0x00000010, /** + * for async glimpse lock. + */ + CEF_AGL = 0x00000020, + /** + * do not trigger re-enqueue. + */ + CEF_NO_REENQUEUE = 0x00000040, + /** * mask of enq_flags. */ - CEF_MASK = 0x0000001f + CEF_MASK = 0x0000007f, }; /** @@ -2222,7 +2232,9 @@ enum cl_io_lock_dmd { /** Layers are free to decide between local and global locking. */ CILR_MAYBE, /** Never lock: there is no cache (e.g., liblustre). */ - CILR_NEVER + CILR_NEVER, + /** Peek lock: use existing locks, don't queue new ones */ + CILR_PEEK }; struct cl_io_rw_common { @@ -2283,10 +2295,12 @@ struct cl_io { pgoff_t ft_index; /** bytes valid byte on a faulted page. */ int ft_nob; - /** writable page? */ + /** writable page? for nopage() only */ int ft_writable; /** page of an executable? */ int ft_executable; + /** page_mkwrite() */ + int ft_mkwrite; /** resulting page */ struct cl_page *ft_page; } ci_fault; @@ -2659,15 +2673,19 @@ static inline int cl_object_same(struct cl_object *o0, struct cl_object *o1) * @{ */ enum { CLP_GANG_OKAY = 0, + CLP_GANG_RESCHED, CLP_GANG_AGAIN, - CLP_GANG_RESCHED + CLP_GANG_ABORT }; +/* callback of cl_page_gang_lookup() */ +typedef int (*cl_page_gang_cb_t) (const struct lu_env *, struct cl_io *, + struct cl_page *, void *); int cl_page_gang_lookup (const struct lu_env *env, struct cl_object *obj, struct cl_io *io, pgoff_t start, pgoff_t end, - struct cl_page_list *plist); + cl_page_gang_cb_t cb, void *cbdata); struct cl_page *cl_page_lookup (struct cl_object_header *hdr, pgoff_t index); struct cl_page *cl_page_find (const struct lu_env *env, @@ -3119,6 +3137,8 @@ void cl_env_implant (struct lu_env *env, int *refcheck); void cl_env_unplant (struct lu_env *env, int *refcheck); unsigned cl_env_cache_purge(unsigned nr); +void cl_set_ctx_tags(__u32 tags); +void cl_set_ses_tags(__u32 tags); /** @} cl_env */ /*