X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fliblustre%2Fllite_cl.c;h=e4ed309198b4b4cedbc1ef0e3c60822c2b94f163;hp=d6fc89820173adae7c961083670b0f550c0230fc;hb=59f0a47800762b7833af50bff6acaa21ab08e481;hpb=9fe4b52ad2ffadf125d9b5c78bb2ff9a01725707 diff --git a/lustre/liblustre/llite_cl.c b/lustre/liblustre/llite_cl.c index d6fc898..e4ed309 100644 --- a/lustre/liblustre/llite_cl.c +++ b/lustre/liblustre/llite_cl.c @@ -16,35 +16,27 @@ * You should have received a copy of the GNU General Public License * along with Lustre; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Copyright (c) 2011, 2013, Intel Corporation. */ #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" /* @@ -55,9 +47,8 @@ static int slp_type_init (struct lu_device_type *t); static void slp_type_fini (struct lu_device_type *t); -static struct cl_page * slp_page_init(const struct lu_env *env, - struct cl_object *obj, - struct cl_page *page, cfs_page_t *vmpage); +static int slp_page_init(const struct lu_env *env, struct cl_object *obj, + 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); @@ -79,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; @@ -90,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; @@ -101,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); @@ -196,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, @@ -222,32 +212,26 @@ void slp_global_fini(void) * */ -static struct cl_page *slp_page_init(const struct lu_env *env, - struct cl_object *obj, - struct cl_page *page, cfs_page_t *vmpage) +static int slp_page_init(const struct lu_env *env, struct cl_object *obj, + struct cl_page *page, pgoff_t index) { - struct ccc_page *cpg; - int result; + struct ccc_page *cpg = cl_object_page_slice(obj, page); - CLOBINVRNT(env, obj, ccc_object_invariant(obj)); + CLOBINVRNT(env, obj, ccc_object_invariant(obj)); - OBD_ALLOC_PTR(cpg); - if (cpg != NULL) { - cpg->cpg_page = vmpage; + cpg->cpg_page = page->cp_vmpage; - if (page->cp_type == CPT_CACHEABLE) { - LBUG(); - } else { - struct ccc_object *clobj = cl2ccc(obj); + 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); - clobj->cob_transient_pages++; - } - result = 0; - } else - result = -ENOMEM; - return ERR_PTR(result); + cl_page_slice_add(page, &cpg->cpg_cl, obj, index, + &slp_transient_page_ops); + clobj->cob_transient_pages++; + } + + return 0; } static int slp_io_init(const struct lu_env *env, struct cl_object *obj, @@ -299,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); @@ -364,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, @@ -502,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; @@ -571,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; @@ -580,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) @@ -613,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); @@ -630,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)); @@ -790,12 +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(); - cl_env_cache_purge(~0); - RETURN(0); + cl_env_cache_purge(~0); + + RETURN(0); }