On Wed, May 04, 2022 at 09:23:39AM -0700, Christoph Hellwig wrote: > Allow the file system to keep state for all iterations. For now only > wire it up for direct I/O as there is an immediate need for it there. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > fs/iomap/direct-io.c | 8 ++++++++ > include/linux/iomap.h | 1 + > 2 files changed, 9 insertions(+) > > diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c > index 15929690d89e3..355abe2eacc6a 100644 > --- a/fs/iomap/direct-io.c > +++ b/fs/iomap/direct-io.c > @@ -520,6 +520,14 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, > dio->submit.waiter = current; > dio->submit.poll_bio = NULL; > > + /* > + * Transfer the private data that was passed by the caller to the > + * iomap_iter, and clear it in the iocb, as iocb->private will be > + * used for polled bio completion later. > + */ > + iomi.private = iocb->private; > + WRITE_ONCE(iocb->private, NULL); Do we need to transfer it back after the bio completes? Or is it a feature that iocb->private changes to the bio? --D > + > if (iov_iter_rw(iter) == READ) { > if (iomi.pos >= dio->i_size) > goto out_free_dio; > diff --git a/include/linux/iomap.h b/include/linux/iomap.h > index a5483020dad41..109c055865f73 100644 > --- a/include/linux/iomap.h > +++ b/include/linux/iomap.h > @@ -188,6 +188,7 @@ struct iomap_iter { > unsigned flags; > struct iomap iomap; > struct iomap srcmap; > + void *private; > }; > > int iomap_iter(struct iomap_iter *iter, const struct iomap_ops *ops); > -- > 2.30.2 >