On Sat, Sep 19, 2020 at 07:39:08AM +0100, Christoph Hellwig wrote: > I think just adding the completion and status to struct > iomap_readpage_ctx would be a lot easier to follow, at the cost > of bloating the structure a bit for the readahead case. If we > are realy concerned about that, the completion could be directly > on the iomap_readpage stack and we'd pass a pointer. We could do that. I was intending to reuse the code for the write_begin path so that a pathological case where a page straddles multiple extents can be handled by sending multiple BIOs and waiting on both of them at the same time, instead of the current way of sending a BIO, waiting for it to complete, sending a second BIO, waiting for it to complete, ... I haven't fully got my head around how to do that effectively yet. The iomap buffered write path assumes that extents are larger than page size and you're going to get multiple pages per extent, when the situation could be reversed and we might need to stitch together multiple extents in order to bring a page Uptodate. I also don't yet understand why we read the current contents of a block when we're going to completely overwrite it with data.