X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Flustre_osc.h;h=656b60a26a74bc40b3170aa3c91e481c50f6e20d;hb=fb3ed0fe68e324f8d6e002a32486de7f5d38f2e3;hp=902a82f92ff33ed2ff3fee1671c4145f5a1f89f0;hpb=6bce536725efd166d2772f13fe954f271f9c53b8;p=fs%2Flustre-release.git diff --git a/lustre/include/lustre_osc.h b/lustre/include/lustre_osc.h index 902a82f..656b60a 100644 --- a/lustre/include/lustre_osc.h +++ b/lustre/include/lustre_osc.h @@ -73,7 +73,6 @@ enum async_flags { struct osc_async_page { int oap_magic; unsigned short oap_cmd; - unsigned short oap_interrupted:1; struct list_head oap_pending_item; struct list_head oap_rpc_item; @@ -100,14 +99,6 @@ static inline struct osc_async_page *brw_page2oap(struct brw_page *pga) return container_of(pga, struct osc_async_page, oap_brw_page); } -struct osc_cache_waiter { - struct list_head ocw_entry; - wait_queue_head_t ocw_waitq; - struct osc_async_page *ocw_oap; - int ocw_grant; - int ocw_rc; -}; - struct osc_device { struct cl_device od_cl; struct obd_export *od_exp; @@ -230,11 +221,11 @@ enum osc_dap_flags { * Just check if the desired lock exists, it won't hold reference * count on lock. */ - OSC_DAP_FL_TEST_LOCK = 1 << 0, + OSC_DAP_FL_TEST_LOCK = BIT(0), /** * Return the lock even if it is being canceled. */ - OSC_DAP_FL_CANCELING = 1 << 1 + OSC_DAP_FL_CANCELING = BIT(1), }; /* @@ -342,19 +333,8 @@ static inline void osc_object_unlock(struct osc_object *obj) spin_unlock(&obj->oo_lock); } -static inline int osc_object_is_locked(struct osc_object *obj) -{ -#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) - return spin_is_locked(&obj->oo_lock); -#else - /* - * It is not perfect to return true all the time. - * But since this function is only used for assertion - * and checking, it seems OK. - */ - return 1; -#endif -} +#define assert_osc_object_is_locked(obj) \ + assert_spin_locked(&obj->oo_lock) static inline void osc_object_set_contended(struct osc_object *obj) { @@ -553,7 +533,7 @@ struct osc_brw_async_args { int aa_requested_nob; int aa_nio_count; u32 aa_page_count; - int aa_resends; + s32 aa_resends; struct brw_page **aa_ppga; struct client_obd *aa_cli; struct list_head aa_oaps; @@ -586,7 +566,6 @@ long osc_lru_shrink(const struct lu_env *env, struct client_obd *cli, long target, bool force); /* osc_cache.c */ -int osc_cancel_async_page(const struct lu_env *env, struct osc_page *ops); int osc_set_async_flags(struct osc_object *obj, struct osc_page *opg, u32 async_flags); int osc_prep_async_page(struct osc_object *osc, struct osc_page *ops, @@ -611,7 +590,10 @@ int osc_cache_wait_range(const struct lu_env *env, struct osc_object *obj, pgoff_t start, pgoff_t end); int osc_io_unplug0(const struct lu_env *env, struct client_obd *cli, struct osc_object *osc, int async); -void osc_wake_cache_waiters(struct client_obd *cli); +static inline void osc_wake_cache_waiters(struct client_obd *cli) +{ + wake_up(&cli->cl_cache_waiters); +} static inline int osc_io_unplug_async(const struct lu_env *env, struct client_obd *cli, @@ -627,13 +609,13 @@ static inline void osc_io_unplug(const struct lu_env *env, (void)osc_io_unplug0(env, cli, osc, 0); } -typedef int (*osc_page_gang_cbt)(const struct lu_env *, struct cl_io *, - struct osc_page *, void *); -int osc_page_gang_lookup(const struct lu_env *env, struct cl_io *io, - struct osc_object *osc, pgoff_t start, pgoff_t end, - osc_page_gang_cbt cb, void *cbdata); -int osc_discard_cb(const struct lu_env *env, struct cl_io *io, - struct osc_page *ops, void *cbdata); +typedef bool (*osc_page_gang_cbt)(const struct lu_env *, struct cl_io *, + struct osc_page *, void *); +bool osc_page_gang_lookup(const struct lu_env *env, struct cl_io *io, + struct osc_object *osc, pgoff_t start, pgoff_t end, + osc_page_gang_cbt cb, void *cbdata); +bool osc_discard_cb(const struct lu_env *env, struct cl_io *io, + struct osc_page *ops, void *cbdata); /* osc_dev.c */ int osc_device_init(const struct lu_env *env, struct lu_device *d, @@ -778,9 +760,9 @@ static inline struct cl_object *osc2cl(const struct osc_object *obj) return (struct cl_object *)&obj->oo_cl; } -static inline struct osc_device *obd2osc_dev(const struct obd_device *d) +static inline struct osc_device *obd2osc_dev(const struct obd_device *obd) { - return container_of0(d->obd_lu_dev, struct osc_device, + return container_of0(obd->obd_lu_dev, struct osc_device, od_cl.cd_lu_dev); } @@ -840,7 +822,7 @@ static inline struct osc_page *oap2osc(struct osc_async_page *oap) static inline pgoff_t osc_index(struct osc_page *opg) { - return opg->ops_cl.cpl_index; + return opg->ops_cl.cpl_page->cp_osc_index; } static inline struct cl_page *oap2cl_page(struct osc_async_page *oap) @@ -905,7 +887,7 @@ struct osc_extent { /** osc_object of this extent */ struct osc_object *oe_obj; /** refcount, removed from red-black tree if reaches zero. */ - atomic_t oe_refc; + struct kref oe_refc; /** busy if non-zero */ atomic_t oe_users; /** link list of osc_object's oo_{hp|urgent|locking}_exts. */ @@ -913,9 +895,8 @@ struct osc_extent { /** state of this extent */ enum osc_extent_state oe_state; /** flags for this extent. */ - unsigned int oe_intree:1, /** 0 is write, 1 is read */ - oe_rw:1, + unsigned int oe_rw:1, /** sync extent, queued by osc_queue_sync_pages() */ oe_sync:1, /** set if this extent has partial, sync pages.