[RFC 0/2] io_uring: don't use kiocb.private to store buf_index

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This patch set addresses problems hit when running liburing
500f9fbadef8-test.

- Patch 1 is a suggested fix to overloading of kiocb.private since it
can be written by iomap_dio_rw().

io_import_iovec() can fail a submission as follows:

	/* buffer index only valid with fixed read/write, or buffer select  */
	if (req->rw.kiocb.private && !(req->flags & REQ_F_BUFFER_SELECT))
		return -EINVAL;

so a read request fails with -EINVAL upon retry if iomap_dio_rw() has
written to iocb->private:

       WRITE_ONCE(iocb->private, dio->submit.last_queue);

The suggested fix is use a separate variable to store buf_index.

- Patch 2 reverts c58c1f8343 which had changed the error for
REQ_NOWAIT requests to non-mq queue from -ENOTSUP to -EAGAIN.

	/*
	 * Non-mq queues do not honor REQ_NOWAIT, so complete a bio
	 * with BLK_STS_AGAIN status in order to catch -EAGAIN and
	 * to give a chance to the caller to repeat request gracefully.
	 */
	if ((bio->bi_opf & REQ_NOWAIT) && !queue_is_mq(q)) {
		status = BLK_STS_AGAIN;
		goto end_io;
	}

I'm not clear what the original reasoning was but io_wq_submit_work()
will call io_issue_sqe() continuously as long as -EAGAIN is returned.
I'm not sure if this could break something else.

I ran fio as specified in c58c1f8343 with this change and don't see any errors.

Bijan Mottahedeh (2):
  io_uring: don't use kiocb.private to store buf_index
  io_uring: mark REQ_NOWAIT for a non-mq queue as unspported

 block/blk-core.c | 10 +++-------
 fs/io_uring.c    | 15 +++++++--------
 2 files changed, 10 insertions(+), 15 deletions(-)

-- 
1.8.3.1




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux