X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fllite%2Fvvp_io.c;h=bbdfb8650867fa2861dd347acdfa71ef25e9baea;hp=db03b79d5e5113ddda0ad356cbc8679a3bf48503;hb=31819a287dcfc8b11b7623b399e9fb444174602c;hpb=0275eeb06fa394cc1447f385555107cb4f1d889f diff --git a/lustre/llite/vvp_io.c b/lustre/llite/vvp_io.c index db03b79..bbdfb86 100644 --- a/lustre/llite/vvp_io.c +++ b/lustre/llite/vvp_io.c @@ -183,36 +183,6 @@ static int vvp_mmap_locks(const struct lu_env *env, RETURN(0); } -static void vvp_io_update_iov(const struct lu_env *env, - struct ccc_io *vio, struct cl_io *io) -{ - int i; - size_t size = io->u.ci_rw.crw_count; - - vio->cui_iov_olen = 0; - if (cl_io_is_sendfile(io) || size == vio->cui_tot_count) - return; - - if (vio->cui_tot_nrsegs == 0) - vio->cui_tot_nrsegs = vio->cui_nrsegs; - - for (i = 0; i < vio->cui_tot_nrsegs; i++) { - struct iovec *iv = &vio->cui_iov[i]; - - if (iv->iov_len < size) - size -= iv->iov_len; - else { - if (iv->iov_len > size) { - vio->cui_iov_olen = iv->iov_len; - iv->iov_len = size; - } - break; - } - } - - vio->cui_nrsegs = i + 1; -} - static int vvp_io_rw_lock(const struct lu_env *env, struct cl_io *io, enum cl_lock_mode mode, loff_t start, loff_t end) { @@ -224,7 +194,7 @@ static int vvp_io_rw_lock(const struct lu_env *env, struct cl_io *io, LASSERT(vvp_env_io(env)->cui_oneshot == 0); ENTRY; - vvp_io_update_iov(env, cio, io); + ccc_io_update_iov(env, cio, io); if (io->u.ci_rw.crw_nonblock) ast_flags |= CEF_NONBLOCK; @@ -631,37 +601,6 @@ static int vvp_io_fault_start(const struct lu_env *env, return result; } -static void vvp_io_advance(const struct lu_env *env, - const struct cl_io_slice *ios, size_t nob) -{ - struct ccc_io *vio = cl2ccc_io(env, ios); - struct cl_io *io = ios->cis_io; - struct cl_object *obj = ios->cis_io->ci_obj; - - CLOBINVRNT(env, obj, ccc_object_invariant(obj)); - - if (!cl_io_is_sendfile(io) && io->ci_continue) { - /* update the iov */ - LASSERT(vio->cui_tot_nrsegs >= vio->cui_nrsegs); - LASSERT(vio->cui_tot_count >= nob); - - vio->cui_iov += vio->cui_nrsegs; - vio->cui_tot_nrsegs -= vio->cui_nrsegs; - vio->cui_tot_count -= nob; - - if (vio->cui_iov_olen) { - struct iovec *iv; - - vio->cui_iov--; - vio->cui_tot_nrsegs++; - iv = &vio->cui_iov[0]; - iv->iov_base += iv->iov_len; - LASSERT(vio->cui_iov_olen > iv->iov_len); - iv->iov_len = vio->cui_iov_olen - iv->iov_len; - } - } -} - static int vvp_io_read_page(const struct lu_env *env, const struct cl_io_slice *ios, const struct cl_page_slice *slice) @@ -703,7 +642,7 @@ static int vvp_io_read_page(const struct lu_env *env, if (cp->cpg_defer_uptodate) { cp->cpg_ra_used = 1; - cl_page_export(env, page); + cl_page_export(env, page, 1); } /* * Add page into the queue even when it is marked uptodate above. @@ -722,10 +661,7 @@ static int vvp_page_sync_io(const struct lu_env *env, struct cl_io *io, int to, enum cl_req_type crt) { struct cl_2queue *queue; - struct ccc_object *cobo = cl2ccc(page->cp_obj); struct cl_sync_io *anchor = &ccc_env_info(env)->cti_sync_io; - - int writing = io->ci_type == CIT_WRITE; int result; LASSERT(io->ci_type == CIT_READ || io->ci_type == CIT_WRITE); @@ -734,10 +670,6 @@ static int vvp_page_sync_io(const struct lu_env *env, struct cl_io *io, cl_2queue_init_page(queue, page); - if (writing) - /* Do not pass llap here as it is sync write. */ - vvp_write_pending(cobo, cp); - cl_sync_io_init(anchor, 1); cp->cpg_sync_io = anchor; cl_page_clip(env, page, 0, to); @@ -768,7 +700,7 @@ static int vvp_io_prepare_partial(const struct lu_env *env, struct cl_io *io, struct ccc_page *cp, unsigned from, unsigned to) { - struct cl_attr *attr = &ccc_env_info(env)->cti_attr; + struct cl_attr *attr = ccc_env_thread_attr(env); loff_t offset = cl_offset(obj, pg->cp_index); int result; @@ -800,7 +732,7 @@ static int vvp_io_prepare_partial(const struct lu_env *env, struct cl_io *io, * details. -jay */ if (result == 0) - cl_page_export(env, pg); + cl_page_export(env, pg, 1); } return result; } @@ -890,6 +822,9 @@ static int vvp_io_commit_write(const struct lu_env *env, tallyop = LPROC_LL_DIRTY_MISSES; vvp_write_pending(cl2ccc(obj), cp); set_page_dirty(vmpage); + /* ll_set_page_dirty() does the same for now, but + * it will not soon. */ + vvp_write_pending(cl2ccc(obj), cp); result = cl_page_cache_add(env, io, pg, CRT_WRITE); if (result == -EDQUOT) /* @@ -922,7 +857,7 @@ static int vvp_io_commit_write(const struct lu_env *env, if (result == 0) { if (size > i_size_read(inode)) i_size_write(inode, size); - cl_page_export(env, pg); + cl_page_export(env, pg, 1); } else if (size > i_size_read(inode)) cl_page_discard(env, io, pg); RETURN(result); @@ -934,13 +869,13 @@ static const struct cl_io_operations vvp_io_ops = { .cio_fini = vvp_io_fini, .cio_lock = vvp_io_read_lock, .cio_start = vvp_io_read_start, - .cio_advance = vvp_io_advance + .cio_advance = ccc_io_advance }, [CIT_WRITE] = { .cio_fini = vvp_io_fini, .cio_lock = vvp_io_write_lock, .cio_start = vvp_io_write_start, - .cio_advance = vvp_io_advance + .cio_advance = ccc_io_advance }, [CIT_TRUNC] = { .cio_fini = vvp_io_trunc_fini,