struct {
                        struct iov_iter         *iter;
                        struct task_struct      *waiter;
-                       struct bio              *poll_bio;
                } submit;
 
                /* used for aio completion: */
 static void iomap_dio_submit_bio(const struct iomap_iter *iter,
                struct iomap_dio *dio, struct bio *bio, loff_t pos)
 {
+       struct kiocb *iocb = dio->iocb;
+
        atomic_inc(&dio->ref);
 
        /* Sync dio can't be polled reliably */
-       if ((dio->iocb->ki_flags & IOCB_HIPRI) && !is_sync_kiocb(dio->iocb)) {
-               bio_set_polled(bio, dio->iocb);
-               dio->submit.poll_bio = bio;
+       if ((iocb->ki_flags & IOCB_HIPRI) && !is_sync_kiocb(iocb)) {
+               bio_set_polled(bio, iocb);
+               WRITE_ONCE(iocb->private, bio);
        }
 
        if (dio->dops && dio->dops->submit_io)
         * more IO to be issued to finalise filesystem metadata changes or
         * guarantee data integrity.
         */
-       WRITE_ONCE(iocb->private, NULL);
        INIT_WORK(&dio->aio.work, iomap_dio_complete_work);
        queue_work(file_inode(iocb->ki_filp)->i_sb->s_dio_done_wq,
                        &dio->aio.work);
 
        dio->submit.iter = iter;
        dio->submit.waiter = current;
-       dio->submit.poll_bio = NULL;
 
        if (iocb->ki_flags & IOCB_NOWAIT)
                iomi.flags |= IOMAP_NOWAIT;
        if (dio->flags & IOMAP_DIO_WRITE_THROUGH)
                dio->flags &= ~IOMAP_DIO_NEED_SYNC;
 
-       WRITE_ONCE(iocb->private, dio->submit.poll_bio);
-
        /*
         * We are about to drop our additional submission reference, which
         * might be the last reference to the dio.  There are three different