}
/**
- * True, if \a io is a normal io, False for splice_{read,write}
- */
-static int cl_is_normalio(const struct lu_env *env, const struct cl_io *io)
-{
- struct vvp_io *vio = vvp_env_io(env);
-
- LASSERT(io->ci_type == CIT_READ || io->ci_type == CIT_WRITE);
-
- return vio->vui_io_subtype == IO_NORMAL;
-}
-
-/**
* For swapping layout. The file's layout may have changed.
* To avoid populating pages to a wrong stripe, we have to verify the
* correctness of layout. It works because swapping layout processes
LASSERT(io->ci_type == CIT_READ || io->ci_type == CIT_WRITE);
- if (!cl_is_normalio(env, io))
- RETURN(0);
-
/* nfs or loop back device write */
if (vio->vui_iter == NULL)
RETURN(0);
const struct cl_io_slice *ios,
size_t nob)
{
- struct vvp_io *vio = cl2vvp_io(env, ios);
- struct cl_io *io = ios->cis_io;
struct cl_object *obj = ios->cis_io->ci_obj;
+ struct vvp_io *vio = cl2vvp_io(env, ios);
CLOBINVRNT(env, obj, vvp_object_invariant(obj));
- if (!cl_is_normalio(env, io))
- return;
-
/*
* Since 3.16(26978b8b4) vfs revert iov iter to
* original position even io succeed, so instead
{
size_t size = io->u.ci_rw.crw_count;
- if (!cl_is_normalio(env, io) || vio->vui_iter == NULL)
+ if (!vio->vui_iter)
return;
iov_iter_truncate(vio->vui_iter, size);
file_dentry(file)->d_name.name,
pos, pos + cnt);
- if (vio->vui_io_subtype == IO_NORMAL)
- trunc_sem_down_read(&lli->lli_trunc_sem);
+ trunc_sem_down_read(&lli->lli_trunc_sem);
if (io->ci_async_readahead) {
file_accessed(file);
/* BUG: 5972 */
file_accessed(file);
- switch (vio->vui_io_subtype) {
- case IO_NORMAL:
- LASSERT(vio->vui_iocb->ki_pos == pos);
- iter = *vio->vui_iter;
- result = generic_file_read_iter(vio->vui_iocb, &iter);
- break;
- case IO_SPLICE:
- result = generic_file_splice_read(file, &pos,
- vio->u.splice.vui_pipe, cnt,
- vio->u.splice.vui_flags);
- /* LU-1109: do splice read stripe by stripe otherwise if it
- * may make nfsd stuck if this read occupied all internal pipe
- * buffers. */
- io->ci_continue = 0;
- break;
- default:
- CERROR("Wrong IO type %u\n", vio->vui_io_subtype);
- LBUG();
- }
- GOTO(out, result);
-
+ LASSERT(vio->vui_iocb->ki_pos == pos);
+ iter = *vio->vui_iter;
+ result = generic_file_read_iter(vio->vui_iocb, &iter);
out:
if (result >= 0) {
if (result < cnt)
result = 0;
} else if (result == -EIOCBQUEUED) {
io->ci_nob += vio->u.readwrite.vui_read;
- if (vio->vui_iocb)
- vio->vui_iocb->ki_pos = pos +
- vio->u.readwrite.vui_read;
+ vio->vui_iocb->ki_pos = pos + vio->u.readwrite.vui_read;
}
return result;
ENTRY;
- if (vio->vui_io_subtype == IO_NORMAL)
- trunc_sem_down_read(&lli->lli_trunc_sem);
+ trunc_sem_down_read(&lli->lli_trunc_sem);
if (!can_populate_pages(env, io, inode))
RETURN(0);
static void vvp_io_rw_end(const struct lu_env *env,
const struct cl_io_slice *ios)
{
- struct vvp_io *vio = cl2vvp_io(env, ios);
struct inode *inode = vvp_object_inode(ios->cis_obj);
struct ll_inode_info *lli = ll_i2info(inode);
- if (vio->vui_io_subtype == IO_NORMAL)
- trunc_sem_up_read(&lli->lli_trunc_sem);
+ trunc_sem_up_read(&lli->lli_trunc_sem);
}
static int vvp_io_kernel_fault(struct vvp_fault_io *cfio)