From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Return-Path: From: Cyrill Gorcunov Subject: [PATCH 2/3] core/coio_file: Add ERRINJ_COIO_SENDFILE_CHUNK error injection Date: Tue, 16 Apr 2019 23:08:57 +0300 Message-Id: <20190416200858.19473-3-gorcunov@gmail.com> In-Reply-To: <20190416200858.19473-1-gorcunov@gmail.com> References: <20190416200858.19473-1-gorcunov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit To: tml Cc: Vladimir Davydov , Cyrill Gorcunov List-ID: This allows us to test sendfile in a cycle. --- src/lib/core/coio_file.c | 11 +++++++++-- src/lib/core/errinj.h | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/lib/core/coio_file.c b/src/lib/core/coio_file.c index 20053558e..3caf185a5 100644 --- a/src/lib/core/coio_file.c +++ b/src/lib/core/coio_file.c @@ -33,6 +33,7 @@ #include "fiber.h" #include "say.h" #include "fio.h" +#include "errinj.h" #include #include #include @@ -570,8 +571,9 @@ coio_readdir(const char *dir_path, char **buf) static void coio_do_copyfile(eio_req *req) { + struct errinj *inj = errinj(ERRINJ_COIO_SENDFILE_CHUNK, ERRINJ_INT); struct coio_file_task *eio = (struct coio_file_task *)req->data; - off_t pos, ret, left; + off_t pos, ret, left, chunk; struct stat st; if (stat(eio->copyfile.source, &st) < 0) { goto error; @@ -588,8 +590,13 @@ coio_do_copyfile(eio_req *req) goto error_dest; } + if (inj != NULL && inj->iparam > 0) + chunk = (off_t)inj->iparam; + else + chunk = st.st_size; + for (left = st.st_size, pos = 0; left > 0;) { - ret = eio_sendfile_sync(dest_fd, source_fd, pos, left); + ret = eio_sendfile_sync(dest_fd, source_fd, pos, chunk); if (ret < 0) { say_syserror("sendfile, [%s -> %s]", fio_filename(source_fd), diff --git a/src/lib/core/errinj.h b/src/lib/core/errinj.h index 4bca81caf..462c98464 100644 --- a/src/lib/core/errinj.h +++ b/src/lib/core/errinj.h @@ -129,6 +129,7 @@ struct errinj { _(ERRINJ_MEMTX_DELAY_GC, ERRINJ_BOOL, {.bparam = false}) \ _(ERRINJ_SIO_READ_MAX, ERRINJ_INT, {.iparam = -1}) \ _(ERRINJ_SQL_NAME_NORMALIZATION, ERRINJ_BOOL, {.bparam = false}) \ + _(ERRINJ_COIO_SENDFILE_CHUNK, ERRINJ_INT, {.iparam = -1}) \ ENUM0(errinj_id, ERRINJ_LIST); extern struct errinj errinjs[]; -- 2.20.1