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);  | 
