Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f63afdb2 authored by Tao Ma's avatar Tao Ma
Browse files

ocfs2: make __ocfs2_page_mkwrite handle file end properly.



__ocfs2_page_mkwrite now is broken in handling file end.
1. the last page should be the page contains i_size - 1.
2. the len in the last page is also calculated wrong.
So change them accordingly.

Acked-by: default avatarMark Fasheh <mfasheh@suse.com>
Signed-off-by: default avatarTao Ma <tao.ma@oracle.com>
parent f5ce5a08
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -74,9 +74,11 @@ static int __ocfs2_page_mkwrite(struct inode *inode, struct buffer_head *di_bh,
	/*
	 * Another node might have truncated while we were waiting on
	 * cluster locks.
	 * We don't check size == 0 before the shift. This is borrowed
	 * from do_generic_file_read.
	 */
	last_index = size >> PAGE_CACHE_SHIFT;
	if (page->index > last_index) {
	last_index = (size - 1) >> PAGE_CACHE_SHIFT;
	if (unlikely(!size || page->index > last_index)) {
		ret = -EINVAL;
		goto out;
	}
@@ -107,7 +109,7 @@ static int __ocfs2_page_mkwrite(struct inode *inode, struct buffer_head *di_bh,
	 * because the "write" would invalidate their data.
	 */
	if (page->index == last_index)
		len = size & ~PAGE_CACHE_MASK;
		len = ((size - 1) & ~PAGE_CACHE_MASK) + 1;

	ret = ocfs2_write_begin_nolock(mapping, pos, len, 0, &locked_page,
				       &fsdata, di_bh, page);