X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Flu_object.h;h=94c0b47ff65ba8be01b1e067880ab2b21b0215b2;hb=ea1a05b99c63689771fd678d10e9748ce18e129c;hp=52fae16e2d0225d22804e525482b8e28787dd3c5;hpb=4af3ab1945fd1ac6cc9870d72734c37a000a0999;p=fs%2Flustre-release.git diff --git a/lustre/include/lu_object.h b/lustre/include/lu_object.h index 52fae16..94c0b47 100644 --- a/lustre/include/lu_object.h +++ b/lustre/include/lu_object.h @@ -27,7 +27,7 @@ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, 2012, Intel Corporation. + * Copyright (c) 2011, 2013, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -38,14 +38,8 @@ #define __LUSTRE_LU_OBJECT_H #include - -/* - * struct lu_fid - */ #include - #include - #include struct seq_file; @@ -398,16 +392,10 @@ struct lu_device_type_operations { void (*ldto_stop)(struct lu_device_type *t); }; -/** - * Flags for the object layers. - */ -enum lu_object_flags { - /** - * this flags is set if lu_object_operations::loo_object_init() has - * been called for this layer. Used by lu_object_alloc(). - */ - LU_OBJECT_ALLOCATED = (1 << 0) -}; +static inline int lu_device_is_md(const struct lu_device *d) +{ + return ergo(d != NULL, d->ld_type->ldt_tags & LU_DEVICE_MD); +} /** * Common object attributes. @@ -486,18 +474,10 @@ struct lu_object { * Linkage into list of all layers. */ cfs_list_t lo_linkage; - /** - * Depth. Top level layer depth is 0. - */ - int lo_depth; /** - * Flags from enum lu_object_flags. + * Link to the device, for debugging. */ - __u32 lo_flags; - /** - * Link to the device, for debugging. - */ - struct lu_ref_link *lo_dev_ref; + struct lu_ref_link lo_dev_ref; }; enum lu_object_header_flags { @@ -510,7 +490,7 @@ enum lu_object_header_flags { /** * Mark this object has already been taken out of cache. */ - LU_OBJECT_UNHASHED = 1 + LU_OBJECT_UNHASHED = 1, }; enum lu_object_header_attr { @@ -575,28 +555,28 @@ struct lu_object_header { struct fld; struct lu_site_bkt_data { - /** - * number of busy object on this bucket - */ - long lsb_busy; - /** - * LRU list, updated on each access to object. Protected by - * bucket lock of lu_site::ls_obj_hash. - * - * "Cold" end of LRU is lu_site::ls_lru.next. Accessed object are - * moved to the lu_site::ls_lru.prev (this is due to the non-existence - * of list_for_each_entry_safe_reverse()). - */ - cfs_list_t lsb_lru; - /** - * Wait-queue signaled when an object in this site is ultimately - * destroyed (lu_object_free()). It is used by lu_object_find() to - * wait before re-trying when object in the process of destruction is - * found in the hash table. - * - * \see htable_lookup(). - */ - cfs_waitq_t lsb_marche_funebre; + /** + * number of busy object on this bucket + */ + long lsb_busy; + /** + * LRU list, updated on each access to object. Protected by + * bucket lock of lu_site::ls_obj_hash. + * + * "Cold" end of LRU is lu_site::ls_lru.next. Accessed object are + * moved to the lu_site::ls_lru.prev (this is due to the non-existence + * of list_for_each_entry_safe_reverse()). + */ + cfs_list_t lsb_lru; + /** + * Wait-queue signaled when an object in this site is ultimately + * destroyed (lu_object_free()). It is used by lu_object_find() to + * wait before re-trying when object in the process of destruction is + * found in the hash table. + * + * \see htable_lookup(). + */ + wait_queue_head_t lsb_marche_funebre; }; enum { @@ -666,6 +646,11 @@ lu_site_bkt_from_fid(struct lu_site *site, struct lu_fid *fid) return cfs_hash_bd_extra_get(site->ls_obj_hash, &bd); } +static inline struct seq_server_site *lu_site2seq(const struct lu_site *s) +{ + return s->ld_seq_site; +} + /** \name ctors * Constructors/destructors. * @{ @@ -740,6 +725,8 @@ struct lu_object *lu_object_find_at(const struct lu_env *env, struct lu_device *dev, const struct lu_fid *f, const struct lu_object_conf *conf); +void lu_object_purge(const struct lu_env *env, struct lu_device *dev, + const struct lu_fid *f); struct lu_object *lu_object_find_slice(const struct lu_env *env, struct lu_device *dev, const struct lu_fid *f, @@ -803,9 +790,8 @@ int lu_cdebug_printer(const struct lu_env *env, */ #define LU_OBJECT_DEBUG(mask, env, object, format, ...) \ do { \ - LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, mask, NULL); \ - \ if (cfs_cdebug_show(mask, DEBUG_SUBSYSTEM)) { \ + LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, mask, NULL); \ lu_object_print(env, &msgdata, lu_cdebug_printer, object);\ CDEBUG(mask, format , ## __VA_ARGS__); \ } \ @@ -816,9 +802,8 @@ do { \ */ #define LU_OBJECT_HEADER(mask, env, object, format, ...) \ do { \ - LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, mask, NULL); \ - \ if (cfs_cdebug_show(mask, DEBUG_SUBSYSTEM)) { \ + LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, mask, NULL); \ lu_object_header_print(env, &msgdata, lu_cdebug_printer,\ (object)->lo_header); \ lu_cdebug_printer(env, &msgdata, "\n"); \ @@ -869,11 +854,19 @@ static inline __u32 lu_object_attr(const struct lu_object *o) return o->lo_header->loh_attr; } -static inline struct lu_ref_link *lu_object_ref_add(struct lu_object *o, - const char *scope, - const void *source) +static inline void lu_object_ref_add(struct lu_object *o, + const char *scope, + const void *source) +{ + lu_ref_add(&o->lo_header->loh_reference, scope, source); +} + +static inline void lu_object_ref_add_at(struct lu_object *o, + struct lu_ref_link *link, + const char *scope, + const void *source) { - return lu_ref_add(&o->lo_header->loh_reference, scope, source); + lu_ref_add_at(&o->lo_header->loh_reference, link, scope, source); } static inline void lu_object_ref_del(struct lu_object *o, @@ -1019,7 +1012,11 @@ enum lu_context_tag { /** * Context for local operations */ - LCT_LOCAL = 1 << 7, + LCT_LOCAL = 1 << 7, + /** + * session for server thread + **/ + LCT_SERVER_SESSION = 1 << 8, /** * Set when at least one of keys, having values in this context has * non-NULL lu_context_key::lct_exit() method. This is used to @@ -1116,14 +1113,14 @@ struct lu_context_key { * key. */ cfs_atomic_t lct_used; - /** - * Internal implementation detail: module for this key. - */ - cfs_module_t *lct_owner; - /** - * References to this key. For debugging. - */ - struct lu_ref lct_reference; + /** + * Internal implementation detail: module for this key. + */ + struct module *lct_owner; + /** + * References to this key. For debugging. + */ + struct lu_ref lct_reference; }; #define LU_KEY_INIT(mod, type) \ @@ -1132,7 +1129,7 @@ struct lu_context_key { { \ type *value; \ \ - CLASSERT(CFS_PAGE_SIZE >= sizeof (*value)); \ + CLASSERT(PAGE_CACHE_SIZE >= sizeof (*value)); \ \ OBD_ALLOC_PTR(value); \ if (value == NULL) \ @@ -1278,26 +1275,6 @@ int lu_env_refill_by_tags(struct lu_env *env, __u32 ctags, __u32 stags); /** @} lu_context */ -struct lu_ucred { - __u32 uc_valid; - __u32 uc_o_uid; - __u32 uc_o_gid; - __u32 uc_o_fsuid; - __u32 uc_o_fsgid; - __u32 uc_uid; - __u32 uc_gid; - __u32 uc_fsuid; - __u32 uc_fsgid; - __u32 uc_suppgids[2]; - cfs_cap_t uc_cap; - __u32 uc_umask; - cfs_group_info_t *uc_ginfo; - struct md_identity *uc_identity; -}; -struct lu_ucred *lu_ucred(const struct lu_env *env); -struct lu_ucred *lu_ucred_check(const struct lu_env *env); -struct lu_ucred *lu_ucred_assert(const struct lu_env *env); - /** * Output site statistical counters into a buffer. Suitable for * ll_rd_*()-style functions. @@ -1321,9 +1298,6 @@ struct lu_buf { ssize_t lb_len; }; -/** null buffer */ -extern struct lu_buf LU_BUF_NULL; - #define DLUBUF "(%p %zu)" #define PLUBUF(buf) (buf)->lb_buf, (buf)->lb_len /** @@ -1342,7 +1316,7 @@ int lu_global_init(void); void lu_global_fini(void); struct lu_kmem_descr { - cfs_mem_cache_t **ckd_cache; + struct kmem_cache **ckd_cache; const char *ckd_name; const size_t ckd_size; }; @@ -1356,5 +1330,15 @@ struct lu_object *lu_object_anon(const struct lu_env *env, struct lu_device *dev, const struct lu_object_conf *conf); +/** null buffer */ +extern struct lu_buf LU_BUF_NULL; + +void lu_buf_free(struct lu_buf *buf); +void lu_buf_alloc(struct lu_buf *buf, int size); +void lu_buf_realloc(struct lu_buf *buf, int size); + +int lu_buf_check_and_grow(struct lu_buf *buf, int len); +struct lu_buf *lu_buf_check_and_alloc(struct lu_buf *buf, int len); + /** @} lu */ #endif /* __LUSTRE_LU_OBJECT_H */