diff options
Diffstat (limited to 'xlators/protocol/client/src/client-protocol.c')
-rw-r--r-- | xlators/protocol/client/src/client-protocol.c | 46 |
1 files changed, 34 insertions, 12 deletions
diff --git a/xlators/protocol/client/src/client-protocol.c b/xlators/protocol/client/src/client-protocol.c index 58eba01ed0b..1d3fbfec783 100644 --- a/xlators/protocol/client/src/client-protocol.c +++ b/xlators/protocol/client/src/client-protocol.c @@ -3253,6 +3253,7 @@ unwind: int32_t client_inodelk (call_frame_t *frame, xlator_t *this, + const char *volume, loc_t *loc, int32_t cmd, struct flock *flock) @@ -3265,6 +3266,7 @@ client_inodelk (call_frame_t *frame, int32_t gf_type = 0; ino_t ino = 0; size_t pathlen = 0; + size_t vollen = 0; client_conf_t *conf = this->private; if (conf->child) { @@ -3273,12 +3275,14 @@ client_inodelk (call_frame_t *frame, default_inodelk_cbk, conf->child, conf->child->fops->inodelk, - loc, cmd, flock); + volume, loc, cmd, flock); return 0; } pathlen = STRLEN_0(loc->path); + vollen = STRLEN_0(volume); + ino = this_ino_get (loc, this, GF_CLIENT_INODE_SELF); if (cmd == F_GETLK || cmd == F_GETLK64) @@ -3305,13 +3309,14 @@ client_inodelk (call_frame_t *frame, break; } - hdrlen = gf_hdr_len (req, pathlen); - hdr = gf_hdr_new (req, pathlen); + hdrlen = gf_hdr_len (req, pathlen + vollen); + hdr = gf_hdr_new (req, pathlen + vollen); GF_VALIDATE_OR_GOTO(this->name, hdr, unwind); req = gf_param (hdr); strcpy (req->path, loc->path); + strcpy (req->path + pathlen, volume); req->ino = hton64 (ino); @@ -3349,6 +3354,7 @@ unwind: int32_t client_finodelk (call_frame_t *frame, xlator_t *this, + const char *volume, fd_t *fd, int32_t cmd, struct flock *flock) @@ -3357,6 +3363,7 @@ client_finodelk (call_frame_t *frame, gf_hdr_common_t *hdr = NULL; gf_fop_finodelk_req_t *req = NULL; size_t hdrlen = 0; + size_t vollen = 0; int32_t gf_cmd = 0; int32_t gf_type = 0; int64_t remote_fd = -1; @@ -3368,11 +3375,13 @@ client_finodelk (call_frame_t *frame, default_finodelk_cbk, conf->child, conf->child->fops->finodelk, - fd, cmd, flock); + volume, fd, cmd, flock); return 0; } + vollen = STRLEN_0(volume); + ret = this_fd_get (fd, this, &remote_fd); if (ret == -1) { gf_log (this->name, GF_LOG_DEBUG, @@ -3406,12 +3415,14 @@ client_finodelk (call_frame_t *frame, break; } - hdrlen = gf_hdr_len (req, 0); - hdr = gf_hdr_new (req, 0); + hdrlen = gf_hdr_len (req, vollen); + hdr = gf_hdr_new (req, vollen); GF_VALIDATE_OR_GOTO(this->name, hdr, unwind); req = gf_param (hdr); + strcpy (req->volume, volume); + req->fd = hton64 (remote_fd); req->cmd = hton32 (gf_cmd); @@ -3436,6 +3447,7 @@ unwind: int32_t client_entrylk (call_frame_t *frame, xlator_t *this, + const char *volume, loc_t *loc, const char *name, entrylk_cmd cmd, @@ -3444,6 +3456,7 @@ client_entrylk (call_frame_t *frame, gf_hdr_common_t *hdr = NULL; gf_fop_entrylk_req_t *req = NULL; size_t pathlen = 0; + size_t vollen = 0; size_t hdrlen = -1; int ret = -1; ino_t ino = 0; @@ -3455,19 +3468,21 @@ client_entrylk (call_frame_t *frame, STACK_WIND (frame, default_entrylk_cbk, conf->child, conf->child->fops->entrylk, - loc, name, cmd, type); + volume, loc, name, cmd, type); return 0; } pathlen = STRLEN_0(loc->path); + vollen = STRLEN_0(volume); + if (name) namelen = STRLEN_0(name); ino = this_ino_get (loc, this, GF_CLIENT_INODE_SELF); - hdrlen = gf_hdr_len (req, pathlen + namelen); - hdr = gf_hdr_new (req, pathlen + namelen); + hdrlen = gf_hdr_len (req, pathlen + vollen + namelen); + hdr = gf_hdr_new (req, pathlen + vollen + namelen); GF_VALIDATE_OR_GOTO(this->name, hdr, unwind); req = gf_param (hdr); @@ -3478,6 +3493,7 @@ client_entrylk (call_frame_t *frame, strcpy (req->path, loc->path); if (name) strcpy (req->name + pathlen, name); + strcpy (req->volume + pathlen + namelen, volume); req->cmd = hton32 (cmd); req->type = hton32 (type); @@ -3501,6 +3517,7 @@ unwind: int32_t client_fentrylk (call_frame_t *frame, xlator_t *this, + const char *volume, fd_t *fd, const char *name, entrylk_cmd cmd, @@ -3509,6 +3526,7 @@ client_fentrylk (call_frame_t *frame, gf_hdr_common_t *hdr = NULL; gf_fop_fentrylk_req_t *req = NULL; int64_t remote_fd = -1; + size_t vollen = 0; size_t namelen = 0; size_t hdrlen = -1; int ret = -1; @@ -3519,7 +3537,7 @@ client_fentrylk (call_frame_t *frame, STACK_WIND (frame, default_fentrylk_cbk, conf->child, conf->child->fops->fentrylk, - fd, name, cmd, type); + volume, fd, name, cmd, type); return 0; } @@ -3527,6 +3545,8 @@ client_fentrylk (call_frame_t *frame, if (name) namelen = STRLEN_0(name); + vollen = STRLEN_0(volume); + ret = this_fd_get (fd, this, &remote_fd); if (ret == -1) { gf_log (this->name, GF_LOG_DEBUG, @@ -3536,8 +3556,8 @@ client_fentrylk (call_frame_t *frame, return 0; } - hdrlen = gf_hdr_len (req, namelen); - hdr = gf_hdr_new (req, namelen); + hdrlen = gf_hdr_len (req, namelen + vollen); + hdr = gf_hdr_new (req, namelen + vollen); GF_VALIDATE_OR_GOTO(this->name, hdr, unwind); req = gf_param (hdr); @@ -3548,6 +3568,8 @@ client_fentrylk (call_frame_t *frame, if (name) strcpy (req->name, name); + strcpy (req->volume + namelen, volume); + req->cmd = hton32 (cmd); req->type = hton32 (type); |