Hi all, after all the talk about removing buffer_heads, here is a series that shows how to build a kernel without buffer_heads. And how unrealistic it is to remove the entirely. Most of the series refactors some common code to make implementing direct I/O easier without use of the ->direct_IO method and the helpers based around it. It then switches buffered writes (but not writeback) for block devices to use iomap unconditionally, but still using buffer_heads. The final patch then adds a CONFIG_BUFFER_HEAD selected by all file systems that need it (which is most block based file systems), makes the buffer_head support in iomap optional, and adds an alternative implementation of the block device address_operations using iomap. With this you can build a kernel with block device support, but without buffer_heads. This kernel supports xfs and btrfs as full blown block based filesystems, and a bunch of read-only ones like cramfs, erofs and squashfs. Note that the md software raid drivers is also disabled as it has some (rather questionable) buffer_head usage in the unconditionally built bitmap code. The series is based on Linux 6.3 and will need some rebasing before it can be fed to the maintainers incrementally. All but the last patch definitively seem useful for me. The last one I think is just to avoid introducing new buffer_head dependencies, even if I suspect the real life usefulness of a !CONFIG_BUFFER_HEAD kernel might be rather limited.