liburing 500f9fbadef8-test test failure on top-of-tree

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

 



Hi,

This test case is failing for me when run atop a dm device.  The test
sets up a ring with IO_SETUP_IOPOLL, creates a file and opens it with
O_DIRECT, and then issues a writev.  The writev operation is returning
-22 (-EINVAL).  The failure comes from this check inside io_import_iov:

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

req->rw.kiocb.private is being used by the iomap code to store a pointer
to the request queue.  The sequence of events is as follows:

io_write is called in the context of the system call, it calls
call_write_iter, which returns -EAGAIN.  The I/O is punted to a
workqueue.

The work item then tries to issue the I/O after clearing IOCB_NOWAIT,
and for some reason fails again with -EAGAIN.

On the *third* call to io_write, the private pointer has been
overwitten, and we trigger the above -EINVAL return.

I have no idea why we're getting EAGAIN on the first call in the
workqueue context, so I'm not sure if that's the problem, of if we
simply can't use the kiocb.private pointer for this purpose.  It seems
clear that once we've called into the iomap code, we can't rely on the
contents of kiocb.private.

Jens, what do you think?

-Jeff




[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