VM area marked with VM_WRITE means that pages may be written, but
mmap page write may never happen.
It should delay layout write until the actual modification on the
file happen in ->page_mkwrite().
Otherwise, it will trigger panic for PCC-RO sanity-pcc test_21f().
Lustre-change: https://review.whamcloud.com/44483
Lustre-commit: TBD (from
de1fe260d8c88112b46857d69cf5fe9e5d06cfbd)
Fixes:
f2d1c4ee4 ("LU-14647 flr: mmap write/punch does not stale other mirrors")
Signed-off-by: Qian Yingjin <qian@ddn.com>
Change-Id: I1cbfef8a4ed7e2c718324fd8a21bafd6157b5f0c
Reviewed-on: https://review.whamcloud.com/44452
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Patrick Farrell <pfarrell@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
return io->ci_type == CIT_FAULT && io->u.ci_fault.ft_mkwrite;
}
-static inline int cl_io_is_fault_writable(const struct cl_io *io)
-{
- return io->ci_type == CIT_FAULT && io->u.ci_fault.ft_writable;
-}
-
/**
* True, iff \a io is a truncate(2).
*/
else if (vma->vm_flags & VM_RAND_READ)
io->ci_rand_read = 1;
- if (vma->vm_flags & VM_WRITE)
- fio->ft_writable = 1;
-
rc = cl_io_init(env, io, CIT_FAULT, io->ci_obj);
if (rc == 0) {
struct vvp_io *vio = vvp_env_io(env);
io->ci_need_write_intent = 0;
LASSERT(io->ci_type == CIT_WRITE || cl_io_is_fallocate(io) ||
- cl_io_is_trunc(io) || cl_io_is_mkwrite(io) ||
- cl_io_is_fault_writable(io));
+ cl_io_is_trunc(io) || cl_io_is_mkwrite(io));
CDEBUG(D_VFSTRACE, DFID" write layout, type %u "DEXT"\n",
PFID(lu_object_fid(&obj->co_lu)), io->ci_type,
io->ci_need_write_intent = 0;
if (!(io->ci_type == CIT_WRITE || cl_io_is_mkwrite(io) ||
- cl_io_is_fallocate(io) || cl_io_is_trunc(io) ||
- cl_io_is_fault_writable(io)))
+ cl_io_is_fallocate(io) || cl_io_is_trunc(io)))
RETURN(0);
/*
/* check if it needs to instantiate layout */
if (!(io->ci_type == CIT_WRITE || cl_io_is_mkwrite(io) ||
cl_io_is_fallocate(io) ||
- (cl_io_is_trunc(io) && io->u.ci_setattr.sa_attr.lvb_size > 0)) ||
- cl_io_is_fault_writable(io))
+ (cl_io_is_trunc(io) && io->u.ci_setattr.sa_attr.lvb_size > 0)))
GOTO(out, result = 0);
/*