Whamcloud - gitweb
Branch: HEAD
authorwangdi <wangdi>
Thu, 2 Apr 2009 17:11:27 +0000 (17:11 +0000)
committerwangdi <wangdi>
Thu, 2 Apr 2009 17:11:27 +0000 (17:11 +0000)
b=17711
reset crw_pos for appending write in the write page loop.
i=Jay,Shadow

lustre/llite/rw.c

index d3f59a6..fce46bd 100644 (file)
@@ -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;