#
6e478521 |
| 30-Jul-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap,xfs: Convert ->discard_page to ->discard_folio
XFS has the only implementation of ->discard_page today, so convert it to use folios in the same patch as converting the API.
Signed-off-by: Mat
iomap,xfs: Convert ->discard_page to ->discard_folio
XFS has the only implementation of ->discard_page today, so convert it to use folios in the same patch as converting the API.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org>
show more ...
|
#
9c4ce08d |
| 02-May-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap: Convert iomap_write_end_inline to take a folio
This conversion is only safe because iomap only supports writes to inline data which starts at the beginning of the file.
Signed-off-by: Matthe
iomap: Convert iomap_write_end_inline to take a folio
This conversion is only safe because iomap only supports writes to inline data which starts at the beginning of the file.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
show more ...
|
#
bc6123a8 |
| 02-May-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap: Convert iomap_write_begin() and iomap_write_end() to folios
These functions still only work in PAGE_SIZE chunks, but there are fewer conversions from tail to head pages as a result of this pa
iomap: Convert iomap_write_begin() and iomap_write_end() to folios
These functions still only work in PAGE_SIZE chunks, but there are fewer conversions from tail to head pages as a result of this patch.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org>
show more ...
|
#
a25def1f |
| 05-Nov-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap: Convert __iomap_zero_iter to use a folio
The zero iterator can work in folio-sized chunks instead of page-sized chunks. This will save a lot of page cache lookups if the file is cached in la
iomap: Convert __iomap_zero_iter to use a folio
The zero iterator can work in folio-sized chunks instead of page-sized chunks. This will save a lot of page cache lookups if the file is cached in large folios.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org>
show more ...
|
#
d454ab82 |
| 09-Dec-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap: Allow iomap_write_begin() to be called with the full length
In the future, we want write_begin to know the entire length of the write so that it can choose to allocate large folios. Pass the
iomap: Allow iomap_write_begin() to be called with the full length
In the future, we want write_begin to know the entire length of the write so that it can choose to allocate large folios. Pass the full length in from __iomap_zero_iter() and limit it where necessary.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Darrick J. Wong <djwong@kernel.org>
show more ...
|
#
ea0f843a |
| 29-Apr-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap: Convert iomap_page_mkwrite to use a folio
If we write to any page in a folio, we have to mark the entire folio as dirty, and potentially COW the entire folio, because it'll all get written ba
iomap: Convert iomap_page_mkwrite to use a folio
If we write to any page in a folio, we have to mark the entire folio as dirty, and potentially COW the entire folio, because it'll all get written back as one unit.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
show more ...
|
#
3aa9c659 |
| 28-Apr-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap: Convert readahead and readpage to use a folio
Handle folios of arbitrary size instead of working in PAGE_SIZE units. readahead_folio() decreases the page refcount for you, so this is not quit
iomap: Convert readahead and readpage to use a folio
Handle folios of arbitrary size instead of working in PAGE_SIZE units. readahead_folio() decreases the page refcount for you, so this is not quite a mechanical change.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
show more ...
|
#
874628a2 |
| 24-Jul-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap: Convert iomap_read_inline_data to take a folio
We still only support up to a single page of inline data (at least, per call to iomap_read_inline_data()), but it can now be written into the mi
iomap: Convert iomap_read_inline_data to take a folio
We still only support up to a single page of inline data (at least, per call to iomap_read_inline_data()), but it can now be written into the middle of a folio in case we decide to allocate a 16KiB page for a file that's 8.1KiB in size.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
show more ...
|
#
431c0566 |
| 28-Apr-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap: Use folio offsets instead of page offsets
Pass a folio around instead of the page, and make sure the offset is relative to the start of the folio instead of the start of a page. Also use size
iomap: Use folio offsets instead of page offsets
Pass a folio around instead of the page, and make sure the offset is relative to the start of the folio instead of the start of a page. Also use size_t for offset & length to make it clear that these are byte counts, and to support >2GB folios in the future.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
show more ...
|
#
8ffd74e9 |
| 01-Jan-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap: Convert bio completions to use folios
Use bio_for_each_folio() to iterate over each folio in the bio instead of iterating over each page.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infrad
iomap: Convert bio completions to use folios
Use bio_for_each_folio() to iterate over each folio in the bio instead of iterating over each page.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
show more ...
|
#
cd1e5afe |
| 28-Apr-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap: Pass the iomap_page into iomap_set_range_uptodate
All but one caller already has the iomap_page, so we can avoid getting it again.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org
iomap: Pass the iomap_page into iomap_set_range_uptodate
All but one caller already has the iomap_page, so we can avoid getting it again.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
show more ...
|
#
8306a5f5 |
| 28-Apr-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap: Add iomap_invalidate_folio
Keep iomap_invalidatepage around as a wrapper for use in address_space operations.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Christ
iomap: Add iomap_invalidate_folio
Keep iomap_invalidatepage around as a wrapper for use in address_space operations.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org>
show more ...
|
#
39f16c83 |
| 28-Apr-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap: Convert iomap_releasepage to use a folio
This is an address_space operation, so its argument must remain as a struct page, but we can use a folio internally.
Signed-off-by: Matthew Wilcox (O
iomap: Convert iomap_releasepage to use a folio
This is an address_space operation, so its argument must remain as a struct page, but we can use a folio internally.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org>
show more ...
|
#
c46e8324 |
| 28-Apr-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap: Convert iomap_page_release to take a folio
iomap_page_release() was also assuming that it was being passed a head page.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-
iomap: Convert iomap_page_release to take a folio
iomap_page_release() was also assuming that it was being passed a head page.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
show more ...
|
#
435d44b3 |
| 28-Apr-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap: Convert iomap_page_create to take a folio
This function already assumed it was being passed a head page, so just formalise that.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
iomap: Convert iomap_page_create to take a folio
This function already assumed it was being passed a head page, so just formalise that.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
show more ...
|
#
95c4cd05 |
| 28-Apr-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
iomap: Convert to_iomap_page to take a folio
The big comment about only using a head page can go away now that it takes a folio argument.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org
iomap: Convert to_iomap_page to take a folio
The big comment about only using a head page can go away now that it takes a folio argument.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
show more ...
|
#
d1bd0b4e |
| 03-Nov-2021 |
Matthew Wilcox (Oracle) <willy@infradead.org> |
fs/buffer: Convert __block_write_begin_int() to take a folio
There are no plans to convert buffer_head infrastructure to use large folios, but __block_write_begin_int() is called from iomap, and it'
fs/buffer: Convert __block_write_begin_int() to take a folio
There are no plans to convert buffer_head infrastructure to use large folios, but __block_write_begin_int() is called from iomap, and it's more convenient and less error-prone if we pass in a folio from iomap. It also has a nice saving of almost 200 bytes of code from removing repeated calls to compound_head().
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org>
show more ...
|
#
de291b59 |
| 08-Dec-2021 |
Christoph Hellwig <hch@lst.de> |
iomap: turn the byte variable in iomap_zero_iter into a ssize_t
@bytes also holds the return value from iomap_write_end, which can contain a negative error value. As @bytes is always less than the
iomap: turn the byte variable in iomap_zero_iter into a ssize_t
@bytes also holds the return value from iomap_write_end, which can contain a negative error value. As @bytes is always less than the page size even the signed type can hold the entire possible range.
Fixes: c6f40468657d ("fsdax: decouple zeroing from the iomap buffered I/O code") Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20211208091203.2927754-1-hch@lst.de Signed-off-by: Dan Williams <dan.j.williams@intel.com>
show more ...
|
#
c6f40468 |
| 29-Nov-2021 |
Christoph Hellwig <hch@lst.de> |
fsdax: decouple zeroing from the iomap buffered I/O code
Unshare the DAX and iomap buffered I/O page zeroing code. This code previously did a IS_DAX check deep inside the iomap code, which in fact
fsdax: decouple zeroing from the iomap buffered I/O code
Unshare the DAX and iomap buffered I/O page zeroing code. This code previously did a IS_DAX check deep inside the iomap code, which in fact was the only DAX check in the code. Instead move these checks into the callers. Most callers already have DAX special casing anyway and XFS will need it for reflink support as well.
Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dan Williams <dan.j.williams@intel.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Link: https://lore.kernel.org/r/20211129102203.2243509-19-hch@lst.de Signed-off-by: Dan Williams <dan.j.williams@intel.com>
show more ...
|
#
5ad448ce |
| 24-Nov-2021 |
Andreas Gruenbacher <agruenba@redhat.com> |
iomap: iomap_read_inline_data cleanup
Change iomap_read_inline_data to return 0 or an error code; this simplifies the callers. Add a description.
Signed-off-by: Andreas Gruenbacher <agruenba@redha
iomap: iomap_read_inline_data cleanup
Change iomap_read_inline_data to return 0 or an error code; this simplifies the callers. Add a description.
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> [djwong: document the return value of iomap_read_inline_data explicitly] Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
show more ...
|
#
d8af404f |
| 18-Nov-2021 |
Andreas Gruenbacher <agruenba@redhat.com> |
iomap: Fix inline extent handling in iomap_readpage
Before commit 740499c78408 ("iomap: fix the iomap_readpage_actor return value for inline data"), when hitting an IOMAP_INLINE extent, iomap_readpa
iomap: Fix inline extent handling in iomap_readpage
Before commit 740499c78408 ("iomap: fix the iomap_readpage_actor return value for inline data"), when hitting an IOMAP_INLINE extent, iomap_readpage_actor would report having read the entire page. Since then, it only reports having read the inline data (iomap->length).
This will force iomap_readpage into another iteration, and the filesystem will report an unaligned hole after the IOMAP_INLINE extent. But iomap_readpage_actor (now iomap_readpage_iter) isn't prepared to deal with unaligned extents, it will get things wrong on filesystems with a block size smaller than the page size, and we'll eventually run into the following warning in iomap_iter_advance:
WARN_ON_ONCE(iter->processed > iomap_length(iter));
Fix that by changing iomap_readpage_iter to return 0 when hitting an inline extent; this will cause iomap_iter to stop immediately.
To fix readahead as well, change iomap_readahead_iter to pass on iomap_readpage_iter return values less than or equal to zero.
Fixes: 740499c78408 ("iomap: fix the iomap_readpage_actor return value for inline data") Cc: stable@vger.kernel.org # v5.15+ Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
show more ...
|
#
a6294593 |
| 02-Aug-2021 |
Andreas Gruenbacher <agruenba@redhat.com> |
iov_iter: Turn iov_iter_fault_in_readable into fault_in_iov_iter_readable
Turn iov_iter_fault_in_readable into a function that returns the number of bytes not faulted in, similar to copy_to_user, in
iov_iter: Turn iov_iter_fault_in_readable into fault_in_iov_iter_readable
Turn iov_iter_fault_in_readable into a function that returns the number of bytes not faulted in, similar to copy_to_user, instead of returning a non-zero value when any of the requested pages couldn't be faulted in. This supports the existing users that require all pages to be faulted in as well as new users that are happy if any pages can be faulted in.
Rename iov_iter_fault_in_readable to fault_in_iov_iter_readable to make sure this change doesn't silently break things.
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
show more ...
|
#
fad0a1ab |
| 11-Aug-2021 |
Christoph Hellwig <hch@lst.de> |
iomap: constify iomap_iter_srcmap
The srcmap returned from iomap_iter_srcmap is never modified, so mark the iomap returned from it const and constify a lot of code that never modifies the iomap.
Si
iomap: constify iomap_iter_srcmap
The srcmap returned from iomap_iter_srcmap is never modified, so mark the iomap returned from it const and constify a lot of code that never modifies the iomap.
Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
show more ...
|
#
b74b1293 |
| 11-Aug-2021 |
Christoph Hellwig <hch@lst.de> |
iomap: rework unshare flag
Instead of another internal flags namespace inside of buffered-io.c, just pass a UNSHARE hint in the main iomap flags field.
Signed-off-by: Christoph Hellwig <hch@lst.de>
iomap: rework unshare flag
Instead of another internal flags namespace inside of buffered-io.c, just pass a UNSHARE hint in the main iomap flags field.
Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
show more ...
|
#
1b5c1e36 |
| 11-Aug-2021 |
Christoph Hellwig <hch@lst.de> |
iomap: pass an iomap_iter to various buffered I/O helpers
Pass the iomap_iter structure instead of individual parameters to various internal helpers for buffered I/O.
Signed-off-by: Christoph Hellw
iomap: pass an iomap_iter to various buffered I/O helpers
Pass the iomap_iter structure instead of individual parameters to various internal helpers for buffered I/O.
Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
show more ...
|