On Tue, May 07, 2024 at 04:58:12PM +0200, Pankaj Raghav (Samsung) wrote: > Instead of looping with ZERO_PAGE, use a huge zero folio to zero pad the > block. Fallback to ZERO_PAGE if mm_get_huge_zero_folio() fails. So the block people say we're doing this all wrong. We should be issuing a REQ_OP_WRITE_ZEROES bio, and the block layer will take care of using the ZERO_PAGE if the hardware doesn't natively support WRITE_ZEROES or a DISCARD that zeroes or ... I suspect all these places should be checked to see if they can use WRITE_ZEROES too: fs/bcachefs/checksum.c: page_address(ZERO_PAGE(0)), page_len); fs/bcachefs/io_write.c: if (bv->bv_page != ZERO_PAGE(0)) fs/bcachefs/quota.c: if (memcmp(mq, page_address(ZERO_PAGE(0)), sizeof(*mq))) { fs/cramfs/inode.c: return page_address(ZERO_PAGE(0)); fs/crypto/bio.c: ret = bio_add_page(bio, ZERO_PAGE(0), bytes_this_page, 0); fs/crypto/bio.c: ZERO_PAGE(0), pages[i], fs/direct-io.c: dio->pages[0] = ZERO_PAGE(0); fs/direct-io.c: page = ZERO_PAGE(0); fs/iomap/direct-io.c: struct page *page = ZERO_PAGE(0);