static int ll_releasepage(struct page *vmpage, RELEASEPAGE_ARG_TYPE gfp_mask)
{
struct lu_env *env;
- void *cookie;
struct cl_object *obj;
struct cl_page *page;
struct address_space *mapping;
if (page == NULL)
return 1;
- cookie = cl_env_reenter();
env = cl_env_percpu_get();
LASSERT(!IS_ERR(env));
cl_page_put(env, page);
cl_env_percpu_put(env);
- cl_env_reexit(cookie);
return result;
}
struct kiocb *iocb, struct iov_iter *iter,
loff_t file_offset)
{
- struct lu_env *env;
+ struct ll_cl_context *lcc;
+ const struct lu_env *env;
struct cl_io *io;
struct file *file = iocb->ki_filp;
struct inode *inode = file->f_mapping->host;
ssize_t count = iov_iter_count(iter);
ssize_t tot_bytes = 0, result = 0;
size_t size = MAX_DIO_SIZE;
- __u16 refcheck;
/* FIXME: io smaller than PAGE_SIZE is broken on ia64 ??? */
if ((file_offset & ~PAGE_MASK) || (count & ~PAGE_MASK))
if (iov_iter_alignment(iter) & ~PAGE_MASK)
return -EINVAL;
- env = cl_env_get(&refcheck);
+ lcc = ll_cl_find(file);
+ if (lcc == NULL)
+ RETURN(-EIO);
+
+ env = lcc->lcc_env;
LASSERT(!IS_ERR(env));
- io = vvp_env_io(env)->vui_cl.cis_io;
+ io = lcc->lcc_io;
LASSERT(io != NULL);
/* 0. Need locking between buffered and direct access. and race with
vio->u.write.vui_written += tot_bytes;
}
- cl_env_put(env, &refcheck);
return tot_bytes ? : result;
}
#else /* !HAVE_DIRECTIO_ITER && !HAVE_IOV_ITER_RW */
ll_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov,
loff_t file_offset, unsigned long nr_segs)
{
- struct lu_env *env;
+ struct ll_cl_context *lcc;
+ const struct lu_env *env;
struct cl_io *io;
struct file *file = iocb->ki_filp;
struct inode *inode = file->f_mapping->host;
ssize_t tot_bytes = 0, result = 0;
unsigned long seg = 0;
size_t size = MAX_DIO_SIZE;
- __u16 refcheck;
ENTRY;
/* FIXME: io smaller than PAGE_SIZE is broken on ia64 ??? */
RETURN(-EINVAL);
}
- env = cl_env_get(&refcheck);
- LASSERT(!IS_ERR(env));
- io = vvp_env_io(env)->vui_cl.cis_io;
- LASSERT(io != NULL);
+ lcc = ll_cl_find(file);
+ if (lcc == NULL)
+ RETURN(-EIO);
+
+ env = lcc->lcc_env;
+ LASSERT(!IS_ERR(env));
+ io = lcc->lcc_io;
+ LASSERT(io != NULL);
for (seg = 0; seg < nr_segs; seg++) {
size_t iov_left = iov[seg].iov_len;
vio->u.write.vui_written += tot_bytes;
}
- cl_env_put(env, &refcheck);
RETURN(tot_bytes ? tot_bytes : result);
}
#endif /* HAVE_DIRECTIO_ITER || HAVE_IOV_ITER_RW */