On Thu, Jul 15, 2021 at 03:01:20PM -0700, Darrick J. Wong wrote: > On Thu, Jul 15, 2021 at 04:36:31AM +0100, Matthew Wilcox (Oracle) wrote: > > > > - merged = __bio_try_merge_page(wpc->ioend->io_bio, page, len, poff, > > - &same_page); > > if (iop) > > atomic_add(len, &iop->write_bytes_pending); > > - > > - if (!merged) { > > - if (bio_full(wpc->ioend->io_bio, len)) { > > - wpc->ioend->io_bio = > > - iomap_chain_bio(wpc->ioend->io_bio); > > - } > > - bio_add_page(wpc->ioend->io_bio, page, len, poff); > > + if (!bio_add_folio(wpc->ioend->io_bio, folio, len, poff)) { > > + wpc->ioend->io_bio = iomap_chain_bio(wpc->ioend->io_bio); > > + bio_add_folio(wpc->ioend->io_bio, folio, len, poff); > > The paranoiac in me wonders if we ought to have some sort of error > checking here just in case we encounter double failures? Maybe? We didn't have it before, and it's just been allocated. I'd defer to Christoph here. > > - for (i = 0, file_offset = page_offset(page); > > - i < (PAGE_SIZE >> inode->i_blkbits) && file_offset < end_offset; > > - i++, file_offset += len) { > > + for (i = 0; i < nblocks; i++, pos += len) { > > + if (pos >= end_offset) > > + break; > > Any particular reason this isn't: > > for (i = 0; i < nblocks && pos < end_offset; i++, pos += len) { > > ? Just mild personal preference ... I don't even like having the pos += len in there. But you're maintainer, I'll shuffle that in. > Everything from here on out looks decent to me. Thanks!