diff options
| author | Tony Lindgren <tony@atomide.com> | 2010-08-02 14:23:38 +0300 |
|---|---|---|
| committer | Tony Lindgren <tony@atomide.com> | 2010-08-02 14:23:38 +0300 |
| commit | 055a1b8c9927bc587f293020a54c6cd8e24dfac0 (patch) | |
| tree | db7c8d00931180c4896c9e00d2cb506939592cda /fs/ocfs2/refcounttree.c | |
| parent | 8a6f7e14fc3b3ea911838c3f4ce137cb8a3d134a (diff) | |
| parent | f535daed925c2d3c1db06b06a63c4955f2c51988 (diff) | |
Merge branch 'devel-misc' into omap-for-linus
Diffstat (limited to 'fs/ocfs2/refcounttree.c')
| -rw-r--r-- | fs/ocfs2/refcounttree.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c index 4793f36f651..3ac5aa733e9 100644 --- a/fs/ocfs2/refcounttree.c +++ b/fs/ocfs2/refcounttree.c @@ -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; @@ -4166,6 +4172,12 @@ static int __ocfs2_reflink(struct dentry *old_dentry, struct inode *inode = old_dentry->d_inode; struct buffer_head *new_bh = NULL; + if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SYSTEM_FILE) { + ret = -EINVAL; + mlog_errno(ret); + goto out; + } + ret = filemap_fdatawrite(inode->i_mapping); if (ret) { mlog_errno(ret); |
