block: kill unused polling bits in __blkdev_direct_IO()
With addition of __blkdev_direct_IO_async(), __blkdev_direct_IO() now serves only multio-bio I/O, which we don't poll. Now we can remove anything related to I/O polling from it. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://lore.kernel.org/r/b8c597a6b7ee612df394853bfd24726aee5b898e.1635337135.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
1bb6b81029
commit
25d207dc22
20
block/fops.c
20
block/fops.c
|
@ -190,7 +190,6 @@ static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
|
||||||
struct blk_plug plug;
|
struct blk_plug plug;
|
||||||
struct blkdev_dio *dio;
|
struct blkdev_dio *dio;
|
||||||
struct bio *bio;
|
struct bio *bio;
|
||||||
bool do_poll = (iocb->ki_flags & IOCB_HIPRI);
|
|
||||||
bool is_read = (iov_iter_rw(iter) == READ), is_sync;
|
bool is_read = (iov_iter_rw(iter) == READ), is_sync;
|
||||||
loff_t pos = iocb->ki_pos;
|
loff_t pos = iocb->ki_pos;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -216,12 +215,7 @@ static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
|
||||||
if (is_read && iter_is_iovec(iter))
|
if (is_read && iter_is_iovec(iter))
|
||||||
dio->flags |= DIO_SHOULD_DIRTY;
|
dio->flags |= DIO_SHOULD_DIRTY;
|
||||||
|
|
||||||
/*
|
blk_start_plug(&plug);
|
||||||
* Don't plug for HIPRI/polled IO, as those should go straight
|
|
||||||
* to issue
|
|
||||||
*/
|
|
||||||
if (!(iocb->ki_flags & IOCB_HIPRI))
|
|
||||||
blk_start_plug(&plug);
|
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
bio_set_dev(bio, bdev);
|
bio_set_dev(bio, bdev);
|
||||||
|
@ -254,11 +248,7 @@ static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
|
||||||
|
|
||||||
nr_pages = bio_iov_vecs_to_alloc(iter, BIO_MAX_VECS);
|
nr_pages = bio_iov_vecs_to_alloc(iter, BIO_MAX_VECS);
|
||||||
if (!nr_pages) {
|
if (!nr_pages) {
|
||||||
if (do_poll)
|
|
||||||
bio_set_polled(bio, iocb);
|
|
||||||
submit_bio(bio);
|
submit_bio(bio);
|
||||||
if (do_poll)
|
|
||||||
WRITE_ONCE(iocb->private, bio);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!(dio->flags & DIO_MULTI_BIO)) {
|
if (!(dio->flags & DIO_MULTI_BIO)) {
|
||||||
|
@ -271,7 +261,6 @@ static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
|
||||||
bio_get(bio);
|
bio_get(bio);
|
||||||
dio->flags |= DIO_MULTI_BIO;
|
dio->flags |= DIO_MULTI_BIO;
|
||||||
atomic_set(&dio->ref, 2);
|
atomic_set(&dio->ref, 2);
|
||||||
do_poll = false;
|
|
||||||
} else {
|
} else {
|
||||||
atomic_inc(&dio->ref);
|
atomic_inc(&dio->ref);
|
||||||
}
|
}
|
||||||
|
@ -280,8 +269,7 @@ static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
|
||||||
bio = bio_alloc(GFP_KERNEL, nr_pages);
|
bio = bio_alloc(GFP_KERNEL, nr_pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(iocb->ki_flags & IOCB_HIPRI))
|
blk_finish_plug(&plug);
|
||||||
blk_finish_plug(&plug);
|
|
||||||
|
|
||||||
if (!is_sync)
|
if (!is_sync)
|
||||||
return -EIOCBQUEUED;
|
return -EIOCBQUEUED;
|
||||||
|
@ -290,9 +278,7 @@ static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
|
||||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
set_current_state(TASK_UNINTERRUPTIBLE);
|
||||||
if (!READ_ONCE(dio->waiter))
|
if (!READ_ONCE(dio->waiter))
|
||||||
break;
|
break;
|
||||||
|
blk_io_schedule();
|
||||||
if (!do_poll || !bio_poll(bio, NULL, 0))
|
|
||||||
blk_io_schedule();
|
|
||||||
}
|
}
|
||||||
__set_current_state(TASK_RUNNING);
|
__set_current_state(TASK_RUNNING);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue