On Sat, Oct 05, 2024 at 03:20:06AM +0100, Matthew Wilcox wrote: > On Fri, Oct 04, 2024 at 04:04:29PM -0400, Goldwyn Rodrigues wrote: > > iomap_read_folio_ops provide additional functions to allocate or submit > > the bio. Filesystems such as btrfs have additional operations with bios > > such as verifying data checksums. Creating a bio submission hook allows > > the filesystem to process and verify the bio. > > But surely you're going to need something similar for writeback too? > So why go to all this trouble to add a new kind of ops instead of making > it part of iomap_ops or iomap_folio_ops? iomap_folio_ops, and maybe it's time to rename it iomap_pagecache_ops. I almost wonder if we should have this instead: struct iomap_pagecache_ops { struct iomap_ops ops; /* folio management */ 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); /* mapping revalidation */ bool (*iomap_valid)(struct inode *inode, const struct iomap *iomap); /* writeback */ int (*map_blocks)(struct iomap_writepage_ctx *wpc, struct inode *inode, loff_t offset, unsigned len); int (*prepare_ioend)(struct iomap_ioend *ioend, int status); void (*discard_folio)(struct folio *folio, loff_t pos); }; and then we change the buffered-io.c functions to take a (const struct iomap_pagecache_ops*) instead of iomap_ops+iomap_folio_ops, or iomap_ops+iomap_writeback_ops. Same embedding suggestion for iomap_dio_ops. --D