Commit 3a90983d authored by Yan, Zheng's avatar Yan, Zheng Committed by Chris Mason

Btrfs: Fix page count calculation

take offset of start position into account when calculating page count.
Signed-off-by: default avatarYan, Zheng <zheng.z.yan@intel.com>
Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 8e4eef7a
...@@ -991,8 +991,8 @@ static ssize_t btrfs_file_aio_write(struct kiocb *iocb, ...@@ -991,8 +991,8 @@ static ssize_t btrfs_file_aio_write(struct kiocb *iocb,
size_t write_bytes = min(iov_iter_count(&i), size_t write_bytes = min(iov_iter_count(&i),
nrptrs * (size_t)PAGE_CACHE_SIZE - nrptrs * (size_t)PAGE_CACHE_SIZE -
offset); offset);
size_t num_pages = (write_bytes + PAGE_CACHE_SIZE - 1) >> size_t num_pages = (write_bytes + offset +
PAGE_CACHE_SHIFT; PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
WARN_ON(num_pages > nrptrs); WARN_ON(num_pages > nrptrs);
memset(pages, 0, sizeof(struct page *) * nrptrs); memset(pages, 0, sizeof(struct page *) * nrptrs);
...@@ -1022,7 +1022,7 @@ static ssize_t btrfs_file_aio_write(struct kiocb *iocb, ...@@ -1022,7 +1022,7 @@ static ssize_t btrfs_file_aio_write(struct kiocb *iocb,
copied = btrfs_copy_from_user(pos, num_pages, copied = btrfs_copy_from_user(pos, num_pages,
write_bytes, pages, &i); write_bytes, pages, &i);
dirty_pages = (copied + PAGE_CACHE_SIZE - 1) >> dirty_pages = (copied + offset + PAGE_CACHE_SIZE - 1) >>
PAGE_CACHE_SHIFT; PAGE_CACHE_SHIFT;
if (num_pages > dirty_pages) { if (num_pages > dirty_pages) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment