On Wed, Mar 21, 2018 at 08:32:26AM +0100, Christoph Hellwig wrote: > Don't reference the kiocb structure from the common aio code, and move > any use of it into helper specific to the read/write path. This is in > preparation for aio_poll support that wants to use the space for different > fields. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > Acked-by: Jeff Moyer <jmoyer@xxxxxxxxxx> > Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > --- > fs/aio.c | 171 ++++++++++++++++++++++++++++++++++++--------------------------- > 1 file changed, 97 insertions(+), 74 deletions(-) > > diff --git a/fs/aio.c b/fs/aio.c > index 41fc8ce6bc7f..6295fc00f104 100644 > --- a/fs/aio.c > +++ b/fs/aio.c > @@ -170,7 +170,9 @@ struct kioctx { > #define KIOCB_CANCELLED ((void *) (~0ULL)) > > struct aio_kiocb { > - struct kiocb common; > + union { > + struct kiocb rw; > + }; > > struct kioctx *ki_ctx; > kiocb_cancel_fn *ki_cancel; > @@ -549,7 +551,7 @@ static int aio_setup_ring(struct kioctx *ctx, unsigned int nr_events) > > void kiocb_set_cancel_fn(struct kiocb *iocb, kiocb_cancel_fn *cancel) > { > - struct aio_kiocb *req = container_of(iocb, struct aio_kiocb, common); > + struct aio_kiocb *req = container_of(iocb, struct aio_kiocb, rw); > struct kioctx *ctx = req->ki_ctx; > unsigned long flags; > > @@ -582,7 +584,7 @@ static int kiocb_cancel(struct aio_kiocb *kiocb) > cancel = cmpxchg(&kiocb->ki_cancel, old, KIOCB_CANCELLED); > } while (cancel != old); > > - return cancel(&kiocb->common); > + return cancel(&kiocb->rw); > } > > static void free_ioctx(struct work_struct *work) > @@ -1040,15 +1042,6 @@ static inline struct aio_kiocb *aio_get_req(struct kioctx *ctx) > return NULL; > } > > -static void kiocb_free(struct aio_kiocb *req) > -{ > - if (req->common.ki_filp) > - fput(req->common.ki_filp); > - if (req->ki_eventfd != NULL) > - eventfd_ctx_put(req->ki_eventfd); > - kmem_cache_free(kiocb_cachep, req); > -} > - > static struct kioctx *lookup_ioctx(unsigned long ctx_id) > { > struct aio_ring __user *ring = (void __user *)ctx_id; > @@ -1079,29 +1072,14 @@ static struct kioctx *lookup_ioctx(unsigned long ctx_id) > /* aio_complete > * Called when the io request on the given iocb is complete. > */ > -static void aio_complete(struct kiocb *kiocb, long res, long res2) > +static void aio_complete(struct aio_kiocb *iocb, long res, long res2) > { > - struct aio_kiocb *iocb = container_of(kiocb, struct aio_kiocb, common); > struct kioctx *ctx = iocb->ki_ctx; > struct aio_ring *ring; > struct io_event *ev_page, *event; > unsigned tail, pos, head; > unsigned long flags; > > - BUG_ON(is_sync_kiocb(kiocb)); Ah, nevermind about my previous email, sorry, should have kept reading... > +static void aio_complete_rw(struct kiocb *kiocb, long res, long res2) > +{ > + struct aio_kiocb *iocb = container_of(kiocb, struct aio_kiocb, rw); > + > + WARN_ON_ONCE(is_sync_kiocb(kiocb)); That's nicer, thanks. Reviewed-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html