From 000210191fa9de3dda48d9fca0e902afdf398337 Mon Sep 17 00:00:00 2001 From: wangdi Date: Thu, 2 Apr 2009 17:11:27 +0000 Subject: [PATCH] Branch: HEAD b=17711 reset crw_pos for appending write in the write page loop. i=Jay,Shadow --- lustre/llite/rw.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lustre/llite/rw.c b/lustre/llite/rw.c index d3f59a6..fce46bd 100644 --- a/lustre/llite/rw.c +++ b/lustre/llite/rw.c @@ -289,6 +289,17 @@ int ll_prepare_write(struct file *file, struct page *vmpage, unsigned from, } if (result == 0) { cl_page_assume(env, io, page); + if (cl_io_is_append(io)) { + struct cl_object *obj = io->ci_obj; + struct inode *inode = ccc_object_inode(obj); + /** + * In VFS file->page write loop, for appending, the + * write offset might be reset according to the new + * file size before holding i_mutex. So crw_pos should + * be reset here. BUG:17711. + */ + io->u.ci_wr.wr.crw_pos = i_size_read(inode); + } result = cl_io_prepare_write(env, io, page, from, to); if (result == 0) { struct vvp_io *vio; -- 1.8.3.1