diff options
| author | Amar Tumballi <amar@gluster.com> | 2010-07-23 03:13:48 +0000 | 
|---|---|---|
| committer | Anand V. Avati <avati@dev.gluster.com> | 2010-07-23 04:28:53 -0700 | 
| commit | dbab7f87b6fbcc4d1f518e6f98101331df51ce4a (patch) | |
| tree | b22ee90a8823f98f99d178185756ccac8a83e15e /xlators/protocol | |
| parent | 9c2753d1bee735cb74968106c7ce8ca1460504c6 (diff) | |
client protocol should send the fops only after handshake
Signed-off-by: Amar Tumballi <amar@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 1195 (crash in protocol server due to unauthenticated fop request..)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1195
Diffstat (limited to 'xlators/protocol')
| -rw-r--r-- | xlators/protocol/client/src/client-handshake.c | 9 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client.c | 17 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client.h | 1 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client3_1-fops.c | 411 | 
4 files changed, 313 insertions, 125 deletions
diff --git a/xlators/protocol/client/src/client-handshake.c b/xlators/protocol/client/src/client-handshake.c index 31690ef17b8..69035d458ba 100644 --- a/xlators/protocol/client/src/client-handshake.c +++ b/xlators/protocol/client/src/client-handshake.c @@ -188,6 +188,8 @@ client_start_ping (void *data)          ret = client_submit_request (this, NULL, frame, conf->handshake,                                       GF_HNDSK_PING, client_ping_cbk, NULL, NULL); +        if (ret) +                goto fail;          return;  fail: @@ -292,6 +294,7 @@ int32_t client3_getspec (call_frame_t *frame, xlator_t *this, void *data)          clnt_args_t    *args     = NULL;          gf_getspec_req  req      = {0,};          int             op_errno = ESTALE; +        int             ret      = 0;          if (!frame || !this || !data)                  goto unwind; @@ -301,9 +304,12 @@ int32_t client3_getspec (call_frame_t *frame, xlator_t *this, void *data)          req.flags = args->flags;          req.key   = (char *)args->name; -        client_submit_request (this, &req, frame, conf->handshake, GF_HNDSK_GETSPEC, +        ret = client_submit_request (this, &req, frame, conf->handshake, GF_HNDSK_GETSPEC,                                 client3_getspec_cbk, NULL, xdr_from_getspec_req); +        if (ret) +                goto unwind; +          return 0;  unwind:          STACK_UNWIND_STRICT (getspec, frame, -1, op_errno, NULL); @@ -475,6 +481,7 @@ client_setvolume_cbk (struct rpc_req *req, struct iovec *iov, int count, void *m          op_ret = 0;          conf->connecting = 0; +        conf->connected = 1;          /* TODO: more to test */          client_post_handshake (frame, frame->this); diff --git a/xlators/protocol/client/src/client.c b/xlators/protocol/client/src/client.c index 80a2d4d3461..97d9644342e 100644 --- a/xlators/protocol/client/src/client.c +++ b/xlators/protocol/client/src/client.c @@ -53,8 +53,19 @@ client_submit_request (xlator_t *this, void *req, call_frame_t *frame,          int           count      = 0;          char          new_iobref = 0, start_ping = 0; +        if (!this || !prog || !frame) +                goto out; +          conf = this->private; +        /* If 'setvolume' is not successful, we should not send frames to +           server, mean time we should be able to send 'DUMP' and 'SETVOLUME' +           call itself even if its not connected */ +        if (!(conf->connected || +              ((prog->prognum == GLUSTER_DUMP_PROGRAM) || +               ((prog->prognum == GLUSTER_HNDSK_PROGRAM) && (procnum == GF_HNDSK_SETVOLUME))))) +                goto out; +          iobuf = iobuf_get (this->ctx->iobuf_pool);          if (!iobuf) {                  goto out; @@ -102,11 +113,11 @@ client_submit_request (xlator_t *this, void *req, call_frame_t *frame,          ret = 0;  out: -        if (new_iobref) { +        if (new_iobref)                  iobref_unref (iobref); -        } -        iobuf_unref (iobuf); +        if (iobuf) +                iobuf_unref (iobuf);          return ret;  } diff --git a/xlators/protocol/client/src/client.h b/xlators/protocol/client/src/client.h index b6aff1fba9d..234df4e5f59 100644 --- a/xlators/protocol/client/src/client.h +++ b/xlators/protocol/client/src/client.h @@ -42,6 +42,7 @@ typedef struct clnt_conf {  	struct list_head       saved_fds;          pthread_mutex_t        lock;          int                    connecting; +        int                    connected;  	struct timeval         last_sent;  	struct timeval         last_received; diff --git a/xlators/protocol/client/src/client3_1-fops.c b/xlators/protocol/client/src/client3_1-fops.c index 3734c90955f..8c99a16093a 100644 --- a/xlators/protocol/client/src/client3_1-fops.c +++ b/xlators/protocol/client/src/client3_1-fops.c @@ -2061,25 +2061,28 @@ client_fdctx_destroy (xlator_t *this, clnt_fd_ctx_t *fdctx)                  gfs3_releasedir_req  req = {0,};                  req.fd = fdctx->remote_fd;                  req.gfs_id = GFS3_OP_RELEASEDIR; -                client_submit_request (this, &req, fr, &clnt3_1_fop_prog, -                                       GFS3_OP_RELEASEDIR, client3_1_releasedir_cbk, -                                       NULL, xdr_from_releasedir_req); +                ret = client_submit_request (this, &req, fr, &clnt3_1_fop_prog, +                                             GFS3_OP_RELEASEDIR, client3_1_releasedir_cbk, +                                             NULL, xdr_from_releasedir_req);          } else {                  gfs3_release_req  req = {0,};                  req.fd = fdctx->remote_fd;                  req.gfs_id = GFS3_OP_RELEASE; -                client_submit_request (this, &req, fr, &clnt3_1_fop_prog, -                                       GFS3_OP_RELEASE, client3_1_release_cbk, NULL, -                                       xdr_from_release_req); +                ret = client_submit_request (this, &req, fr, &clnt3_1_fop_prog, +                                             GFS3_OP_RELEASE, client3_1_release_cbk, NULL, +                                             xdr_from_release_req);          }  out: -        if (fdctx) { +        if (!ret && fdctx) {                  fdctx->remote_fd = -1;                  inode_unref (fdctx->inode);                  GF_FREE (fdctx);          } +        if (ret) +                STACK_DESTROY (fr->root); +          return ret;  } @@ -2255,8 +2258,10 @@ protocol_client_reopendir (xlator_t *this, clnt_fd_ctx_t *fdctx)          frame->local = local; local = NULL; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_OPENDIR, -                               client3_1_opendir_cbk, NULL, xdr_from_opendir_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_OPENDIR, +                                     client3_1_opendir_cbk, NULL, xdr_from_opendir_req); +        if (ret) +                goto out;          return ret; @@ -2325,8 +2330,10 @@ protocol_client_reopen (xlator_t *this, clnt_fd_ctx_t *fdctx)                  "attempting reopen on %s", local->loc.path);          local = NULL; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_OPEN, -                               client3_1_open_cbk, NULL, xdr_from_open_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_OPEN, +                                     client3_1_open_cbk, NULL, xdr_from_open_req); +        if (ret) +                goto out;          return ret; @@ -2357,6 +2364,7 @@ client3_1_releasedir (call_frame_t *frame, xlator_t *this,          clnt_args_t         *args = NULL;          gfs3_releasedir_req  req = {0,};          int64_t              remote_fd = -1; +        int                  ret = 0;          if (!frame || !this || !data)                  goto unwind; @@ -2386,15 +2394,17 @@ client3_1_releasedir (call_frame_t *frame, xlator_t *this,          if (remote_fd != -1) {                  req.fd = remote_fd;                  req.gfs_id = GFS3_OP_RELEASEDIR; -                client_submit_request (this, &req, frame, conf->fops, -                                       GFS3_OP_RELEASEDIR, client3_1_releasedir_cbk, -                                       NULL, xdr_from_releasedir_req); +                ret = client_submit_request (this, &req, frame, conf->fops, +                                             GFS3_OP_RELEASEDIR, client3_1_releasedir_cbk, +                                             NULL, xdr_from_releasedir_req);                  inode_unref (fdctx->inode);                  GF_FREE (fdctx);          } -        return 0;  unwind: +        if (ret) +                STACK_DESTROY (frame->root); +          return 0;  } @@ -2407,6 +2417,7 @@ client3_1_release (call_frame_t *frame, xlator_t *this,          clnt_fd_ctx_t    *fdctx     = NULL;          clnt_args_t      *args      = NULL;          gfs3_release_req  req       = {0,}; +        int               ret       = 0;          if (!frame || !this || !data)                  goto unwind; @@ -2436,14 +2447,16 @@ client3_1_release (call_frame_t *frame, xlator_t *this,          if (remote_fd != -1) {                  req.fd = remote_fd;                  req.gfs_id = GFS3_OP_RELEASE; -                client_submit_request (this, &req, frame, conf->fops, -                                       GFS3_OP_RELEASE, client3_1_release_cbk, NULL, -                                       xdr_from_release_req); +                ret = client_submit_request (this, &req, frame, conf->fops, +                                             GFS3_OP_RELEASE, client3_1_release_cbk, NULL, +                                             xdr_from_release_req);                  inode_unref (fdctx->inode);                  GF_FREE (fdctx);          } -        return 0;  unwind: +        if (ret) +                STACK_DESTROY (frame->root); +          return 0;  } @@ -2507,9 +2520,14 @@ client3_1_lookup (call_frame_t *frame, xlator_t *this,          req.dict.dict_len = dict_len;          req.gfs_id        = GFS3_OP_LOOKUP; -        client_submit_request (this, &req, frame, conf->fops, -                               GFS3_OP_LOOKUP, client3_1_lookup_cbk, -                               NULL, xdr_from_lookup_req); +        ret = client_submit_request (this, &req, frame, conf->fops, +                                     GFS3_OP_LOOKUP, client3_1_lookup_cbk, +                                     NULL, xdr_from_lookup_req); + +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          if (req.dict.dict_val) {                  GF_FREE (req.dict.dict_val); @@ -2561,8 +2579,12 @@ client3_1_stat (call_frame_t *frame, xlator_t *this,          req.gfs_id = GFS3_OP_STAT;          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_STAT, -                               client3_1_stat_cbk, NULL, xdr_from_stat_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_STAT, +                                     client3_1_stat_cbk, NULL, xdr_from_stat_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind: @@ -2600,9 +2622,12 @@ client3_1_truncate (call_frame_t *frame, xlator_t *this,          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_TRUNCATE, -                               client3_1_truncate_cbk, NULL, xdr_from_truncate_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_TRUNCATE, +                                     client3_1_truncate_cbk, NULL, xdr_from_truncate_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          STACK_UNWIND_STRICT (truncate, frame, -1, op_errno, NULL, NULL); @@ -2619,6 +2644,7 @@ client3_1_ftruncate (call_frame_t *frame, xlator_t *this,          clnt_conf_t        *conf     = NULL;          gfs3_ftruncate_req  req      = {0,};          int                 op_errno = EINVAL; +        int                 ret      = 0;          if (!frame || !this || !data)                  goto unwind; @@ -2652,9 +2678,12 @@ client3_1_ftruncate (call_frame_t *frame, xlator_t *this,          req.fd     = fdctx->remote_fd;          req.gfs_id = GFS3_OP_FTRUNCATE; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FTRUNCATE, -                               client3_1_ftruncate_cbk, NULL, xdr_from_ftruncate_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FTRUNCATE, +                                     client3_1_ftruncate_cbk, NULL, xdr_from_ftruncate_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          STACK_UNWIND_STRICT (ftruncate, frame, -1, op_errno, NULL, NULL); @@ -2692,8 +2721,12 @@ client3_1_access (call_frame_t *frame, xlator_t *this,          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_ACCESS, -                               client3_1_access_cbk, NULL, xdr_from_access_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_ACCESS, +                                     client3_1_access_cbk, NULL, xdr_from_access_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind: @@ -2729,8 +2762,12 @@ client3_1_readlink (call_frame_t *frame, xlator_t *this,          req.gfs_id = GFS3_OP_READLINK;          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_READLINK, -                               client3_1_readlink_cbk, NULL, xdr_from_readlink_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_READLINK, +                                     client3_1_readlink_cbk, NULL, xdr_from_readlink_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind: @@ -2769,9 +2806,12 @@ client3_1_unlink (call_frame_t *frame, xlator_t *this,          req.gfs_id = GFS3_OP_UNLINK;          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_UNLINK, -                               client3_1_unlink_cbk, NULL, xdr_from_unlink_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_UNLINK, +                                     client3_1_unlink_cbk, NULL, xdr_from_unlink_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          STACK_UNWIND_STRICT (unlink, frame, -1, op_errno, NULL, NULL); @@ -2808,9 +2848,12 @@ client3_1_rmdir (call_frame_t *frame, xlator_t *this,          req.gfs_id = GFS3_OP_RMDIR;          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_RMDIR, -                               client3_1_rmdir_cbk, NULL, xdr_from_rmdir_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_RMDIR, +                                     client3_1_rmdir_cbk, NULL, xdr_from_rmdir_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          STACK_UNWIND_STRICT (rmdir, frame, -1, op_errno, NULL, NULL); @@ -2859,9 +2902,12 @@ client3_1_symlink (call_frame_t *frame, xlator_t *this,          req.gfs_id = GFS3_OP_SYMLINK;          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_SYMLINK, -                               client3_1_symlink_cbk, NULL, xdr_from_symlink_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_SYMLINK, +                                     client3_1_symlink_cbk, NULL, xdr_from_symlink_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          if (frame) @@ -2919,9 +2965,12 @@ client3_1_rename (call_frame_t *frame, xlator_t *this,          req.gfs_id = GFS3_OP_RENAME;          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_RENAME, -                               client3_1_rename_cbk, NULL, xdr_from_rename_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_RENAME, +                                     client3_1_rename_cbk, NULL, xdr_from_rename_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          STACK_UNWIND_STRICT (rename, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL); @@ -2983,9 +3032,12 @@ client3_1_link (call_frame_t *frame, xlator_t *this,          req.gfs_id = GFS3_OP_LINK;          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_LINK, -                               client3_1_link_cbk, NULL, xdr_from_link_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_LINK, +                                     client3_1_link_cbk, NULL, xdr_from_link_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          STACK_UNWIND_STRICT (link, frame, -1, op_errno, NULL, NULL, NULL, NULL); @@ -3037,9 +3089,12 @@ client3_1_mknod (call_frame_t *frame, xlator_t *this,          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_MKNOD, -                               client3_1_mknod_cbk, NULL, xdr_from_mknod_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_MKNOD, +                                     client3_1_mknod_cbk, NULL, xdr_from_mknod_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          if (frame) @@ -3096,9 +3151,12 @@ client3_1_mkdir (call_frame_t *frame, xlator_t *this,          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_MKDIR, -                               client3_1_mkdir_cbk, NULL, xdr_from_mkdir_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_MKDIR, +                                     client3_1_mkdir_cbk, NULL, xdr_from_mkdir_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          if (frame) @@ -3156,9 +3214,12 @@ client3_1_create (call_frame_t *frame, xlator_t *this,          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_CREATE, -                               client3_1_create_cbk, NULL, xdr_from_create_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_CREATE, +                                     client3_1_create_cbk, NULL, xdr_from_create_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          if (frame) @@ -3214,9 +3275,12 @@ client3_1_open (call_frame_t *frame, xlator_t *this,          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_OPEN, -                               client3_1_open_cbk, NULL, xdr_from_open_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_OPEN, +                                     client3_1_open_cbk, NULL, xdr_from_open_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          if (frame) @@ -3240,6 +3304,7 @@ client3_1_readv (call_frame_t *frame, xlator_t *this,          clnt_conf_t   *conf     = NULL;          int            op_errno = ESTALE;          gfs3_read_req  req      = {0,}; +        int            ret        = 0;          if (!frame || !this || !data)                  goto unwind; @@ -3273,9 +3338,12 @@ client3_1_readv (call_frame_t *frame, xlator_t *this,          req.fd     = fdctx->remote_fd;          req.gfs_id = GFS3_OP_READ; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_READ, -                               client3_1_readv_cbk, NULL, xdr_from_readv_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_READ, +                                     client3_1_readv_cbk, NULL, xdr_from_readv_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          STACK_UNWIND_STRICT (readv, frame, -1, op_errno, NULL, 0, NULL, NULL); @@ -3291,6 +3359,7 @@ client3_1_writev (call_frame_t *frame, xlator_t *this, void *data)          clnt_conf_t    *conf     = NULL;          gfs3_write_req  req      = {0,};          int             op_errno = ESTALE; +        int             ret        = 0;          if (!frame || !this || !data)                  goto unwind; @@ -3324,10 +3393,12 @@ client3_1_writev (call_frame_t *frame, xlator_t *this, void *data)          req.fd     = fdctx->remote_fd;          req.gfs_id = GFS3_OP_WRITE; -        client_submit_vec_request (this, &req, frame, conf->fops, GFS3_OP_WRITE, -                                   client3_1_writev_cbk, -                                   args->vector, args->count, -                                   args->iobref, xdr_from_writev_req); +        ret = client_submit_vec_request (this, &req, frame, conf->fops, GFS3_OP_WRITE, +                                         client3_1_writev_cbk, +                                         args->vector, args->count, +                                         args->iobref, xdr_from_writev_req); +        if (ret) +                goto unwind;          return 0;  unwind: @@ -3346,6 +3417,7 @@ client3_1_flush (call_frame_t *frame, xlator_t *this,          clnt_fd_ctx_t  *fdctx    = NULL;          clnt_conf_t    *conf     = NULL;          int             op_errno = ESTALE; +        int             ret        = 0;          if (!frame || !this || !data)                  goto unwind; @@ -3377,9 +3449,12 @@ client3_1_flush (call_frame_t *frame, xlator_t *this,          req.fd = fdctx->remote_fd;          req.gfs_id = GFS3_OP_FLUSH; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FLUSH, -                               client3_1_flush_cbk, NULL, xdr_from_flush_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FLUSH, +                                     client3_1_flush_cbk, NULL, xdr_from_flush_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          STACK_UNWIND_STRICT (flush, frame, -1, op_errno); @@ -3397,6 +3472,7 @@ client3_1_fsync (call_frame_t *frame, xlator_t *this,          clnt_fd_ctx_t  *fdctx    = NULL;          clnt_conf_t    *conf     = NULL;          int             op_errno = 0; +        int           ret        = 0;          if (!frame || !this || !data)                  goto unwind; @@ -3429,9 +3505,12 @@ client3_1_fsync (call_frame_t *frame, xlator_t *this,          req.data = args->flags;          req.gfs_id = GFS3_OP_FSYNC; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FSYNC, -                               client3_1_fsync_cbk, NULL, xdr_from_fsync_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FSYNC, +                                     client3_1_fsync_cbk, NULL, xdr_from_fsync_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          STACK_UNWIND_STRICT (fsync, frame, -1, op_errno, NULL, NULL); @@ -3449,6 +3528,7 @@ client3_1_fstat (call_frame_t *frame, xlator_t *this,          clnt_fd_ctx_t  *fdctx    = NULL;          clnt_conf_t    *conf     = NULL;          int             op_errno = ESTALE; +        int           ret        = 0;          if (!frame || !this || !data)                  goto unwind; @@ -3480,9 +3560,12 @@ client3_1_fstat (call_frame_t *frame, xlator_t *this,          req.fd = fdctx->remote_fd;          req.gfs_id = GFS3_OP_FSTAT; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FSTAT, -                               client3_1_fstat_cbk, NULL, xdr_from_fstat_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FSTAT, +                                     client3_1_fstat_cbk, NULL, xdr_from_fstat_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          STACK_UNWIND_STRICT (fstat, frame, -1, op_errno, NULL); @@ -3529,9 +3612,12 @@ client3_1_opendir (call_frame_t *frame, xlator_t *this,          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_OPENDIR, -                               client3_1_opendir_cbk, NULL, xdr_from_opendir_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_OPENDIR, +                                     client3_1_opendir_cbk, NULL, xdr_from_opendir_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          if (frame) @@ -3552,6 +3638,7 @@ client3_1_fsyncdir (call_frame_t *frame, xlator_t *this, void *data)          clnt_conf_t       *conf     = NULL;          int                op_errno = ESTALE;          gfs3_fsyncdir_req  req      = {0,}; +        int                ret        = 0;          if (!frame || !this || !data)                  goto unwind; @@ -3586,9 +3673,12 @@ client3_1_fsyncdir (call_frame_t *frame, xlator_t *this, void *data)          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FSYNCDIR, -                               client3_1_fsyncdir_cbk, NULL, xdr_from_fsyncdir_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FSYNCDIR, +                                     client3_1_fsyncdir_cbk, NULL, xdr_from_fsyncdir_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          STACK_UNWIND_STRICT (fsyncdir, frame, -1, op_errno); @@ -3628,9 +3718,12 @@ client3_1_statfs (call_frame_t *frame, xlator_t *this,          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_STATFS, -                               client3_1_statfs_cbk, NULL, xdr_from_statfs_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_STATFS, +                                     client3_1_statfs_cbk, NULL, xdr_from_statfs_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:          STACK_UNWIND_STRICT (statfs, frame, -1, op_errno, NULL); @@ -3681,9 +3774,12 @@ client3_1_setxattr (call_frame_t *frame, xlator_t *this,          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_SETXATTR, -                               client3_1_setxattr_cbk, NULL, xdr_from_setxattr_req); - +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_SETXATTR, +                                     client3_1_setxattr_cbk, NULL, xdr_from_setxattr_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          if (req.dict.dict_val) {                  GF_FREE (req.dict.dict_val);          } @@ -3755,8 +3851,12 @@ client3_1_fsetxattr (call_frame_t *frame, xlator_t *this,                  req.dict.dict_len = dict_len;          } -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FSETXATTR, -                               client3_1_fsetxattr_cbk, NULL, xdr_from_fsetxattr_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FSETXATTR, +                                     client3_1_fsetxattr_cbk, NULL, xdr_from_fsetxattr_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          if (req.dict.dict_val) {                  GF_FREE (req.dict.dict_val); @@ -3783,6 +3883,7 @@ client3_1_fgetxattr (call_frame_t *frame, xlator_t *this,          clnt_conf_t        *conf     = NULL;          gfs3_fgetxattr_req  req      = {0,};          int                 op_errno = ESTALE; +        int           ret        = 0;          if (!frame || !this || !data)                  goto unwind; @@ -3820,8 +3921,12 @@ client3_1_fgetxattr (call_frame_t *frame, xlator_t *this,          }          req.gfs_id = GFS3_OP_FGETXATTR; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FGETXATTR, -                               client3_1_fgetxattr_cbk, NULL, xdr_from_fgetxattr_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FGETXATTR, +                                     client3_1_fgetxattr_cbk, NULL, xdr_from_fgetxattr_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind: @@ -3866,8 +3971,12 @@ client3_1_getxattr (call_frame_t *frame, xlator_t *this,          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_GETXATTR, -                               client3_1_getxattr_cbk, NULL, xdr_from_getxattr_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_GETXATTR, +                                     client3_1_getxattr_cbk, NULL, xdr_from_getxattr_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind: @@ -3919,8 +4028,12 @@ client3_1_xattrop (call_frame_t *frame, xlator_t *this,          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_XATTROP, -                               client3_1_xattrop_cbk, NULL, xdr_from_xattrop_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_XATTROP, +                                     client3_1_xattrop_cbk, NULL, xdr_from_xattrop_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          if (req.dict.dict_val) {                  GF_FREE (req.dict.dict_val); @@ -3992,8 +4105,13 @@ client3_1_fxattrop (call_frame_t *frame, xlator_t *this,                  req.dict.dict_len = dict_len;          } -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FXATTROP, -                               client3_1_fxattrop_cbk, NULL, xdr_from_fxattrop_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FXATTROP, +                                     client3_1_fxattrop_cbk, NULL, xdr_from_fxattrop_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        } +          if (req.dict.dict_val) {                  GF_FREE (req.dict.dict_val);          } @@ -4038,8 +4156,12 @@ client3_1_removexattr (call_frame_t *frame, xlator_t *this,          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_REMOVEXATTR, -                               client3_1_removexattr_cbk, NULL, xdr_from_removexattr_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_REMOVEXATTR, +                                     client3_1_removexattr_cbk, NULL, xdr_from_removexattr_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind: @@ -4059,6 +4181,7 @@ client3_1_lk (call_frame_t *frame, xlator_t *this,          clnt_fd_ctx_t *fdctx    = NULL;          clnt_conf_t   *conf     = NULL;          int            op_errno = ESTALE; +        int           ret        = 0;          if (!frame || !this || !data)                  goto unwind; @@ -4117,8 +4240,12 @@ client3_1_lk (call_frame_t *frame, xlator_t *this,          gf_flock_from_flock (&req.flock, args->flock);          req.gfs_id = GFS3_OP_LK; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_LK, -                               client3_1_lk_cbk, NULL, xdr_from_lk_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_LK, +                                     client3_1_lk_cbk, NULL, xdr_from_lk_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind: @@ -4186,8 +4313,12 @@ client3_1_inodelk (call_frame_t *frame, xlator_t *this,          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_INODELK, -                               client3_1_inodelk_cbk, NULL, xdr_from_inodelk_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_INODELK, +                                     client3_1_inodelk_cbk, NULL, xdr_from_inodelk_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind: @@ -4208,6 +4339,7 @@ client3_1_finodelk (call_frame_t *frame, xlator_t *this,          clnt_fd_ctx_t     *fdctx    = NULL;          clnt_conf_t       *conf     = NULL;          int                op_errno = ESTALE; +        int           ret        = 0;          if (!frame || !this || !data)                  goto unwind; @@ -4267,8 +4399,12 @@ client3_1_finodelk (call_frame_t *frame, xlator_t *this,          gf_flock_from_flock (&req.flock, args->flock);          req.gfs_id = GFS3_OP_FINODELK; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FINODELK, -                               client3_1_finodelk_cbk, NULL, xdr_from_finodelk_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FINODELK, +                                     client3_1_finodelk_cbk, NULL, xdr_from_finodelk_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind: @@ -4313,8 +4449,12 @@ client3_1_entrylk (call_frame_t *frame, xlator_t *this,          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_ENTRYLK, -                               client3_1_entrylk_cbk, NULL, xdr_from_entrylk_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_ENTRYLK, +                                     client3_1_entrylk_cbk, NULL, xdr_from_entrylk_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind: @@ -4333,6 +4473,7 @@ client3_1_fentrylk (call_frame_t *frame, xlator_t *this,          clnt_fd_ctx_t     *fdctx    = NULL;          clnt_conf_t       *conf     = NULL;          int                op_errno = ESTALE; +        int           ret        = 0;          if (!frame || !this || !data)                  goto unwind; @@ -4372,8 +4513,12 @@ client3_1_fentrylk (call_frame_t *frame, xlator_t *this,          }          req.gfs_id = GFS3_OP_FENTRYLK; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FENTRYLK, -                               client3_1_fentrylk_cbk, NULL, xdr_from_fentrylk_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FENTRYLK, +                                     client3_1_fentrylk_cbk, NULL, xdr_from_fentrylk_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind: @@ -4391,6 +4536,7 @@ client3_1_rchecksum (call_frame_t *frame, xlator_t *this,          clnt_conf_t        *conf     = NULL;          gfs3_rchecksum_req  req      = {0,};          int                 op_errno = ESTALE; +        int                 ret        = 0;          if (!frame || !this || !data)                  goto unwind; @@ -4424,8 +4570,12 @@ client3_1_rchecksum (call_frame_t *frame, xlator_t *this,          req.fd     = fdctx->remote_fd;          req.gfs_id = GFS3_OP_RCHECKSUM; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_RCHECKSUM, -                               client3_1_rchecksum_cbk, NULL, xdr_from_rchecksum_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_RCHECKSUM, +                                     client3_1_rchecksum_cbk, NULL, xdr_from_rchecksum_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind: @@ -4444,6 +4594,7 @@ client3_1_readdir (call_frame_t *frame, xlator_t *this,          clnt_conf_t      *conf     = NULL;          gfs3_readdir_req  req      = {0,};          int               op_errno = ESTALE; +        int               ret        = 0;          if (!frame || !this || !data)                  goto unwind; @@ -4477,8 +4628,12 @@ client3_1_readdir (call_frame_t *frame, xlator_t *this,          req.fd = fdctx->remote_fd;          req.gfs_id = GFS3_OP_READDIR; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_READDIR, -                               client3_1_readdir_cbk, NULL, xdr_from_readdir_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_READDIR, +                                     client3_1_readdir_cbk, NULL, xdr_from_readdir_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind: @@ -4496,6 +4651,7 @@ client3_1_readdirp (call_frame_t *frame, xlator_t *this,          clnt_fd_ctx_t     *fdctx    = NULL;          clnt_conf_t       *conf     = NULL;          int                op_errno = ESTALE; +        int                ret        = 0;          if (!frame || !this || !data)                  goto unwind; @@ -4529,8 +4685,12 @@ client3_1_readdirp (call_frame_t *frame, xlator_t *this,          req.fd = fdctx->remote_fd;          req.gfs_id = GFS3_OP_READDIRP; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_READDIRP, -                               client3_1_readdirp_cbk, NULL, xdr_from_readdirp_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_READDIRP, +                                     client3_1_readdirp_cbk, NULL, xdr_from_readdirp_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind: @@ -4570,8 +4730,12 @@ client3_1_setattr (call_frame_t *frame, xlator_t *this,          conf = this->private; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_SETATTR, -                               client3_1_setattr_cbk, NULL, xdr_from_setattr_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_SETATTR, +                                     client3_1_setattr_cbk, NULL, xdr_from_setattr_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind: @@ -4587,6 +4751,7 @@ client3_1_fsetattr (call_frame_t *frame, xlator_t *this, void *data)          clnt_conf_t       *conf     = NULL;          gfs3_fsetattr_req  req      = {0,};          int                op_errno = ESTALE; +        int                ret        = 0;          if (!frame || !this || !data)                  goto unwind; @@ -4620,8 +4785,12 @@ client3_1_fsetattr (call_frame_t *frame, xlator_t *this, void *data)          gf_stat_from_iatt (&req.stbuf, args->stbuf);          req.gfs_id = GFS3_OP_FSETATTR; -        client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FSETATTR, -                               client3_1_fsetattr_cbk, NULL, xdr_from_fsetattr_req); +        ret = client_submit_request (this, &req, frame, conf->fops, GFS3_OP_FSETATTR, +                                     client3_1_fsetattr_cbk, NULL, xdr_from_fsetattr_req); +        if (ret) { +                op_errno = ENOTCONN; +                goto unwind; +        }          return 0;  unwind:  | 
