[LU-15399] Don't restart CLI IO for IOCB_NOWAIT direct IO Created: 27/Dec/21 Updated: 27/Nov/23 Resolved: 11/Jul/22 |
|
| Status: | Resolved |
| Project: | Lustre |
| Component/s: | None |
| Affects Version/s: | None |
| Fix Version/s: | Lustre 2.16.0 |
| Type: | Bug | Priority: | Minor |
| Reporter: | Qian Yingjin | Assignee: | Qian Yingjin |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | MON | ||
| Issue Links: |
|
||||||||
| Severity: | 3 | ||||||||
| Rank (Obsolete): | 9223372036854775807 | ||||||||
| Description |
int cl_io_loop(const struct lu_env *env, struct cl_io *io) { int result = 0; int rc = 0; ... if (result == -EAGAIN && io->ci_ndelay) { io->ci_need_restart = 1; result = 0; } if (result == 0) result = io->ci_result; RETURN(result < 0 ? result : 0); } EXPORT_SYMBOL(cl_io_loop);
ssize_t
generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)
{
...
if (iocb->ki_flags & IOCB_NOWAIT) {
if (filemap_range_has_page(mapping, iocb->ki_pos,
iocb->ki_pos + count - 1))
return -EAGAIN;
...
We should handle FLR mirror retry and io_uring IOCB_NOWAIT differently. In the current code, it will restart the I/O engine loop when get -EAGAIN return code. |
| Comments |
| Comment by Gerrit Updater [ 17/Jan/22 ] |
|
"Yingjin Qian <qian@ddn.com>" uploaded a new patch: https://review.whamcloud.com/46147 |
| Comment by Gerrit Updater [ 11/Jul/22 ] |
|
"Oleg Drokin <green@whamcloud.com>" merged in patch https://review.whamcloud.com/46147/ |
| Comment by Peter Jones [ 11/Jul/22 ] |
|
Landed for 2.16 |
| Comment by Gerrit Updater [ 27/Nov/23 ] |
|
"Etienne AUJAMES <eaujames@ddn.com>" uploaded a new patch: https://review.whamcloud.com/c/fs/lustre-release/+/53246 |