Lines Matching refs:dio
337 struct blkdev_dio *dio = bio->bi_private;
338 bool should_dirty = dio->should_dirty;
340 if (bio->bi_status && !dio->bio.bi_status)
341 dio->bio.bi_status = bio->bi_status;
343 if (!dio->multi_bio || atomic_dec_and_test(&dio->ref)) {
344 if (!dio->is_sync) {
345 struct kiocb *iocb = dio->iocb;
348 if (likely(!dio->bio.bi_status)) {
349 ret = dio->size;
352 ret = blk_status_to_errno(dio->bio.bi_status);
355 dio->iocb->ki_complete(iocb, ret, 0);
356 if (dio->multi_bio)
357 bio_put(&dio->bio);
359 struct task_struct *waiter = dio->waiter;
361 WRITE_ONCE(dio->waiter, NULL);
381 struct blkdev_dio *dio;
395 dio = container_of(bio, struct blkdev_dio, bio);
396 dio->is_sync = is_sync = is_sync_kiocb(iocb);
397 if (dio->is_sync) {
398 dio->waiter = current;
401 dio->iocb = iocb;
404 dio->size = 0;
405 dio->multi_bio = false;
406 dio->should_dirty = is_read && iter_is_iovec(iter);
419 bio->bi_private = dio;
432 if (dio->should_dirty)
441 dio->size += bio->bi_iter.bi_size;
460 if (!dio->multi_bio) {
462 * AIO needs an extra reference to ensure the dio
468 dio->multi_bio = true;
469 atomic_set(&dio->ref, 2);
471 atomic_inc(&dio->ref);
486 if (!READ_ONCE(dio->waiter))
496 ret = blk_status_to_errno(dio->bio.bi_status);
498 ret = dio->size;
500 bio_put(&dio->bio);