@@ -158,6 +158,8 @@ 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);
@@ -166,9 +168,9 @@ void iomap_dio_bio_end_io(struct bio *bio)
WRITE_ONCE(dio->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 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)