summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPranith Kumar K <pkarampu@redhat.com>2019-10-10 10:50:59 +0530
committerXavi Hernandez <xhernandez@redhat.com>2020-06-10 14:19:50 +0000
commit1fd11299a649fe1dbed21eb2b10c38470469a641 (patch)
tree4d4ec05c221d8bfa4c70356c511db6ae69bd1d20
parentea31f9a7838548dfb759e30a58957d29cd59f87e (diff)
performance/open-behind: seek fop should open_and_resume
Backport of: > fixes: bz#1760187 > Change-Id: I4c6ad13194d4fc5c7705e35bf9a27fce504b51f9 > Signed-off-by: Pranith Kumar K <pkarampu@redhat.com> Fixes: #1296 Change-Id: I4c6ad13194d4fc5c7705e35bf9a27fce504b51f9 Signed-off-by: Xavi Hernandez <xhernandez@redhat.com>
-rw-r--r--xlators/performance/open-behind/src/open-behind.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/xlators/performance/open-behind/src/open-behind.c b/xlators/performance/open-behind/src/open-behind.c
index 2119fc57e65..cbe89ec82e8 100644
--- a/xlators/performance/open-behind/src/open-behind.c
+++ b/xlators/performance/open-behind/src/open-behind.c
@@ -714,6 +714,32 @@ err:
}
int
+ob_seek(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,
+ gf_seek_what_t what, dict_t *xdata)
+{
+ call_stub_t *stub = NULL;
+ fd_t *wind_fd = NULL;
+
+ wind_fd = ob_get_wind_fd(this, fd, NULL);
+
+ stub = fop_seek_stub(frame, default_seek_resume, wind_fd, offset, what,
+ xdata);
+
+ fd_unref(wind_fd);
+
+ if (!stub)
+ goto err;
+
+ open_and_resume(this, wind_fd, stub);
+
+ return 0;
+err:
+ STACK_UNWIND_STRICT(fstat, frame, -1, ENOMEM, 0, 0);
+
+ return 0;
+}
+
+int
ob_flush(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)
{
call_stub_t *stub = NULL;
@@ -1261,6 +1287,7 @@ struct xlator_fops fops = {
.flush = ob_flush,
.fsync = ob_fsync,
.fstat = ob_fstat,
+ .seek = ob_seek,
.ftruncate = ob_ftruncate,
.fsetxattr = ob_fsetxattr,
.setxattr = ob_setxattr,