On Tue, Jun 08, 2021 at 06:05:56PM +0200, Christoph Hellwig wrote: > > rq_for_each_segment(bvec, req, iter) { > - unsigned long flags; > - dev_dbg(&dev->sbd.core, "%s:%u: bio %u: %u sectors from %llu\n", > - __func__, __LINE__, i, bio_sectors(iter.bio), > - iter.bio->bi_iter.bi_sector); > - > - size = bvec.bv_len; > - buf = bvec_kmap_irq(&bvec, &flags); > if (gather) > - memcpy(dev->bounce_buf+offset, buf, size); > + memcpy_from_bvec(dev->bounce_buf + offset, &bvec); > else > - memcpy(buf, dev->bounce_buf+offset, size); > - offset += size; > - flush_kernel_dcache_page(bvec.bv_page); I'm still not 100% sure that these flushes are needed but the are not no-ops on every arch. Would it be best to preserve them after the memcpy_to/from_bvec()? Same thing in patch 11 and 14. Ira