On Wed, May 15, 2024 at 03:59:43PM +0000, Pankaj Raghav (Samsung) wrote: > static int __init iomap_init(void) > { > + void *addr = kzalloc(16 * PAGE_SIZE, GFP_KERNEL); Don't use XFS coding style outside XFS. kzalloc() does not guarantee page alignment much less alignment to a folio. It happens to work today, but that is an implementation artefact. > + > + if (!addr) > + return -ENOMEM; > + > + zero_fsb_folio = virt_to_folio(addr); We also don't guarantee that calling kzalloc() gives you a virtual address that can be converted to a folio. You need to allocate a folio to be sure that you get a folio. Of course, you don't actually need a folio. You don't need any of the folio metadata and can just use raw pages. > + /* > + * The zero folio used is 64k. > + */ > + WARN_ON_ONCE(len > (16 * PAGE_SIZE)); PAGE_SIZE is not necessarily 4KiB. > + bio = iomap_dio_alloc_bio(iter, dio, BIO_MAX_VECS, > + REQ_OP_WRITE | REQ_SYNC | REQ_IDLE); The point was that we now only need one biovec, not MAX.