[lustre-devel] [PATCH 04/27] lustre: llite: restart clio for AIO if necessary
James Simmons <[email protected]> Mon, 17 Apr 2023 09:47:00 -0400
| Newsgroups | org.lustre.lists.lustre-devel |
|---|---|
| Message-ID | <[email protected]> |
From: Li Dongyang <[email protected]> If the clio needs to be restarted from where it left off, do it for AIO as well, so we don't end up with short IO. Limit thr number of retries to 1000, to avoid potential issues if the loop is stuck forever. WC-bug-id: https://jira.whamcloud.com/browse/LU-14760 Lustre-commit: 6b1e747ad5bf02915 ("LU-14760 llite: restart clio for AIO if necessary") Signed-off-by: Li Dongyang <[email protected]> Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/43995 Reviewed-by: Oleg Drokin <[email protected]> Reviewed-by: Andreas Dilger <[email protected]> Reviewed-by: Patrick Farrell <[email protected]> Signed-off-by: James Simmons <[email protected]> --- fs/lustre/llite/file.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/fs/lustre/llite/file.c b/fs/lustre/llite/file.c index 746c18f..b96efb1 100644 --- a/fs/lustre/llite/file.c +++ b/fs/lustre/llite/file.c @@ -1689,6 +1689,7 @@ static void ll_heat_add(struct inode *inode, enum cl_io_type iot, ssize_t result = 0; int rc = 0; int rc2 = 0; + int retries = 1000; unsigned int retried = 0; unsigned int dio_lock = 0; bool is_aio = false; @@ -1851,13 +1852,13 @@ static void ll_heat_add(struct inode *inode, enum cl_io_type iot, file->f_path.dentry->d_name.name, iot, rc, result, io->ci_need_restart); - if ((!rc || rc == -ENODATA || rc == -ENOLCK) && - count > 0 && io->ci_need_restart) { + if ((!rc || rc == -ENODATA || rc == -ENOLCK || rc == -EIOCBQUEUED) && + count > 0 && io->ci_need_restart && retries-- > 0) { CDEBUG(D_VFSTRACE, - "%s: restart %s from %lld, count:%zu, result: %zd\n", + "%s: restart %s from ppos=%lld count=%zu retries=%u ret=%zd: rc = %d\n", file_dentry(file)->d_name.name, iot == CIT_READ ? "read" : "write", - *ppos, count, result); + *ppos, count, retries, result, rc); /* preserve the tried count for FLR */ retried = io->ci_ndelay_tried; dio_lock = io->ci_dio_lock; -- 1.8.3.1 _______________________________________________ lustre-devel mailing list [email protected] http://lists.lustre.org/listinfo.cgi/lustre-devel-lustre.org