From: wangdi Date: Thu, 2 Apr 2009 17:11:27 +0000 (+0000) Subject: Branch: HEAD X-Git-Tag: v1_9_167~42 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=000210191fa9de3dda48d9fca0e902afdf398337;p=fs%2Flustre-release.git Branch: HEAD b=17711 reset crw_pos for appending write in the write page loop. i=Jay,Shadow --- 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;