mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
synced 2026-04-17 22:23:45 -04:00
Merge tag 'iomap-6.3-merge-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
Pull iomap updates from Darrick Wong:
"This is mostly rearranging things to make life easier for gfs2,
nothing all that mindblowing for this release.
- Change when the iomap page_done function is called so that we still
have a locked folio in the success case. This fixes a writeback
race in gfs2
- Change when the iomap page_prepare function is called so that gfs2
can recover from OOM scenarios more gracefully
- Rename the iomap page_ops to folio_ops, since they operate on
folios now"
* tag 'iomap-6.3-merge-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux:
iomap: Rename page_ops to folio_ops
iomap: Rename page_prepare handler to get_folio
iomap: Add __iomap_get_folio helper
iomap/gfs2: Get page in page_prepare handler
iomap: Add iomap_get_folio helper
iomap: Rename page_done handler to put_folio
iomap/gfs2: Unlock and put folio in page_done handler
iomap: Add __iomap_put_folio helper
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
struct address_space;
|
||||
struct fiemap_extent_info;
|
||||
struct inode;
|
||||
struct iomap_iter;
|
||||
struct iomap_dio;
|
||||
struct iomap_writepage_ctx;
|
||||
struct iov_iter;
|
||||
@@ -84,7 +85,7 @@ struct vm_fault;
|
||||
*/
|
||||
#define IOMAP_NULL_ADDR -1ULL /* addr is not valid */
|
||||
|
||||
struct iomap_page_ops;
|
||||
struct iomap_folio_ops;
|
||||
|
||||
struct iomap {
|
||||
u64 addr; /* disk offset of mapping, bytes */
|
||||
@@ -96,7 +97,7 @@ struct iomap {
|
||||
struct dax_device *dax_dev; /* dax_dev for dax operations */
|
||||
void *inline_data;
|
||||
void *private; /* filesystem private */
|
||||
const struct iomap_page_ops *page_ops;
|
||||
const struct iomap_folio_ops *folio_ops;
|
||||
u64 validity_cookie; /* used with .iomap_valid() */
|
||||
};
|
||||
|
||||
@@ -124,19 +125,20 @@ static inline bool iomap_inline_data_valid(const struct iomap *iomap)
|
||||
}
|
||||
|
||||
/*
|
||||
* When a filesystem sets page_ops in an iomap mapping it returns, page_prepare
|
||||
* and page_done will be called for each page written to. This only applies to
|
||||
* buffered writes as unbuffered writes will not typically have pages
|
||||
* When a filesystem sets folio_ops in an iomap mapping it returns, get_folio
|
||||
* and put_folio will be called for each folio written to. This only applies
|
||||
* to buffered writes as unbuffered writes will not typically have folios
|
||||
* associated with them.
|
||||
*
|
||||
* When page_prepare succeeds, page_done will always be called to do any
|
||||
* cleanup work necessary. In that page_done call, @page will be NULL if the
|
||||
* associated page could not be obtained.
|
||||
* When get_folio succeeds, put_folio will always be called to do any
|
||||
* cleanup work necessary. put_folio is responsible for unlocking and putting
|
||||
* @folio.
|
||||
*/
|
||||
struct iomap_page_ops {
|
||||
int (*page_prepare)(struct inode *inode, loff_t pos, unsigned len);
|
||||
void (*page_done)(struct inode *inode, loff_t pos, unsigned copied,
|
||||
struct page *page);
|
||||
struct iomap_folio_ops {
|
||||
struct folio *(*get_folio)(struct iomap_iter *iter, loff_t pos,
|
||||
unsigned len);
|
||||
void (*put_folio)(struct inode *inode, loff_t pos, unsigned copied,
|
||||
struct folio *folio);
|
||||
|
||||
/*
|
||||
* Check that the cached iomap still maps correctly to the filesystem's
|
||||
@@ -259,6 +261,7 @@ int iomap_file_buffered_write_punch_delalloc(struct inode *inode,
|
||||
int iomap_read_folio(struct folio *folio, const struct iomap_ops *ops);
|
||||
void iomap_readahead(struct readahead_control *, const struct iomap_ops *ops);
|
||||
bool iomap_is_partially_uptodate(struct folio *, size_t from, size_t count);
|
||||
struct folio *iomap_get_folio(struct iomap_iter *iter, loff_t pos);
|
||||
bool iomap_release_folio(struct folio *folio, gfp_t gfp_flags);
|
||||
void iomap_invalidate_folio(struct folio *folio, size_t offset, size_t len);
|
||||
int iomap_file_unshare(struct inode *inode, loff_t pos, loff_t len,
|
||||
|
||||
Reference in New Issue
Block a user