diff options
| author | Pranith Kumar K <pkarampu@redhat.com> | 2016-05-05 07:59:03 +0530 | 
|---|---|---|
| committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2016-05-05 20:37:26 -0700 | 
| commit | 74837896c38bafdd862f164d147b75fcbb619e8f (patch) | |
| tree | fad9767dd4e65995832ab87799f5f0cc40cfa4b5 | |
| parent | 5440bad91026f27399df51856176aef85c1fcf4d (diff) | |
protocol/client: Filter o-direct in readv/writev
Change-Id: I519c666b3a7c0db46d47e08a6a7e2dbecc05edf2
BUG: 1322214
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
Reviewed-on: http://review.gluster.org/14215
Smoke: Gluster Build System <jenkins@build.gluster.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Krutika Dhananjay <kdhananj@redhat.com>
| -rw-r--r-- | xlators/protocol/client/src/client.c | 23 | 
1 files changed, 15 insertions, 8 deletions
diff --git a/xlators/protocol/client/src/client.c b/xlators/protocol/client/src/client.c index 14af6fb03c5..3cb5e231fbe 100644 --- a/xlators/protocol/client/src/client.c +++ b/xlators/protocol/client/src/client.c @@ -31,6 +31,13 @@ int client_init_rpc (xlator_t *this);  int client_destroy_rpc (xlator_t *this);  int client_mark_fd_bad (xlator_t *this); +static void +client_filter_o_direct (clnt_conf_t *conf, int32_t *flags) +{ +        if (conf->filter_o_direct) +                *flags = (*flags & ~O_DIRECT); +} +  static int  client_fini_complete (xlator_t *this)  { @@ -913,11 +920,9 @@ client_create (call_frame_t *frame, xlator_t *this, loc_t *loc,  int32_t flags,          args.fd = fd;          args.umask = umask;          args.xdata = xdata; +        args.flags = flags; -        if (!conf->filter_o_direct) -                args.flags = flags; -        else -                args.flags = (flags & ~O_DIRECT); +        client_filter_o_direct (conf, &args.flags);          proc = &conf->fops->proctable[GF_FOP_CREATE];          if (proc->fn) @@ -948,11 +953,9 @@ client_open (call_frame_t *frame, xlator_t *this, loc_t *loc,          args.loc = loc;          args.fd = fd;          args.xdata = xdata; +        args.flags = flags; -        if (!conf->filter_o_direct) -                args.flags = flags; -        else -                args.flags = (flags & ~O_DIRECT); +        client_filter_o_direct (conf, &args.flags);          proc = &conf->fops->proctable[GF_FOP_OPEN];          if (proc->fn) @@ -986,6 +989,8 @@ client_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,          args.flags  = flags;          args.xdata = xdata; +        client_filter_o_direct (conf, &args.flags); +          proc = &conf->fops->proctable[GF_FOP_READ];          if (proc->fn)                  ret = proc->fn (frame, this, &args); @@ -1024,6 +1029,8 @@ client_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,          args.iobref = iobref;          args.xdata = xdata; +        client_filter_o_direct (conf, &args.flags); +          proc = &conf->fops->proctable[GF_FOP_WRITE];          if (proc->fn)                  ret = proc->fn (frame, this, &args);  | 
