From: Matthew Wilcox <willy@infradead.org>
To: linux-fsdevel@vger.kernel.org
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
hch@lst.de, linux-xfs@vger.kernel.org, linux-mm@kvack.org
Subject: [PATCH v2 4/5] xfs: Support large pages
Date: Tue, 20 Aug 2019 17:30:38 -0700 [thread overview]
Message-ID: <20190821003039.12555-5-willy@infradead.org> (raw)
In-Reply-To: <20190821003039.12555-1-willy@infradead.org>
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Mostly this is just checking the page size of each page instead of
assuming PAGE_SIZE. Clean up the logic in writepage a little.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
fs/xfs/xfs_aops.c | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
index 102cfd8a97d6..1a26e9ca626b 100644
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -765,7 +765,7 @@ xfs_add_to_ioend(
struct xfs_mount *mp = ip->i_mount;
struct block_device *bdev = xfs_find_bdev_for_inode(inode);
unsigned len = i_blocksize(inode);
- unsigned poff = offset & (PAGE_SIZE - 1);
+ unsigned poff = offset & (page_size(page) - 1);
bool merged, same_page = false;
sector_t sector;
@@ -843,7 +843,7 @@ xfs_aops_discard_page(
if (error && !XFS_FORCED_SHUTDOWN(mp))
xfs_alert(mp, "page discard unable to remove delalloc mapping.");
out_invalidate:
- xfs_vm_invalidatepage(page, 0, PAGE_SIZE);
+ xfs_vm_invalidatepage(page, 0, page_size(page));
}
/*
@@ -984,8 +984,7 @@ xfs_do_writepage(
struct xfs_writepage_ctx *wpc = data;
struct inode *inode = page->mapping->host;
loff_t offset;
- uint64_t end_offset;
- pgoff_t end_index;
+ uint64_t end_offset;
trace_xfs_writepage(inode, page, 0, 0);
@@ -1024,10 +1023,9 @@ xfs_do_writepage(
* ---------------------------------^------------------|
*/
offset = i_size_read(inode);
- end_index = offset >> PAGE_SHIFT;
- if (page->index < end_index)
- end_offset = (xfs_off_t)(page->index + 1) << PAGE_SHIFT;
- else {
+ end_offset = file_offset_of_next_page(page);
+
+ if (end_offset > offset) {
/*
* Check whether the page to write out is beyond or straddles
* i_size or not.
@@ -1039,7 +1037,8 @@ xfs_do_writepage(
* | | Straddles |
* ---------------------------------^-----------|--------|
*/
- unsigned offset_into_page = offset & (PAGE_SIZE - 1);
+ unsigned offset_into_page = offset_in_this_page(page, offset);
+ pgoff_t end_index = offset >> PAGE_SHIFT;
/*
* Skip the page if it is fully outside i_size, e.g. due to a
@@ -1070,7 +1069,7 @@ xfs_do_writepage(
* memory is zeroed when mapped, and writes to that region are
* not written out to the file."
*/
- zero_user_segment(page, offset_into_page, PAGE_SIZE);
+ zero_user_segment(page, offset_into_page, page_size(page));
/* Adjust the end_offset to the end of file */
end_offset = offset;
--
2.23.0.rc1
next prev parent reply other threads:[~2019-08-21 0:30 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-21 0:30 [PATCH v2 0/5] iomap & xfs support for large pages Matthew Wilcox
2019-08-21 0:30 ` [PATCH v2 1/5] fs: Introduce i_blocks_per_page Matthew Wilcox
2019-08-23 12:26 ` kbuild test robot
2019-09-18 21:14 ` Darrick J. Wong
2019-09-18 23:48 ` Matthew Wilcox
2019-08-21 0:30 ` [PATCH v2 2/5] mm: Add file_offset_of_ helpers Matthew Wilcox
2019-08-23 12:49 ` kbuild test robot
2019-08-24 11:48 ` kbuild test robot
2019-08-24 15:28 ` Matthew Wilcox
2019-09-18 21:17 ` Darrick J. Wong
2019-09-18 23:49 ` Matthew Wilcox
2019-09-19 0:04 ` Darrick J. Wong
2019-08-21 0:30 ` [PATCH v2 3/5] iomap: Support large pages Matthew Wilcox
2019-08-23 12:48 ` kbuild test robot
2019-09-18 21:29 ` Darrick J. Wong
2019-08-21 0:30 ` Matthew Wilcox [this message]
2019-09-18 21:31 ` [PATCH v2 4/5] xfs: " Darrick J. Wong
2019-08-21 0:30 ` [PATCH v2 5/5] xfs: Pass a page to xfs_finish_page_writeback Matthew Wilcox
2019-09-18 21:32 ` Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190821003039.12555-5-willy@infradead.org \
--to=willy@infradead.org \
--cc=hch@lst.de \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.