12a457
From 807c7debe3c36ff911e6f7081e066b251d2a0ee4 Mon Sep 17 00:00:00 2001
12a457
From: Pranith Kumar K <pkarampu@redhat.com>
12a457
Date: Thu, 5 May 2016 07:59:03 +0530
12a457
Subject: [PATCH 186/192] protocol/client: Filter o-direct in readv/writev
12a457
12a457
        Backport of: http://review.gluster.org/14215
12a457
12a457
Change-Id: I55e53492a878284ed1c75b018d5203b2f5d79032
12a457
BUG: 1339136
12a457
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
12a457
Reviewed-on: https://code.engineering.redhat.com/gerrit/75848
12a457
---
12a457
 xlators/protocol/client/src/client.c |   23 +++++++++++++++--------
12a457
 1 files changed, 15 insertions(+), 8 deletions(-)
12a457
12a457
diff --git a/xlators/protocol/client/src/client.c b/xlators/protocol/client/src/client.c
12a457
index 2e9fb4c..3191a98 100644
12a457
--- a/xlators/protocol/client/src/client.c
12a457
+++ b/xlators/protocol/client/src/client.c
12a457
@@ -36,6 +36,13 @@ int client_init_rpc (xlator_t *this);
12a457
 int client_destroy_rpc (xlator_t *this);
12a457
 int client_mark_fd_bad (xlator_t *this);
12a457
 
12a457
+static void
12a457
+client_filter_o_direct (clnt_conf_t *conf, int32_t *flags)
12a457
+{
12a457
+        if (conf->filter_o_direct)
12a457
+                *flags = (*flags & ~O_DIRECT);
12a457
+}
12a457
+
12a457
 static int
12a457
 client_fini_complete (xlator_t *this)
12a457
 {
12a457
@@ -797,11 +804,9 @@ client_create (call_frame_t *frame, xlator_t *this, loc_t *loc,  int32_t flags,
12a457
         args.fd = fd;
12a457
         args.umask = umask;
12a457
         args.xdata = xdata;
12a457
+        args.flags = flags;
12a457
 
12a457
-        if (!conf->filter_o_direct)
12a457
-                args.flags = flags;
12a457
-        else
12a457
-                args.flags = (flags & ~O_DIRECT);
12a457
+        client_filter_o_direct (conf, &args.flags);
12a457
 
12a457
         proc = &conf->fops->proctable[GF_FOP_CREATE];
12a457
         if (proc->fn)
12a457
@@ -832,11 +837,9 @@ client_open (call_frame_t *frame, xlator_t *this, loc_t *loc,
12a457
         args.loc = loc;
12a457
         args.fd = fd;
12a457
         args.xdata = xdata;
12a457
+        args.flags = flags;
12a457
 
12a457
-        if (!conf->filter_o_direct)
12a457
-                args.flags = flags;
12a457
-        else
12a457
-                args.flags = (flags & ~O_DIRECT);
12a457
+        client_filter_o_direct (conf, &args.flags);
12a457
 
12a457
         proc = &conf->fops->proctable[GF_FOP_OPEN];
12a457
         if (proc->fn)
12a457
@@ -870,6 +873,8 @@ client_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,
12a457
         args.flags  = flags;
12a457
         args.xdata = xdata;
12a457
 
12a457
+        client_filter_o_direct (conf, &args.flags);
12a457
+
12a457
         proc = &conf->fops->proctable[GF_FOP_READ];
12a457
         if (proc->fn)
12a457
                 ret = proc->fn (frame, this, &args);
12a457
@@ -908,6 +913,8 @@ client_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,
12a457
         args.iobref = iobref;
12a457
         args.xdata = xdata;
12a457
 
12a457
+        client_filter_o_direct (conf, &args.flags);
12a457
+
12a457
         proc = &conf->fops->proctable[GF_FOP_WRITE];
12a457
         if (proc->fn)
12a457
                 ret = proc->fn (frame, this, &args);
12a457
-- 
12a457
1.7.1
12a457