ocfs2: Don't duplicate pages past i_size during CoW.
authorTao Ma <tao.ma@oracle.com>
Wed, 14 Jul 2010 03:19:32 +0000 (11:19 +0800)
committerJoel Becker <joel.becker@oracle.com>
Thu, 15 Jul 2010 17:54:28 +0000 (10:54 -0700)
During CoW, the pages after i_size don't contain valid data, so there's
no need to read and duplicate them.

Signed-off-by: Tao Ma <tao.ma@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
fs/ocfs2/refcounttree.c

index 32949df10694c30a6c5340d3923d5218480cd9c5..3ac5aa733e9c8018090bc2493d819937593760a0 100644 (file)
@@ -2931,6 +2931,12 @@ static int ocfs2_duplicate_clusters_by_page(handle_t *handle,
 
        offset = ((loff_t)cpos) << OCFS2_SB(sb)->s_clustersize_bits;
        end = offset + (new_len << OCFS2_SB(sb)->s_clustersize_bits);
+       /*
+        * We only duplicate pages until we reach the page contains i_size - 1.
+        * So trim 'end' to i_size.
+        */
+       if (end > i_size_read(context->inode))
+               end = i_size_read(context->inode);
 
        while (offset < end) {
                page_index = offset >> PAGE_CACHE_SHIFT;