X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fliblustre%2Fllite_cl.c;h=e4ed309198b4b4cedbc1ef0e3c60822c2b94f163;hb=41b9a48c344fb0822b2c956162b5d262f267b3a1;hp=adc9dc9d5b0c0e1f2239115f649b34d7a53fa627;hpb=98060d83459ba10409f295898f0ec917f938b4d3;p=fs%2Flustre-release.git diff --git a/lustre/liblustre/llite_cl.c b/lustre/liblustre/llite_cl.c index adc9dc9..e4ed309 100644 --- a/lustre/liblustre/llite_cl.c +++ b/lustre/liblustre/llite_cl.c @@ -22,31 +22,21 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include -#include -#include -#include -#include +#include +#include +#include #include -#include -#include -#ifndef __CYGWIN__ -# include -#else -# include -#endif - +#include +#include +#include +#include #include - +#include +#include +#include +#include #include #include -#include -#include -#include -#include -#include -#include - #include "llite_lib.h" /* @@ -58,7 +48,7 @@ static int slp_type_init (struct lu_device_type *t); static void slp_type_fini (struct lu_device_type *t); static int slp_page_init(const struct lu_env *env, struct cl_object *obj, - struct cl_page *page, cfs_page_t *vmpage); + struct cl_page *page, pgoff_t index); static int slp_attr_get (const struct lu_env *env, struct cl_object *obj, struct cl_attr *attr); @@ -80,7 +70,6 @@ static const struct cl_device_operations slp_cl_ops; static const struct cl_io_operations ccc_io_ops; static const struct lu_device_type_operations slp_device_type_ops; //struct lu_device_type slp_device_type; -static const struct cl_page_operations slp_page_ops; static const struct cl_page_operations slp_transient_page_ops; static const struct cl_lock_operations slp_lock_ops; @@ -91,8 +80,8 @@ static const struct cl_lock_operations slp_lock_ops; * */ -void *slp_session_key_init(const struct lu_context *ctx, - struct lu_context_key *key) +static void *slp_session_key_init(const struct lu_context *ctx, + struct lu_context_key *key) { struct slp_session *session; @@ -102,8 +91,8 @@ void *slp_session_key_init(const struct lu_context *ctx, return session; } -void slp_session_key_fini(const struct lu_context *ctx, - struct lu_context_key *key, void *data) +static void slp_session_key_fini(const struct lu_context *ctx, + struct lu_context_key *key, void *data) { struct slp_session *session = data; OBD_FREE_PTR(session); @@ -197,7 +186,7 @@ static const struct lu_device_type_operations slp_device_type_ops = { .ldto_device_fini = ccc_device_fini }; -struct lu_device_type slp_device_type = { +static struct lu_device_type slp_device_type = { .ldt_tags = LU_DEVICE_CL, .ldt_name = LUSTRE_SLP_NAME, .ldt_ops = &slp_device_type_ops, @@ -224,25 +213,25 @@ void slp_global_fini(void) */ static int slp_page_init(const struct lu_env *env, struct cl_object *obj, - struct cl_page *page, cfs_page_t *vmpage) + struct cl_page *page, pgoff_t index) { - struct ccc_page *cpg = cl_object_page_slice(obj, page); + struct ccc_page *cpg = cl_object_page_slice(obj, page); - CLOBINVRNT(env, obj, ccc_object_invariant(obj)); + CLOBINVRNT(env, obj, ccc_object_invariant(obj)); - cpg->cpg_page = vmpage; + cpg->cpg_page = page->cp_vmpage; if (page->cp_type == CPT_CACHEABLE) { LBUG(); } else { struct ccc_object *clobj = cl2ccc(obj); - cl_page_slice_add(page, &cpg->cpg_cl, obj, - &slp_transient_page_ops); + cl_page_slice_add(page, &cpg->cpg_cl, obj, index, + &slp_transient_page_ops); clobj->cob_transient_pages++; } - return 0; + return 0; } static int slp_io_init(const struct lu_env *env, struct cl_object *obj, @@ -294,7 +283,7 @@ static int slp_attr_get(const struct lu_env *env, struct cl_object *obj, static void slp_page_fini_common(struct ccc_page *cp) { - cfs_page_t *vmpage = cp->cpg_page; + struct page *vmpage = cp->cpg_page; LASSERT(vmpage != NULL); llu_free_user_page(vmpage); @@ -359,10 +348,8 @@ static const struct cl_page_operations slp_transient_page_ops = { .cpo_unassume = ccc_transient_page_unassume, .cpo_disown = ccc_transient_page_disown, .cpo_discard = ccc_transient_page_discard, - .cpo_vmpage = ccc_page_vmpage, .cpo_is_vmlocked = slp_page_is_vmlocked, .cpo_fini = slp_transient_page_fini, - .cpo_is_under_lock = ccc_page_is_under_lock, .io = { [CRT_READ] = { .cpo_completion = slp_page_completion_read, @@ -497,8 +484,8 @@ static int llu_queue_pio(const struct lu_env *env, struct cl_io *io, unsigned long index, offset, bytes; offset = (pos & ~CFS_PAGE_MASK); - index = pos >> CFS_PAGE_SHIFT; - bytes = CFS_PAGE_SIZE - offset; + index = pos >> PAGE_CACHE_SHIFT; + bytes = PAGE_CACHE_SIZE - offset; if (bytes > count) bytes = count; @@ -566,8 +553,7 @@ static int llu_queue_pio(const struct lu_env *env, struct cl_io *io, } static -struct llu_io_group * get_io_group(struct inode *inode, int maxpages, - struct lustre_rw_params *params) +struct llu_io_group *get_io_group(struct inode *inode, int maxpages) { struct llu_io_group *group; @@ -575,14 +561,13 @@ struct llu_io_group * get_io_group(struct inode *inode, int maxpages, if (!group) return ERR_PTR(-ENOMEM); - group->lig_params = params; - return group; } static int max_io_pages(ssize_t len, int iovlen) { - return (((len + CFS_PAGE_SIZE -1) / CFS_PAGE_SIZE) + 2 + iovlen - 1); + return ((len + PAGE_CACHE_SIZE - 1) / PAGE_CACHE_SIZE) + + 2 + iovlen - 1; } void put_io_group(struct llu_io_group *group) @@ -608,7 +593,6 @@ static int slp_io_start(const struct lu_env *env, const struct cl_io_slice *ios) loff_t pos; long cnt; struct llu_io_group *iogroup; - struct lustre_rw_params p = {0}; int iovidx; struct intnl_stat *st = llu_i2stat(inode); struct llu_inode_info *lli = llu_i2info(inode); @@ -625,14 +609,8 @@ static int slp_io_start(const struct lu_env *env, const struct cl_io_slice *ios) pos = io->u.ci_rd.rd.crw_pos; cnt = io->u.ci_rd.rd.crw_count; } - if (io->u.ci_wr.wr_append) { - p.lrp_lock_mode = LCK_PW; - } else { - p.lrp_brw_flags = OBD_BRW_SRVLOCK; - p.lrp_lock_mode = LCK_NL; - } - iogroup = get_io_group(inode, max_io_pages(cnt, cio->cui_nrsegs), &p); + iogroup = get_io_group(inode, max_io_pages(cnt, cio->cui_nrsegs)); if (IS_ERR(iogroup)) RETURN(PTR_ERR(iogroup)); @@ -785,11 +763,7 @@ int cl_sb_fini(struct llu_sb_info *sbi) sbi->ll_site = NULL; } cl_env_put(env, &refcheck); - /* - * If mount failed (sbi->ll_cl == NULL), and this there are no other - * mounts, stop device types manually (this usually happens - * automatically when last device is destroyed). - */ - lu_types_stop(); - RETURN(0); + cl_env_cache_purge(~0); + + RETURN(0); }