@@ -157,18 +157,20 @@ void iomap_dio_bio_end_io(struct bio *bio)
iomap_dio_set_error(dio, blk_status_to_errno(bio->bi_status));
if (atomic_dec_and_test(&dio->ref)) {
+ struct kiocb *iocb = dio->iocb;
+
if (dio->wait_for_completion) {
struct task_struct *waiter = dio->submit.waiter;
WRITE_ONCE(dio->submit.waiter, NULL);
blk_wake_io_task(waiter);
} else if ((bio->bi_opf & REQ_POLLED) ||
!(dio->flags & IOMAP_DIO_WRITE)) {
- WRITE_ONCE(dio->iocb->private, NULL);
+ WRITE_ONCE(iocb->private, NULL);
iomap_dio_complete_work(&dio->aio.work);
} else {
- struct inode *inode = file_inode(dio->iocb->ki_filp);
+ struct inode *inode = file_inode(iocb->ki_filp);
- WRITE_ONCE(dio->iocb->private, NULL);
+ WRITE_ONCE(iocb->private, NULL);
INIT_WORK(&dio->aio.work, iomap_dio_complete_work);
queue_work(inode->i_sb->s_dio_done_wq, &dio->aio.work);
}
We use this multiple times, add a local variable for the kiocb. Signed-off-by: Jens Axboe <axboe@kernel.dk> --- fs/iomap/direct-io.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)