diff options
| -rw-r--r-- | xlators/protocol/client/src/client.h | 9 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client3_1-fops.c | 46 | 
2 files changed, 31 insertions, 24 deletions
diff --git a/xlators/protocol/client/src/client.h b/xlators/protocol/client/src/client.h index 00b743a3c..2dda451c9 100644 --- a/xlators/protocol/client/src/client.h +++ b/xlators/protocol/client/src/client.h @@ -35,7 +35,7 @@  #define CLIENT_CMD_DISCONNECT "trusted.glusterfs.client-disconnect"  #define CLIENT_DUMP_LOCKS     "trusted.glusterfs.clientlk-dump" -#define CLIENT_GET_REMOTE_FD(conf, fd, remote_fd, label)                \ +#define CLIENT_GET_REMOTE_FD(conf, fd, remote_fd, op_errno, label)      \          do {                                                            \                  clnt_fd_ctx_t      *fdctx    = NULL;                    \                  pthread_mutex_lock (&conf->lock);                       \ @@ -48,6 +48,13 @@                  } else {                                                \                          remote_fd = fdctx->remote_fd;                   \                  }                                                       \ +                if (remote_fd == -1) {                                  \ +                        gf_log (THIS->name, GF_LOG_WARNING, " (%s) "    \ +                                "remote_fd is -1. EBADFD",              \ +                                uuid_utoa (fd->inode->gfid));           \ +                        op_errno = EBADFD;                              \ +                        goto label;                                     \ +                }                                                       \          } while (0);  struct clnt_options { diff --git a/xlators/protocol/client/src/client3_1-fops.c b/xlators/protocol/client/src/client3_1-fops.c index 0a89127b9..56816e9b5 100644 --- a/xlators/protocol/client/src/client3_1-fops.c +++ b/xlators/protocol/client/src/client3_1-fops.c @@ -2638,10 +2638,10 @@ client3_1_lookup (call_frame_t *frame, xlator_t *this,          }          req.path          = (char *)args->loc->path; -	if (args->loc->name) -	        req.bname         = (char *)args->loc->name; -	else -		req.bname = ""; +        if (args->loc->name) +                req.bname         = (char *)args->loc->name; +        else +                req.bname = "";          req.dict.dict_len = dict_len;          ret = client_submit_request (this, &req, frame, conf->fops, @@ -2804,7 +2804,7 @@ client3_1_ftruncate (call_frame_t *frame, xlator_t *this,          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          req.offset = args->offset;          req.fd     = remote_fd; @@ -3568,7 +3568,7 @@ client3_1_readv (call_frame_t *frame, xlator_t *this,          args = data;          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          req.size   = args->size;          req.offset = args->offset; @@ -3656,7 +3656,7 @@ client3_1_writev (call_frame_t *frame, xlator_t *this, void *data)          args = data;          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          req.size   = args->size;          req.offset = args->offset; @@ -3703,7 +3703,7 @@ client3_1_flush (call_frame_t *frame, xlator_t *this,          args = data;          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          conf = this->private; @@ -3755,7 +3755,7 @@ client3_1_fsync (call_frame_t *frame, xlator_t *this,          args = data;          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          req.fd   = remote_fd;          req.data = args->flags; @@ -3795,7 +3795,7 @@ client3_1_fstat (call_frame_t *frame, xlator_t *this,          args = data;          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          req.fd = remote_fd;          memcpy (req.gfid, args->fd->inode->gfid, 16); @@ -3893,7 +3893,7 @@ client3_1_fsyncdir (call_frame_t *frame, xlator_t *this, void *data)          args = data;          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          req.fd   = remote_fd;          req.data = args->flags; @@ -3943,7 +3943,7 @@ client3_1_statfs (call_frame_t *frame, xlator_t *this,                  else                          memcpy (req.gfid, args->loc->gfid, 16);          } else -		req.gfid[15] = 1; +                req.gfid[15] = 1;          GF_ASSERT_AND_GOTO_WITH_ERROR (this->name,                                         !uuid_is_null (*((uuid_t*)req.gfid)), @@ -4055,7 +4055,7 @@ client3_1_fsetxattr (call_frame_t *frame, xlator_t *this,          args = data;          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          req.fd    = remote_fd;          req.flags = args->flags; @@ -4122,7 +4122,7 @@ client3_1_fgetxattr (call_frame_t *frame, xlator_t *this,          args = data;          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          local = GF_CALLOC (1, sizeof (*local),                             gf_client_mt_clnt_local_t); @@ -4481,7 +4481,7 @@ client3_1_fxattrop (call_frame_t *frame, xlator_t *this,          args = data;          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          req.fd     = remote_fd;          req.flags  = args->flags; @@ -4690,7 +4690,7 @@ client3_1_lk (call_frame_t *frame, xlator_t *this,                  goto unwind;          } -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          ret = client_cmd_to_gf_cmd (args->cmd, &gf_cmd);          if (ret) { @@ -4838,7 +4838,7 @@ client3_1_finodelk (call_frame_t *frame, xlator_t *this,          args = data;          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          if (args->cmd == F_GETLK || args->cmd == F_GETLK64)                  gf_cmd = GF_LK_GETLK; @@ -4963,7 +4963,7 @@ client3_1_fentrylk (call_frame_t *frame, xlator_t *this,          args = data;          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          req.fd  = remote_fd;          req.cmd = args->cmd_entrylk; @@ -5011,7 +5011,7 @@ client3_1_rchecksum (call_frame_t *frame, xlator_t *this,          args = data;          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          req.len    = args->len;          req.offset = args->offset; @@ -5053,7 +5053,7 @@ client3_1_readdir (call_frame_t *frame, xlator_t *this,          struct iobuf     *rsp_iobuf  = NULL;          struct iovec     *rsphdr     = NULL;          struct iovec      vector[MAX_IOVEC] = {{0}, }; -        int               readdir_rsp_size  = 0;  +        int               readdir_rsp_size  = 0;          if (!frame || !this || !data)                  goto unwind; @@ -5061,7 +5061,7 @@ client3_1_readdir (call_frame_t *frame, xlator_t *this,          args = data;          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          readdir_rsp_size = xdr_sizeof ((xdrproc_t) xdr_gfs3_readdir_rsp, &rsp)                  + args->size; @@ -5163,7 +5163,7 @@ client3_1_readdirp (call_frame_t *frame, xlator_t *this,          args = data;          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          readdirp_rsp_size = xdr_sizeof ((xdrproc_t) xdr_gfs3_readdirp_rsp, &rsp)                  + args->size; @@ -5317,7 +5317,7 @@ client3_1_fsetattr (call_frame_t *frame, xlator_t *this, void *data)          args = data;          conf = this->private; -        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, unwind); +        CLIENT_GET_REMOTE_FD(conf, args->fd, remote_fd, op_errno, unwind);          req.fd = remote_fd;          req.valid = args->valid;  | 
