Merge tag 'vfs-6.12.folio' of gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs
Pull vfs folio updates from Christian Brauner: "This contains work to port write_begin and write_end to rely on folios for various filesystems. This converts ocfs2, vboxfs, orangefs, jffs2, hostfs, fuse, f2fs, ecryptfs, ntfs3, nilfs2, reiserfs, minixfs, qnx6, sysv, ufs, and squashfs. After this series lands a bunch of the filesystems in this list do not mention struct page anymore" * tag 'vfs-6.12.folio' of gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs: (61 commits) Squashfs: Ensure all readahead pages have been used Squashfs: Rewrite and update squashfs_readahead_fragment() to not use page->index Squashfs: Update squashfs_readpage_block() to not use page->index Squashfs: Update squashfs_readahead() to not use page->index Squashfs: Update page_actor to not use page->index jffs2: Use a folio in jffs2_garbage_collect_dnode() jffs2: Convert jffs2_do_readpage_nolock to take a folio buffer: Convert __block_write_begin() to take a folio ocfs2: Convert ocfs2_write_zero_page to use a folio fs: Convert aops->write_begin to take a folio fs: Convert aops->write_end to take a folio vboxsf: Use a folio in vboxsf_write_end() orangefs: Convert orangefs_write_begin() to use a folio orangefs: Convert orangefs_write_end() to use a folio jffs2: Convert jffs2_write_begin() to use a folio jffs2: Convert jffs2_write_end() to use a folio hostfs: Convert hostfs_write_end() to use a folio fuse: Convert fuse_write_begin() to use a folio fuse: Convert fuse_write_end() to use a folio f2fs: Convert f2fs_write_begin() to use a folio ...
This commit is contained in:
@@ -251,10 +251,10 @@ prototypes::
|
||||
void (*readahead)(struct readahead_control *);
|
||||
int (*write_begin)(struct file *, struct address_space *mapping,
|
||||
loff_t pos, unsigned len,
|
||||
struct page **pagep, void **fsdata);
|
||||
struct folio **foliop, void **fsdata);
|
||||
int (*write_end)(struct file *, struct address_space *mapping,
|
||||
loff_t pos, unsigned len, unsigned copied,
|
||||
struct page *page, void *fsdata);
|
||||
struct folio *folio, void *fsdata);
|
||||
sector_t (*bmap)(struct address_space *, sector_t);
|
||||
void (*invalidate_folio) (struct folio *, size_t start, size_t len);
|
||||
bool (*release_folio)(struct folio *, gfp_t);
|
||||
@@ -280,7 +280,7 @@ read_folio: yes, unlocks shared
|
||||
writepages:
|
||||
dirty_folio: maybe
|
||||
readahead: yes, unlocks shared
|
||||
write_begin: locks the page exclusive
|
||||
write_begin: locks the folio exclusive
|
||||
write_end: yes, unlocks exclusive
|
||||
bmap:
|
||||
invalidate_folio: yes exclusive
|
||||
|
||||
@@ -810,7 +810,7 @@ cache in your filesystem. The following members are defined:
|
||||
struct page **pagep, void **fsdata);
|
||||
int (*write_end)(struct file *, struct address_space *mapping,
|
||||
loff_t pos, unsigned len, unsigned copied,
|
||||
struct page *page, void *fsdata);
|
||||
struct folio *folio, void *fsdata);
|
||||
sector_t (*bmap)(struct address_space *, sector_t);
|
||||
void (*invalidate_folio) (struct folio *, size_t start, size_t len);
|
||||
bool (*release_folio)(struct folio *, gfp_t);
|
||||
@@ -926,12 +926,12 @@ cache in your filesystem. The following members are defined:
|
||||
(if they haven't been read already) so that the updated blocks
|
||||
can be written out properly.
|
||||
|
||||
The filesystem must return the locked pagecache page for the
|
||||
specified offset, in ``*pagep``, for the caller to write into.
|
||||
The filesystem must return the locked pagecache folio for the
|
||||
specified offset, in ``*foliop``, for the caller to write into.
|
||||
|
||||
It must be able to cope with short writes (where the length
|
||||
passed to write_begin is greater than the number of bytes copied
|
||||
into the page).
|
||||
into the folio).
|
||||
|
||||
A void * may be returned in fsdata, which then gets passed into
|
||||
write_end.
|
||||
@@ -944,8 +944,8 @@ cache in your filesystem. The following members are defined:
|
||||
called. len is the original len passed to write_begin, and
|
||||
copied is the amount that was able to be copied.
|
||||
|
||||
The filesystem must take care of unlocking the page and
|
||||
releasing it refcount, and updating i_size.
|
||||
The filesystem must take care of unlocking the folio,
|
||||
decrementing its refcount, and updating i_size.
|
||||
|
||||
Returns < 0 on failure, otherwise the number of bytes (<=
|
||||
'copied') that were able to be copied into pagecache.
|
||||
|
||||
Reference in New Issue
Block a user