diff options
Diffstat (limited to 'xlators/protocol')
| -rw-r--r-- | xlators/protocol/client/src/client-handshake.c | 1 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client-lk.c | 14 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client.c | 233 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client.h | 6 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client3_1-fops.c | 1237 | ||||
| -rw-r--r-- | xlators/protocol/server/src/server-helpers.c | 19 | ||||
| -rw-r--r-- | xlators/protocol/server/src/server-resolve.c | 5 | ||||
| -rw-r--r-- | xlators/protocol/server/src/server.h | 3 | ||||
| -rw-r--r-- | xlators/protocol/server/src/server3_1-fops.c | 1429 | 
9 files changed, 2188 insertions, 759 deletions
diff --git a/xlators/protocol/client/src/client-handshake.c b/xlators/protocol/client/src/client-handshake.c index 0a8759af5..944b9ca80 100644 --- a/xlators/protocol/client/src/client-handshake.c +++ b/xlators/protocol/client/src/client-handshake.c @@ -1202,7 +1202,6 @@ protocol_client_reopen (xlator_t *this, clnt_fd_ctx_t *fdctx)          memcpy (req.gfid, inode->gfid, 16);          req.flags    = gf_flags_from_flags (fdctx->flags); -        req.wbflags  = fdctx->wbflags;          gf_log (frame->this->name, GF_LOG_DEBUG,                  "attempting reopen on %s", local->loc.path); diff --git a/xlators/protocol/client/src/client-lk.c b/xlators/protocol/client/src/client-lk.c index 4e87f7fcd..76f78b846 100644 --- a/xlators/protocol/client/src/client-lk.c +++ b/xlators/protocol/client/src/client-lk.c @@ -621,7 +621,7 @@ client_remove_reserve_lock_cbk (call_frame_t *frame,                                  xlator_t *this,                                  int32_t op_ret,                                  int32_t op_errno, -                                struct gf_flock *lock) +                                struct gf_flock *lock, dict_t *xdata)  {          clnt_local_t *local = NULL;          clnt_conf_t  *conf  = NULL; @@ -667,7 +667,7 @@ client_remove_reserve_lock (xlator_t *this, call_frame_t *frame,          STACK_WIND (frame, client_remove_reserve_lock_cbk,                      this, this->fops->lk, -                    lock->fd, F_RESLK_UNLCK, &unlock); +                    lock->fd, F_RESLK_UNLCK, &unlock, NULL);  }  static client_posix_lock_t * @@ -699,7 +699,7 @@ client_reserve_lock_cbk (call_frame_t *frame,                           xlator_t *this,                           int32_t op_ret,                           int32_t op_errno, -                         struct gf_flock *lock) +                         struct gf_flock *lock, dict_t *xdata)  {          clnt_local_t *local = NULL; @@ -755,7 +755,7 @@ client_recovery_lock_cbk (call_frame_t *frame,                            xlator_t *this,                            int32_t op_ret,                            int32_t op_errno, -                          struct gf_flock *lock) +                          struct gf_flock *lock, dict_t *xdata)  {          clnt_local_t *local = NULL;          clnt_fd_ctx_t *fdctx = NULL; @@ -795,7 +795,7 @@ client_recovery_lock_cbk (call_frame_t *frame,                  STACK_WIND (frame, client_reserve_lock_cbk,                              this, this->fops->lk, -                            next_lock->fd, F_RESLK_LCK, &reserve_flock); +                            next_lock->fd, F_RESLK_LCK, &reserve_flock, NULL);                  goto out;          } @@ -832,7 +832,7 @@ client_send_recovery_lock (call_frame_t *frame, xlator_t *this,          STACK_WIND (frame, client_recovery_lock_cbk,                      this, this->fops->lk,                      lock->fd, F_SETLK, -                    &(lock->user_flock)); +                    &(lock->user_flock), NULL);          return 0;  } @@ -896,7 +896,7 @@ client_attempt_lock_recovery (xlator_t *this, clnt_fd_ctx_t *fdctx)          STACK_WIND (frame, client_reserve_lock_cbk,                      this, this->fops->lk, -                    lock->fd, F_RESLK_LCK, &reserve_flock); +                    lock->fd, F_RESLK_LCK, &reserve_flock, NULL);  out:          return ret; diff --git a/xlators/protocol/client/src/client.c b/xlators/protocol/client/src/client.c index 82d90d257..0f55ca86e 100644 --- a/xlators/protocol/client/src/client.c +++ b/xlators/protocol/client/src/client.c @@ -349,7 +349,7 @@ out:  int32_t  client_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, -               dict_t *xattr_req) +               dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -361,7 +361,7 @@ client_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc,                  goto out;          args.loc = loc; -        args.dict = xattr_req; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_LOOKUP];          if (!proc) { @@ -383,7 +383,7 @@ out:  int32_t -client_stat (call_frame_t *frame, xlator_t *this, loc_t *loc) +client_stat (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -395,6 +395,7 @@ client_stat (call_frame_t *frame, xlator_t *this, loc_t *loc)                  goto out;          args.loc = loc; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_STAT];          if (!proc) { @@ -407,14 +408,15 @@ client_stat (call_frame_t *frame, xlator_t *this, loc_t *loc)                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (stat, frame, -1, ENOTCONN, NULL); +                STACK_UNWIND_STRICT (stat, frame, -1, ENOTCONN, NULL, NULL);  	return 0;  }  int32_t -client_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset) +client_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, +                 off_t offset, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -427,6 +429,7 @@ client_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset)          args.loc    = loc;          args.offset = offset; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_TRUNCATE];          if (!proc) { @@ -439,7 +442,7 @@ client_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset)                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (truncate, frame, -1, ENOTCONN, NULL, NULL); +                STACK_UNWIND_STRICT (truncate, frame, -1, ENOTCONN, NULL, NULL, NULL);  	return 0; @@ -447,7 +450,8 @@ out:  int32_t -client_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset) +client_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, +                  off_t offset, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -460,6 +464,7 @@ client_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset)          args.fd     = fd;          args.offset = offset; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_FTRUNCATE];          if (!proc) { @@ -472,7 +477,7 @@ client_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset)                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (ftruncate, frame, -1, ENOTCONN, NULL, NULL); +                STACK_UNWIND_STRICT (ftruncate, frame, -1, ENOTCONN, NULL, NULL, NULL);  	return 0;  } @@ -480,7 +485,8 @@ out:  int32_t -client_access (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask) +client_access (call_frame_t *frame, xlator_t *this, loc_t *loc, +               int32_t mask, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -493,6 +499,7 @@ client_access (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask)          args.loc  = loc;          args.mask = mask; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_ACCESS];          if (!proc) { @@ -505,7 +512,7 @@ client_access (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask)                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (access, frame, -1, ENOTCONN); +                STACK_UNWIND_STRICT (access, frame, -1, ENOTCONN, NULL);  	return 0;  } @@ -514,7 +521,8 @@ out:  int32_t -client_readlink (call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size) +client_readlink (call_frame_t *frame, xlator_t *this, loc_t *loc, +                 size_t size, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -527,6 +535,7 @@ client_readlink (call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size)          args.loc  = loc;          args.size = size; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_READLINK];          if (!proc) { @@ -539,7 +548,7 @@ client_readlink (call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size)                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (readlink, frame, -1, ENOTCONN, NULL, NULL); +                STACK_UNWIND_STRICT (readlink, frame, -1, ENOTCONN, NULL, NULL, NULL);  	return 0;  } @@ -547,7 +556,7 @@ out:  int  client_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode, -              dev_t rdev, dict_t *params) +              dev_t rdev, mode_t umask, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -561,7 +570,8 @@ client_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,          args.loc  = loc;          args.mode = mode;          args.rdev = rdev; -        args.dict = params; +        args.umask = umask; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_MKNOD];          if (!proc) { @@ -575,7 +585,7 @@ client_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,  out:          if (ret)                  STACK_UNWIND_STRICT (mknod, frame, -1, ENOTCONN, -                                     NULL, NULL, NULL, NULL); +                                     NULL, NULL, NULL, NULL, NULL);  	return 0;  } @@ -583,7 +593,7 @@ out:  int  client_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, -              mode_t mode, dict_t *params) +              mode_t mode, mode_t umask, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -596,7 +606,8 @@ client_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc,          args.loc  = loc;          args.mode = mode; -        args.dict = params; +        args.umask = umask; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_MKDIR];          if (!proc) { @@ -610,7 +621,7 @@ client_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc,  out:          if (ret)                  STACK_UNWIND_STRICT (mkdir, frame, -1, ENOTCONN, -                                     NULL, NULL, NULL, NULL); +                                     NULL, NULL, NULL, NULL, NULL);  	return 0;  } @@ -618,7 +629,8 @@ out:  int32_t -client_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc) +client_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc, +               int xflag, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -630,6 +642,8 @@ client_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)                  goto out;          args.loc = loc; +        args.xdata = xdata; +        args.flags = xflag;          proc = &conf->fops->proctable[GF_FOP_UNLINK];          if (!proc) { @@ -643,13 +657,14 @@ client_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)  out:          if (ret)                  STACK_UNWIND_STRICT (unlink, frame, -1, ENOTCONN, -                                     NULL, NULL); +                                     NULL, NULL, NULL);  	return 0;  }  int32_t -client_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags) +client_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags, +              dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -662,6 +677,7 @@ client_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags)          args.loc = loc;          args.flags = flags; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_RMDIR];          if (!proc) { @@ -676,7 +692,7 @@ out:          /* think of avoiding a missing frame */          if (ret)                  STACK_UNWIND_STRICT (rmdir, frame, -1, ENOTCONN, -                                     NULL, NULL); +                                     NULL, NULL, NULL);  	return 0;  } @@ -684,7 +700,7 @@ out:  int  client_symlink (call_frame_t *frame, xlator_t *this, const char *linkpath, -                loc_t *loc, dict_t *params) +                loc_t *loc, mode_t umask, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -697,7 +713,8 @@ client_symlink (call_frame_t *frame, xlator_t *this, const char *linkpath,          args.linkname = linkpath;          args.loc      = loc; -        args.dict     = params; +        args.umask    = umask; +        args.xdata    = xdata;          proc = &conf->fops->proctable[GF_FOP_SYMLINK];          if (!proc) { @@ -711,7 +728,7 @@ client_symlink (call_frame_t *frame, xlator_t *this, const char *linkpath,  out:          if (ret)                  STACK_UNWIND_STRICT (symlink, frame, -1, ENOTCONN, -                                     NULL, NULL, NULL, NULL); +                                     NULL, NULL, NULL, NULL, NULL);  	return 0;  } @@ -720,7 +737,7 @@ out:  int32_t  client_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc, -               loc_t *newloc) +               loc_t *newloc, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -733,6 +750,8 @@ client_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc,          args.oldloc = oldloc;          args.newloc = newloc; +        args.xdata  = xdata; +          proc = &conf->fops->proctable[GF_FOP_RENAME];          if (!proc) {                  gf_log (this->name, GF_LOG_ERROR, @@ -745,7 +764,7 @@ client_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc,  out:          if (ret)                  STACK_UNWIND_STRICT (rename, frame, -1, ENOTCONN, -                                     NULL, NULL, NULL, NULL, NULL); +                                     NULL, NULL, NULL, NULL, NULL, NULL);  	return 0;  } @@ -754,7 +773,7 @@ out:  int32_t  client_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, -             loc_t *newloc) +             loc_t *newloc, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -767,6 +786,7 @@ client_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc,          args.oldloc = oldloc;          args.newloc = newloc; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_LINK];          if (!proc) { @@ -780,7 +800,7 @@ client_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc,  out:          if (ret)                  STACK_UNWIND_STRICT (link, frame, -1, ENOTCONN, -                                     NULL, NULL, NULL, NULL); +                                     NULL, NULL, NULL, NULL, NULL);  	return 0;  } @@ -788,8 +808,8 @@ out:  int32_t -client_create (call_frame_t *frame, xlator_t *this, loc_t *loc, -               int32_t flags, mode_t mode, fd_t *fd, dict_t *params) +client_create (call_frame_t *frame, xlator_t *this, loc_t *loc,  int32_t flags, +               mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -804,7 +824,8 @@ client_create (call_frame_t *frame, xlator_t *this, loc_t *loc,          args.flags = flags;          args.mode = mode;          args.fd = fd; -        args.dict = params; +        args.umask = umask; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_CREATE];          if (!proc) { @@ -818,7 +839,7 @@ client_create (call_frame_t *frame, xlator_t *this, loc_t *loc,  out:          if (ret)                  STACK_UNWIND_STRICT (create, frame, -1, ENOTCONN, -                                     NULL, NULL, NULL, NULL, NULL); +                                     NULL, NULL, NULL, NULL, NULL, NULL);  	return 0;  } @@ -827,7 +848,7 @@ out:  int32_t  client_open (call_frame_t *frame, xlator_t *this, loc_t *loc, -             int32_t flags, fd_t *fd, int32_t wbflags) +             int32_t flags, fd_t *fd, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -841,7 +862,7 @@ client_open (call_frame_t *frame, xlator_t *this, loc_t *loc,          args.loc = loc;          args.flags = flags;          args.fd = fd; -        args.wbflags = wbflags; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_OPEN];          if (!proc) { @@ -855,7 +876,7 @@ client_open (call_frame_t *frame, xlator_t *this, loc_t *loc,  out:          if (ret) -                STACK_UNWIND_STRICT (open, frame, -1, ENOTCONN, NULL); +                STACK_UNWIND_STRICT (open, frame, -1, ENOTCONN, NULL, NULL);  	return 0;  } @@ -864,7 +885,7 @@ out:  int32_t  client_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, -              off_t offset, uint32_t flags) +              off_t offset, uint32_t flags, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -879,6 +900,7 @@ client_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,          args.size   = size;          args.offset = offset;          args.flags  = flags; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_READ];          if (!proc) { @@ -893,7 +915,7 @@ client_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,  out:          if (ret)                  STACK_UNWIND_STRICT (readv, frame, -1, ENOTCONN, -                                     NULL, 0, NULL, NULL); +                                     NULL, 0, NULL, NULL, NULL);  	return 0;  } @@ -904,7 +926,7 @@ out:  int32_t  client_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,                 struct iovec *vector, int32_t count, off_t off, -               uint32_t flags, struct iobref *iobref) +               uint32_t flags, struct iobref *iobref, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -921,6 +943,7 @@ client_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,          args.offset = off;          args.flags  = flags;          args.iobref = iobref; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_WRITE];          if (!proc) { @@ -933,14 +956,14 @@ client_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (writev, frame, -1, ENOTCONN, NULL, NULL); +                STACK_UNWIND_STRICT (writev, frame, -1, ENOTCONN, NULL, NULL, NULL);  	return 0;  }  int32_t -client_flush (call_frame_t *frame, xlator_t *this, fd_t *fd) +client_flush (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -952,6 +975,7 @@ client_flush (call_frame_t *frame, xlator_t *this, fd_t *fd)                  goto out;          args.fd = fd; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_FLUSH];          if (!proc) { @@ -964,7 +988,7 @@ client_flush (call_frame_t *frame, xlator_t *this, fd_t *fd)                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (flush, frame, -1, ENOTCONN); +                STACK_UNWIND_STRICT (flush, frame, -1, ENOTCONN, NULL);  	return 0;  } @@ -973,7 +997,7 @@ out:  int32_t  client_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, -              int32_t flags) +              int32_t flags, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -986,6 +1010,7 @@ client_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd,          args.fd    = fd;          args.flags = flags; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_FSYNC];          if (!proc) { @@ -998,7 +1023,7 @@ client_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (fsync, frame, -1, ENOTCONN, NULL, NULL); +                STACK_UNWIND_STRICT (fsync, frame, -1, ENOTCONN, NULL, NULL, NULL);  	return 0;  } @@ -1006,7 +1031,7 @@ out:  int32_t -client_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd) +client_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1018,6 +1043,7 @@ client_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd)                  goto out;          args.fd = fd; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_FSTAT];          if (!proc) { @@ -1030,7 +1056,7 @@ client_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd)                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (fstat, frame, -1, ENOTCONN, NULL); +                STACK_UNWIND_STRICT (fstat, frame, -1, ENOTCONN, NULL, NULL);  	return 0;  } @@ -1038,7 +1064,8 @@ out:  int32_t -client_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd) +client_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd, +                dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1051,6 +1078,7 @@ client_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd)          args.loc = loc;          args.fd  = fd; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_OPENDIR];          if (!proc) { @@ -1063,7 +1091,7 @@ client_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd)                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (opendir, frame, -1, ENOTCONN, NULL); +                STACK_UNWIND_STRICT (opendir, frame, -1, ENOTCONN, NULL, NULL);  	return 0;  } @@ -1071,7 +1099,7 @@ out:  int32_t -client_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags) +client_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1084,6 +1112,7 @@ client_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags)          args.fd    = fd;          args.flags = flags; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_FSYNCDIR];          if (!proc) { @@ -1096,7 +1125,7 @@ client_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags)                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (fsyncdir, frame, -1, ENOTCONN); +                STACK_UNWIND_STRICT (fsyncdir, frame, -1, ENOTCONN, NULL);  	return 0;  } @@ -1104,7 +1133,7 @@ out:  int32_t -client_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc) +client_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1116,6 +1145,7 @@ client_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc)                  goto out;          args.loc = loc; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_STATFS];          if (!proc) { @@ -1128,7 +1158,7 @@ client_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc)                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (statfs, frame, -1, ENOTCONN, NULL); +                STACK_UNWIND_STRICT (statfs, frame, -1, ENOTCONN, NULL, NULL);  	return 0;  } @@ -1254,7 +1284,7 @@ out:  int32_t  client_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict, -                 int32_t flags) +                 int32_t flags, dict_t *xdata)  {          int                   ret         = -1;          int                   op_ret      = -1; @@ -1302,8 +1332,9 @@ client_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,          }          args.loc   = loc; -        args.dict  = dict; +        args.xattr = dict;          args.flags = flags; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_SETXATTR];          if (!proc) { @@ -1320,7 +1351,7 @@ client_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,          }  out:          if (need_unwind) -                STACK_UNWIND_STRICT (setxattr, frame, op_ret, op_errno); +                STACK_UNWIND_STRICT (setxattr, frame, op_ret, op_errno, NULL);  	return 0;  } @@ -1329,7 +1360,7 @@ out:  int32_t  client_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, -                  dict_t *dict, int32_t flags) +                  dict_t *dict, int32_t flags, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1340,9 +1371,10 @@ client_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,          if (!conf || !conf->fops)                  goto out; -        args.fd = fd; -        args.dict = dict; +        args.fd    = fd; +        args.xattr = dict;          args.flags = flags; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_FSETXATTR];          if (!proc) { @@ -1355,7 +1387,7 @@ client_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (fsetxattr, frame, -1, ENOTCONN); +                STACK_UNWIND_STRICT (fsetxattr, frame, -1, ENOTCONN, NULL);  	return 0;  } @@ -1365,7 +1397,7 @@ out:  int32_t  client_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, -                  const char *name) +                  const char *name, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1378,6 +1410,7 @@ client_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,          args.fd = fd;          args.name = name; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_FGETXATTR];          if (!proc) { @@ -1390,7 +1423,7 @@ client_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (fgetxattr, frame, -1, ENOTCONN, NULL); +                STACK_UNWIND_STRICT (fgetxattr, frame, -1, ENOTCONN, NULL, NULL);  	return 0;  } @@ -1399,7 +1432,7 @@ out:  int32_t  client_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, -                 const char *name) +                 const char *name, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1412,6 +1445,7 @@ client_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,          args.name = name;          args.loc  = loc; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_GETXATTR];          if (!proc) { @@ -1424,7 +1458,7 @@ client_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (getxattr, frame, -1, ENOTCONN, NULL); +                STACK_UNWIND_STRICT (getxattr, frame, -1, ENOTCONN, NULL, NULL);  	return 0;  } @@ -1433,7 +1467,7 @@ out:  int32_t  client_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc, -                gf_xattrop_flags_t flags, dict_t *dict) +                gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1446,7 +1480,8 @@ client_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,          args.loc = loc;          args.flags = flags; -        args.dict = dict; +        args.xattr = dict; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_XATTROP];          if (!proc) { @@ -1459,7 +1494,7 @@ client_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (xattrop, frame, -1, ENOTCONN, NULL); +                STACK_UNWIND_STRICT (xattrop, frame, -1, ENOTCONN, NULL, NULL);  	return 0;  } @@ -1468,7 +1503,7 @@ out:  int32_t  client_fxattrop (call_frame_t *frame, xlator_t *this, fd_t *fd, -                 gf_xattrop_flags_t flags, dict_t *dict) +                 gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1481,7 +1516,8 @@ client_fxattrop (call_frame_t *frame, xlator_t *this, fd_t *fd,          args.fd = fd;          args.flags = flags; -        args.dict = dict; +        args.xattr = dict; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_FXATTROP];          if (!proc) { @@ -1494,7 +1530,7 @@ client_fxattrop (call_frame_t *frame, xlator_t *this, fd_t *fd,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (fxattrop, frame, -1, ENOTCONN, NULL); +                STACK_UNWIND_STRICT (fxattrop, frame, -1, ENOTCONN, NULL, NULL);  	return 0;  } @@ -1503,7 +1539,7 @@ out:  int32_t  client_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc, -                    const char *name) +                    const char *name, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1516,6 +1552,7 @@ client_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,          args.name = name;          args.loc  = loc; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_REMOVEXATTR];          if (!proc) { @@ -1528,14 +1565,14 @@ client_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (removexattr, frame, -1, ENOTCONN); +                STACK_UNWIND_STRICT (removexattr, frame, -1, ENOTCONN, NULL);  	return 0;  }  int32_t  client_fremovexattr (call_frame_t *frame, xlator_t *this, fd_t *fd, -                     const char *name) +                     const char *name, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1548,6 +1585,7 @@ client_fremovexattr (call_frame_t *frame, xlator_t *this, fd_t *fd,          args.name = name;          args.fd  = fd; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_FREMOVEXATTR];          if (!proc) { @@ -1560,14 +1598,14 @@ client_fremovexattr (call_frame_t *frame, xlator_t *this, fd_t *fd,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (fremovexattr, frame, -1, ENOTCONN); +                STACK_UNWIND_STRICT (fremovexattr, frame, -1, ENOTCONN, NULL);  	return 0;  }  int32_t  client_lk (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd, -           struct gf_flock *lock) +           struct gf_flock *lock, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1581,6 +1619,7 @@ client_lk (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,          args.fd    = fd;          args.cmd   = cmd;          args.flock = lock; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_LK];          if (!proc) { @@ -1593,7 +1632,7 @@ client_lk (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (lk, frame, -1, ENOTCONN, NULL); +                STACK_UNWIND_STRICT (lk, frame, -1, ENOTCONN, NULL, NULL);  	return 0;  } @@ -1601,7 +1640,7 @@ out:  int32_t  client_inodelk (call_frame_t *frame, xlator_t *this, const char *volume, -                loc_t *loc, int32_t cmd, struct gf_flock *lock) +                loc_t *loc, int32_t cmd, struct gf_flock *lock, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1616,6 +1655,7 @@ client_inodelk (call_frame_t *frame, xlator_t *this, const char *volume,          args.cmd    = cmd;          args.flock  = lock;          args.volume = volume; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_INODELK];          if (!proc) { @@ -1628,7 +1668,7 @@ client_inodelk (call_frame_t *frame, xlator_t *this, const char *volume,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (inodelk, frame, -1, ENOTCONN); +                STACK_UNWIND_STRICT (inodelk, frame, -1, ENOTCONN, NULL);  	return 0;  } @@ -1637,7 +1677,7 @@ out:  int32_t  client_finodelk (call_frame_t *frame, xlator_t *this, const char *volume, -                 fd_t *fd, int32_t cmd, struct gf_flock *lock) +                 fd_t *fd, int32_t cmd, struct gf_flock *lock, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1652,6 +1692,7 @@ client_finodelk (call_frame_t *frame, xlator_t *this, const char *volume,          args.cmd    = cmd;          args.flock  = lock;          args.volume = volume; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_FINODELK];          if (!proc) { @@ -1664,7 +1705,7 @@ client_finodelk (call_frame_t *frame, xlator_t *this, const char *volume,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (finodelk, frame, -1, ENOTCONN); +                STACK_UNWIND_STRICT (finodelk, frame, -1, ENOTCONN, NULL);  	return 0;  } @@ -1673,7 +1714,7 @@ out:  int32_t  client_entrylk (call_frame_t *frame, xlator_t *this, const char *volume,                  loc_t *loc, const char *basename, entrylk_cmd cmd, -                entrylk_type type) +                entrylk_type type, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1689,6 +1730,7 @@ client_entrylk (call_frame_t *frame, xlator_t *this, const char *volume,          args.type         = type;          args.volume       = volume;          args.cmd_entrylk  = cmd; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_ENTRYLK];          if (!proc) { @@ -1701,7 +1743,7 @@ client_entrylk (call_frame_t *frame, xlator_t *this, const char *volume,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (entrylk, frame, -1, ENOTCONN); +                STACK_UNWIND_STRICT (entrylk, frame, -1, ENOTCONN, NULL);  	return 0;  } @@ -1711,7 +1753,7 @@ out:  int32_t  client_fentrylk (call_frame_t *frame, xlator_t *this, const char *volume,                   fd_t *fd, const char *basename, entrylk_cmd cmd, -                 entrylk_type type) +                 entrylk_type type, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1727,6 +1769,7 @@ client_fentrylk (call_frame_t *frame, xlator_t *this, const char *volume,          args.type         = type;          args.volume       = volume;          args.cmd_entrylk  = cmd; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_FENTRYLK];          if (!proc) { @@ -1739,7 +1782,7 @@ client_fentrylk (call_frame_t *frame, xlator_t *this, const char *volume,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (fentrylk, frame, -1, ENOTCONN); +                STACK_UNWIND_STRICT (fentrylk, frame, -1, ENOTCONN, NULL);  	return 0;  } @@ -1747,7 +1790,7 @@ out:  int32_t  client_rchecksum (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset, -                  int32_t len) +                  int32_t len, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1761,6 +1804,7 @@ client_rchecksum (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,          args.fd = fd;          args.offset = offset;          args.len = len; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_RCHECKSUM];          if (!proc) { @@ -1773,14 +1817,14 @@ client_rchecksum (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (rchecksum, frame, -1, ENOTCONN, 0, NULL); +                STACK_UNWIND_STRICT (rchecksum, frame, -1, ENOTCONN, 0, NULL, NULL);  	return 0;  }  int32_t  client_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, -                size_t size, off_t off) +                size_t size, off_t off, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1794,6 +1838,7 @@ client_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd,          args.fd = fd;          args.size = size;          args.offset = off; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_READDIR];          if (!proc) { @@ -1806,7 +1851,7 @@ client_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (readdir, frame, -1, ENOTCONN, NULL); +                STACK_UNWIND_STRICT (readdir, frame, -1, ENOTCONN, NULL, NULL);  	return 0;  } @@ -1828,7 +1873,7 @@ client_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd,          args.fd = fd;          args.size = size;          args.offset = off; -        args.dict = dict; +        args.xdata = dict;          proc = &conf->fops->proctable[GF_FOP_READDIRP];          if (!proc) { @@ -1841,7 +1886,7 @@ client_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (readdirp, frame, -1, ENOTCONN, NULL); +                STACK_UNWIND_STRICT (readdirp, frame, -1, ENOTCONN, NULL, NULL);  	return 0;  } @@ -1849,7 +1894,7 @@ out:  int32_t  client_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc, -                struct iatt *stbuf, int32_t valid) +                struct iatt *stbuf, int32_t valid, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1863,6 +1908,7 @@ client_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,          args.loc = loc;          args.stbuf = stbuf;          args.valid = valid; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_SETATTR];          if (!proc) { @@ -1875,14 +1921,14 @@ client_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (setattr, frame, -1, ENOTCONN, NULL, NULL); +                STACK_UNWIND_STRICT (setattr, frame, -1, ENOTCONN, NULL, NULL, NULL);  	return 0;  }  int32_t  client_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd, -                 struct iatt *stbuf, int32_t valid) +                 struct iatt *stbuf, int32_t valid, dict_t *xdata)  {          int          ret  = -1;          clnt_conf_t *conf = NULL; @@ -1896,6 +1942,7 @@ client_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,          args.fd = fd;          args.stbuf = stbuf;          args.valid = valid; +        args.xdata = xdata;          proc = &conf->fops->proctable[GF_FOP_FSETATTR];          if (!proc) { @@ -1908,7 +1955,7 @@ client_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,                  ret = proc->fn (frame, this, &args);  out:          if (ret) -                STACK_UNWIND_STRICT (fsetattr, frame, -1, ENOTCONN, NULL, NULL); +                STACK_UNWIND_STRICT (fsetattr, frame, -1, ENOTCONN, NULL, NULL, NULL);  	return 0;  } diff --git a/xlators/protocol/client/src/client.h b/xlators/protocol/client/src/client.h index 91a411e8a..1ca7b2e57 100644 --- a/xlators/protocol/client/src/client.h +++ b/xlators/protocol/client/src/client.h @@ -169,13 +169,11 @@ typedef struct client_local {  typedef struct client_args {          loc_t              *loc;          fd_t               *fd; -        dict_t             *xattr_req;          const char         *linkname;          struct iobref      *iobref;          struct iovec       *vector;          dict_t             *xattr;          struct iatt        *stbuf; -        dict_t             *dict;          loc_t              *oldloc;          loc_t              *newloc;          const char         *name; @@ -189,7 +187,6 @@ typedef struct client_args {          mode_t              mode;          dev_t               rdev;          int32_t             flags; -        int32_t             wbflags;          int32_t             count;          int32_t             datasync;          entrylk_cmd         cmd_entrylk; @@ -197,6 +194,9 @@ typedef struct client_args {          gf_xattrop_flags_t  optype;          int32_t             valid;          int32_t             len; + +        mode_t              umask; +        dict_t             *xdata;  } clnt_args_t;  typedef ssize_t (*gfs_serialize_t) (struct iovec outmsg, void *args); diff --git a/xlators/protocol/client/src/client3_1-fops.c b/xlators/protocol/client/src/client3_1-fops.c index fa9b93039..e1c144a8a 100644 --- a/xlators/protocol/client/src/client3_1-fops.c +++ b/xlators/protocol/client/src/client3_1-fops.c @@ -153,6 +153,7 @@ client3_1_symlink_cbk (struct rpc_req *req, struct iovec *iov, int count,          clnt_local_t     *local      = NULL;          inode_t          *inode      = NULL;          xlator_t         *this       = NULL; +        dict_t           *xdata      = NULL;          this = THIS; @@ -181,6 +182,10 @@ client3_1_symlink_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.postparent, &postparent);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, @@ -191,7 +196,13 @@ out:          CLIENT_STACK_UNWIND (symlink, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno), inode, &stbuf, -                             &preparent, &postparent); +                             &preparent, &postparent, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -210,6 +221,7 @@ client3_1_mknod_cbk (struct rpc_req *req, struct iovec *iov, int count,          clnt_local_t     *local      = NULL;          inode_t          *inode      = NULL;          xlator_t         *this       = NULL; +        dict_t           *xdata      = NULL;          this = THIS; @@ -239,6 +251,10 @@ client3_1_mknod_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.postparent, &postparent);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, @@ -249,7 +265,14 @@ out:          CLIENT_STACK_UNWIND (mknod, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno), inode, -                             &stbuf, &preparent, &postparent); +                             &stbuf, &preparent, &postparent, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata); +          return 0;  } @@ -266,6 +289,7 @@ client3_1_mkdir_cbk (struct rpc_req *req, struct iovec *iov, int count,          clnt_local_t     *local      = NULL;          inode_t          *inode      = NULL;          xlator_t         *this       = NULL; +        dict_t           *xdata      = NULL;          this = THIS; @@ -294,6 +318,10 @@ client3_1_mkdir_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.postparent, &postparent);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, @@ -304,7 +332,13 @@ out:          CLIENT_STACK_UNWIND (mkdir, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno), inode, -                             &stbuf, &preparent, &postparent); +                             &stbuf, &preparent, &postparent, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -320,7 +354,9 @@ client3_1_open_cbk (struct rpc_req *req, struct iovec *iov, int count,          fd_t          *fd    = NULL;          int            ret   = 0;          gfs3_open_rsp  rsp   = {0,}; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -371,6 +407,10 @@ client3_1_open_cbk (struct rpc_req *req, struct iovec *iov, int count,                  pthread_mutex_unlock (&conf->lock);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, @@ -380,7 +420,13 @@ out:          }          CLIENT_STACK_UNWIND (open, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno), fd); +                             gf_error_to_errno (rsp.op_errno), fd, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -394,7 +440,9 @@ client3_1_stat_cbk (struct rpc_req *req, struct iovec *iov, int count,          call_frame_t   *frame = NULL;          struct iatt  iatt = {0,};          int ret = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -417,13 +465,24 @@ client3_1_stat_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.stat, &iatt);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s",                          strerror (gf_error_to_errno (rsp.op_errno)));          } +          CLIENT_STACK_UNWIND (stat, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno), &iatt); +                             gf_error_to_errno (rsp.op_errno), &iatt, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -436,7 +495,9 @@ client3_1_readlink_cbk (struct rpc_req *req, struct iovec *iov, int count,          call_frame_t   *frame = NULL;          struct iatt  iatt = {0,};          int ret = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -459,19 +520,31 @@ client3_1_readlink_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.buf, &iatt);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s",                          strerror (gf_error_to_errno (rsp.op_errno)));          } +          CLIENT_STACK_UNWIND (readlink, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno), rsp.path, &iatt); +                             gf_error_to_errno (rsp.op_errno), rsp.path, +                             &iatt, xdata);          /* This is allocated by the libc while decoding RPC msg */          /* Hence no 'GF_FREE', but just 'free' */          if (rsp.path)                  free (rsp.path); +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata); +          return 0;  } @@ -484,7 +557,9 @@ client3_1_unlink_cbk (struct rpc_req *req, struct iovec *iov, int count,          struct iatt      preparent  = {0,};          struct iatt      postparent = {0,};          int              ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -508,6 +583,10 @@ client3_1_unlink_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.postparent, &postparent);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s", @@ -515,7 +594,13 @@ out:          }          CLIENT_STACK_UNWIND (unlink, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno), &preparent, -                             &postparent); +                             &postparent, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -529,7 +614,9 @@ client3_1_rmdir_cbk (struct rpc_req *req, struct iovec *iov, int count,          struct iatt  preparent  = {0,};          struct iatt  postparent = {0,};          int ret = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -553,6 +640,10 @@ client3_1_rmdir_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.postparent, &postparent);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s", @@ -560,7 +651,13 @@ out:          }          CLIENT_STACK_UNWIND (rmdir, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno), &preparent, -                             &postparent); +                             &postparent, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -575,7 +672,9 @@ client3_1_truncate_cbk (struct rpc_req *req, struct iovec *iov, int count,          struct iatt  prestat  = {0,};          struct iatt  poststat = {0,};          int ret = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -599,6 +698,10 @@ client3_1_truncate_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.poststat, &poststat);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s", @@ -606,7 +709,13 @@ out:          }          CLIENT_STACK_UNWIND (truncate, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno), &prestat, -                             &poststat); +                             &poststat, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -620,7 +729,9 @@ client3_1_statfs_cbk (struct rpc_req *req, struct iovec *iov, int count,          call_frame_t   *frame = NULL;          struct statvfs  statfs = {0,};          int ret = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -643,13 +754,23 @@ client3_1_statfs_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_statfs_to_statfs (&rsp.statfs, &statfs);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s",                          strerror (gf_error_to_errno (rsp.op_errno)));          }          CLIENT_STACK_UNWIND (statfs, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno), &statfs); +                             gf_error_to_errno (rsp.op_errno), &statfs, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -664,7 +785,9 @@ client3_1_writev_cbk (struct rpc_req *req, struct iovec *iov, int count,          struct iatt  prestat  = {0,};          struct iatt  poststat = {0,};          int ret = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -689,6 +812,10 @@ client3_1_writev_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.poststat, &poststat);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s", @@ -696,7 +823,13 @@ out:          }          CLIENT_STACK_UNWIND (writev, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno), &prestat, -                             &poststat); +                             &poststat, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -707,7 +840,9 @@ client3_1_flush_cbk (struct rpc_req *req, struct iovec *iov, int count,  {          call_frame_t    *frame      = NULL;          clnt_local_t  *local      = NULL; -        xlator_t        *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          gf_common_rsp    rsp        = {0,};          int              ret        = 0; @@ -736,6 +871,10 @@ client3_1_flush_cbk (struct rpc_req *req, struct iovec *iov, int count,                          lkowner_utoa (&local->owner), ret);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, @@ -743,7 +882,13 @@ out:                          strerror (gf_error_to_errno (rsp.op_errno)));          }          CLIENT_STACK_UNWIND (flush, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno)); +                             gf_error_to_errno (rsp.op_errno), xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -757,7 +902,9 @@ client3_1_fsync_cbk (struct rpc_req *req, struct iovec *iov, int count,          struct iatt  prestat  = {0,};          struct iatt  poststat = {0,};          int ret = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -782,6 +929,10 @@ client3_1_fsync_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.poststat, &poststat);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s", @@ -789,7 +940,13 @@ out:          }          CLIENT_STACK_UNWIND (fsync, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno), &prestat, -                             &poststat); +                             &poststat, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -801,7 +958,9 @@ client3_1_setxattr_cbk (struct rpc_req *req, struct iovec *iov, int count,          call_frame_t    *frame      = NULL;          gf_common_rsp    rsp        = {0,};          int              ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -821,13 +980,23 @@ client3_1_setxattr_cbk (struct rpc_req *req, struct iovec *iov, int count,                  goto out;          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s",                          strerror (gf_error_to_errno (rsp.op_errno)));          }          CLIENT_STACK_UNWIND (setxattr, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno)); +                             gf_error_to_errno (rsp.op_errno), xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -842,7 +1011,9 @@ client3_1_getxattr_cbk (struct rpc_req *req, struct iovec *iov, int count,          gfs3_getxattr_rsp  rsp      = {0,};          int                ret      = 0;          clnt_local_t    *local    = NULL; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -871,6 +1042,10 @@ client3_1_getxattr_cbk (struct rpc_req *req, struct iovec *iov, int count,                                                op_errno, out);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, @@ -879,14 +1054,17 @@ out:                          (local) ? local->loc.path : "--");          } -        CLIENT_STACK_UNWIND (getxattr, frame, rsp.op_ret, op_errno, dict); +        CLIENT_STACK_UNWIND (getxattr, frame, rsp.op_ret, op_errno, dict, xdata); -        if (rsp.dict.dict_val) { -                /* don't use GF_FREE, this memory was allocated by libc -                 */ +        /* don't use GF_FREE, this memory was allocated by libc */ +        if (rsp.dict.dict_val)                  free (rsp.dict.dict_val); -                rsp.dict.dict_val = NULL; -        } + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          if (dict)                  dict_unref (dict); @@ -904,7 +1082,9 @@ client3_1_fgetxattr_cbk (struct rpc_req *req, struct iovec *iov, int count,          int                 ret      = 0;          int                 op_errno = EINVAL;          clnt_local_t     *local    = NULL; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -931,6 +1111,10 @@ client3_1_fgetxattr_cbk (struct rpc_req *req, struct iovec *iov, int count,                                                (rsp.dict.dict_len), rsp.op_ret,                                                op_errno, out);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, @@ -938,13 +1122,16 @@ out:                          strerror (op_errno));          } -        CLIENT_STACK_UNWIND (fgetxattr, frame, rsp.op_ret, op_errno, dict); -        if (rsp.dict.dict_val) { -                /* don't use GF_FREE, this memory was allocated by libc -                 */ +        CLIENT_STACK_UNWIND (fgetxattr, frame, rsp.op_ret, op_errno, dict, xdata); + +        if (rsp.dict.dict_val)                  free (rsp.dict.dict_val); -                rsp.dict.dict_val = NULL; -        } + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          if (dict)                  dict_unref (dict); @@ -959,7 +1146,8 @@ client3_1_removexattr_cbk (struct rpc_req *req, struct iovec *iov, int count,          call_frame_t    *frame      = NULL;          gf_common_rsp    rsp        = {0,};          int              ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL;          this = THIS; @@ -979,13 +1167,24 @@ client3_1_removexattr_cbk (struct rpc_req *req, struct iovec *iov, int count,                  goto out;          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s",                          strerror (gf_error_to_errno (rsp.op_errno)));          } +          CLIENT_STACK_UNWIND (removexattr, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno)); +                             gf_error_to_errno (rsp.op_errno), xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -997,7 +1196,9 @@ client3_1_fremovexattr_cbk (struct rpc_req *req, struct iovec *iov, int count,          call_frame_t    *frame      = NULL;          gf_common_rsp    rsp        = {0,};          int              ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -1017,13 +1218,23 @@ client3_1_fremovexattr_cbk (struct rpc_req *req, struct iovec *iov, int count,                  goto out;          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s",                          strerror (gf_error_to_errno (rsp.op_errno)));          }          CLIENT_STACK_UNWIND (fremovexattr, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno)); +                             gf_error_to_errno (rsp.op_errno), xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -1035,7 +1246,9 @@ client3_1_fsyncdir_cbk (struct rpc_req *req, struct iovec *iov, int count,          call_frame_t    *frame      = NULL;          gf_common_rsp    rsp        = {0,};          int              ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -1054,13 +1267,23 @@ client3_1_fsyncdir_cbk (struct rpc_req *req, struct iovec *iov, int count,                  goto out;          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s",                          strerror (gf_error_to_errno (rsp.op_errno)));          }          CLIENT_STACK_UNWIND (fsyncdir, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno)); +                             gf_error_to_errno (rsp.op_errno), xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -1072,7 +1295,9 @@ client3_1_access_cbk (struct rpc_req *req, struct iovec *iov, int count,          call_frame_t    *frame      = NULL;          gf_common_rsp    rsp        = {0,};          int              ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -1091,13 +1316,23 @@ client3_1_access_cbk (struct rpc_req *req, struct iovec *iov, int count,                  goto out;          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s",                          strerror (gf_error_to_errno (rsp.op_errno)));          }          CLIENT_STACK_UNWIND (access, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno)); +                             gf_error_to_errno (rsp.op_errno), xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -1112,7 +1347,9 @@ client3_1_ftruncate_cbk (struct rpc_req *req, struct iovec *iov, int count,          struct iatt  prestat  = {0,};          struct iatt  poststat = {0,};          int ret = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -1136,6 +1373,10 @@ client3_1_ftruncate_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.poststat, &poststat);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s", @@ -1143,7 +1384,13 @@ out:          }          CLIENT_STACK_UNWIND (ftruncate, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno), &prestat, -                             &poststat); +                             &poststat, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -1156,7 +1403,9 @@ client3_1_fstat_cbk (struct rpc_req *req, struct iovec *iov, int count,          call_frame_t   *frame = NULL;          struct iatt  stat  = {0,};          int ret = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -1179,13 +1428,23 @@ client3_1_fstat_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.stat, &stat);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s",                          strerror (gf_error_to_errno (rsp.op_errno)));          }          CLIENT_STACK_UNWIND (fstat, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno), &stat); +                             gf_error_to_errno (rsp.op_errno), &stat,  xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -1198,7 +1457,9 @@ client3_1_inodelk_cbk (struct rpc_req *req, struct iovec *iov, int count,          call_frame_t    *frame      = NULL;          gf_common_rsp    rsp        = {0,};          int              ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -1217,6 +1478,10 @@ client3_1_inodelk_cbk (struct rpc_req *req, struct iovec *iov, int count,                  goto out;          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if ((rsp.op_ret == -1) &&              (EAGAIN != gf_error_to_errno (rsp.op_errno))) { @@ -1224,7 +1489,13 @@ out:                          strerror (gf_error_to_errno (rsp.op_errno)));          }          CLIENT_STACK_UNWIND (inodelk, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno)); +                             gf_error_to_errno (rsp.op_errno), xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -1236,7 +1507,9 @@ client3_1_finodelk_cbk (struct rpc_req *req, struct iovec *iov, int count,          call_frame_t    *frame      = NULL;          gf_common_rsp    rsp        = {0,};          int              ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -1255,6 +1528,10 @@ client3_1_finodelk_cbk (struct rpc_req *req, struct iovec *iov, int count,                  goto out;          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if ((rsp.op_ret == -1) &&              (EAGAIN != gf_error_to_errno (rsp.op_errno))) { @@ -1262,7 +1539,13 @@ out:                          strerror (gf_error_to_errno (rsp.op_errno)));          }          CLIENT_STACK_UNWIND (finodelk, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno)); +                             gf_error_to_errno (rsp.op_errno), xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -1274,7 +1557,9 @@ client3_1_entrylk_cbk (struct rpc_req *req, struct iovec *iov, int count,          call_frame_t    *frame      = NULL;          gf_common_rsp    rsp        = {0,};          int              ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -1293,15 +1578,25 @@ client3_1_entrylk_cbk (struct rpc_req *req, struct iovec *iov, int count,                  goto out;          } -out: +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +out:          if ((rsp.op_ret == -1) &&              (EAGAIN != gf_error_to_errno (rsp.op_errno))) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s",                          strerror (gf_error_to_errno (rsp.op_errno)));          } +          CLIENT_STACK_UNWIND (entrylk, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno)); +                             gf_error_to_errno (rsp.op_errno), xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -1313,7 +1608,9 @@ client3_1_fentrylk_cbk (struct rpc_req *req, struct iovec *iov, int count,          call_frame_t    *frame      = NULL;          gf_common_rsp    rsp        = {0,};          int              ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -1332,14 +1629,25 @@ client3_1_fentrylk_cbk (struct rpc_req *req, struct iovec *iov, int count,                  goto out;          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if ((rsp.op_ret == -1) &&              (EAGAIN != gf_error_to_errno (rsp.op_errno))) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s",                          strerror (gf_error_to_errno (rsp.op_errno)));          } +          CLIENT_STACK_UNWIND (fentrylk, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno)); +                             gf_error_to_errno (rsp.op_errno), xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -1354,7 +1662,9 @@ client3_1_xattrop_cbk (struct rpc_req *req, struct iovec *iov, int count,          int               ret      = 0;          int               op_errno = EINVAL;          clnt_local_t   *local    = NULL; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -1382,6 +1692,10 @@ client3_1_xattrop_cbk (struct rpc_req *req, struct iovec *iov, int count,                                                op_errno, out);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, @@ -1391,14 +1705,16 @@ out:          }          CLIENT_STACK_UNWIND (xattrop, frame, rsp.op_ret, -                             gf_error_to_errno (op_errno), dict); +                             gf_error_to_errno (op_errno), dict, xdata); -        if (rsp.dict.dict_val) { -                /* don't use GF_FREE, this memory was allocated by libc -                 */ +        if (rsp.dict.dict_val)                  free (rsp.dict.dict_val); -                rsp.dict.dict_val = NULL; -        } + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          if (dict)                  dict_unref (dict); @@ -1412,11 +1728,12 @@ client3_1_fxattrop_cbk (struct rpc_req *req, struct iovec *iov, int count,  {          call_frame_t      *frame    = NULL;          dict_t            *dict     = NULL; +        dict_t            *xdata    = NULL;          gfs3_fxattrop_rsp  rsp      = {0,};          int                ret      = 0;          int                op_errno = 0;          clnt_local_t    *local    = NULL; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL;          this = THIS; @@ -1444,6 +1761,10 @@ client3_1_fxattrop_cbk (struct rpc_req *req, struct iovec *iov, int count,                                                op_errno, out);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (frame->this, xdata, +                                      (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), rsp.op_ret, +                                      op_errno, out);  out:          if (rsp.op_ret == -1) { @@ -1452,14 +1773,16 @@ out:                          strerror (gf_error_to_errno (op_errno)));          }          CLIENT_STACK_UNWIND (fxattrop, frame, rsp.op_ret, -                             gf_error_to_errno (op_errno), dict); +                             gf_error_to_errno (op_errno), dict, xdata); -        if (rsp.dict.dict_val) { -                /* don't use GF_FREE, this memory was allocated by libc -                 */ +        if (rsp.dict.dict_val)                  free (rsp.dict.dict_val); -                rsp.dict.dict_val = NULL; -        } + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          if (dict)                  dict_unref (dict); @@ -1474,7 +1797,9 @@ client3_1_fsetxattr_cbk (struct rpc_req *req, struct iovec *iov, int count,          call_frame_t    *frame      = NULL;          gf_common_rsp    rsp        = {0,};          int              ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -1493,13 +1818,23 @@ client3_1_fsetxattr_cbk (struct rpc_req *req, struct iovec *iov, int count,                  goto out;          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s",                          strerror (gf_error_to_errno (rsp.op_errno)));          }          CLIENT_STACK_UNWIND (fsetxattr, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno)); +                             gf_error_to_errno (rsp.op_errno), xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -1513,7 +1848,9 @@ client3_1_fsetattr_cbk (struct rpc_req *req, struct iovec *iov, int count,          struct iatt      prestat    = {0,};          struct iatt      poststat   = {0,};          int              ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -1537,6 +1874,10 @@ client3_1_fsetattr_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.statpost, &poststat);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s", @@ -1544,7 +1885,13 @@ out:          }          CLIENT_STACK_UNWIND (fsetattr, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno), &prestat, -                             &poststat); +                             &poststat, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -1559,7 +1906,9 @@ client3_1_setattr_cbk (struct rpc_req *req, struct iovec *iov, int count,          struct iatt      prestat    = {0,};          struct iatt      poststat   = {0,};          int              ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -1584,6 +1933,10 @@ client3_1_setattr_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.statpost, &poststat);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s", @@ -1591,7 +1944,13 @@ out:          }          CLIENT_STACK_UNWIND (setattr, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno), &prestat, -                             &poststat); +                             &poststat, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -1611,7 +1970,8 @@ client3_1_create_cbk (struct rpc_req *req, struct iovec *iov, int count,          clnt_conf_t     *conf       = NULL;          clnt_fd_ctx_t   *fdctx      = NULL;          gfs3_create_rsp  rsp        = {0,}; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL;          this = THIS; @@ -1667,6 +2027,10 @@ client3_1_create_cbk (struct rpc_req *req, struct iovec *iov, int count,                  pthread_mutex_unlock (&conf->lock);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, @@ -1677,7 +2041,13 @@ out:          CLIENT_STACK_UNWIND (create, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno), fd, inode, -                             &stbuf, &preparent, &postparent); +                             &stbuf, &preparent, &postparent, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -1690,7 +2060,9 @@ client3_1_rchecksum_cbk (struct rpc_req *req, struct iovec *iov, int count,          call_frame_t *frame = NULL;          gfs3_rchecksum_rsp rsp        = {0,};          int              ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -1710,6 +2082,10 @@ client3_1_rchecksum_cbk (struct rpc_req *req, struct iovec *iov, int count,                  goto out;          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s", @@ -1718,7 +2094,8 @@ out:          CLIENT_STACK_UNWIND (rchecksum, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno),                               rsp.weak_checksum, -                             (uint8_t *)rsp.strong_checksum.strong_checksum_val); +                             (uint8_t *)rsp.strong_checksum.strong_checksum_val, +                             xdata);          if (rsp.strong_checksum.strong_checksum_val) {                  /* This is allocated by the libc while decoding RPC msg */ @@ -1726,6 +2103,12 @@ out:                  free (rsp.strong_checksum.strong_checksum_val);          } +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata); +          return 0;  } @@ -1738,7 +2121,8 @@ client3_1_lk_cbk (struct rpc_req *req, struct iovec *iov, int count,          struct gf_flock     lock       = {0,};          gfs3_lk_rsp      rsp        = {0,};          int              ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL;          this = THIS; @@ -1777,6 +2161,10 @@ client3_1_lk_cbk (struct rpc_req *req, struct iovec *iov, int count,          }          */ +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if ((rsp.op_ret == -1) &&              (EAGAIN != gf_error_to_errno (rsp.op_errno))) { @@ -1786,7 +2174,13 @@ out:          }          CLIENT_STACK_UNWIND (lk, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno), &lock); +                             gf_error_to_errno (rsp.op_errno), &lock, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -1795,12 +2189,13 @@ int  client3_1_readdir_cbk (struct rpc_req *req, struct iovec *iov, int count,                         void *myframe)  { -        call_frame_t           *frame = NULL; -        gfs3_readdir_rsp        rsp   = {0,}; -        int32_t                 ret   = 0; -        clnt_local_t         *local = NULL; -        gf_dirent_t             entries; -        xlator_t         *this       = NULL; +        call_frame_t     *frame    = NULL; +        gfs3_readdir_rsp  rsp      = {0,}; +        int32_t           ret      = 0; +        clnt_local_t     *local    = NULL; +        gf_dirent_t       entries; +        xlator_t         *this     = NULL; +        dict_t           *xdata    = NULL;          this = THIS; @@ -1826,6 +2221,11 @@ client3_1_readdir_cbk (struct rpc_req *req, struct iovec *iov, int count,                  unserialize_rsp_dirent (&rsp, &entries);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (frame->this, xdata, +                                      (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), rsp.op_ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, @@ -1834,12 +2234,18 @@ out:                                    local->cmd);          }          CLIENT_STACK_UNWIND (readdir, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno), &entries); +                             gf_error_to_errno (rsp.op_errno), &entries, xdata);          if (rsp.op_ret != -1) {                  gf_dirent_free (&entries);          } +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata); +          clnt_readdir_rsp_cleanup (&rsp);          return 0; @@ -1856,6 +2262,7 @@ client3_1_readdirp_cbk (struct rpc_req *req, struct iovec *iov, int count,          clnt_local_t      *local = NULL;          gf_dirent_t        entries;          xlator_t          *this  = NULL; +        dict_t            *xdata = NULL;          this = THIS; @@ -1881,6 +2288,10 @@ client3_1_readdirp_cbk (struct rpc_req *req, struct iovec *iov, int count,                  unserialize_rsp_direntp (this, local->fd, &rsp, &entries);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, @@ -1888,11 +2299,16 @@ out:                          strerror (gf_error_to_errno (rsp.op_errno)));          }          CLIENT_STACK_UNWIND (readdirp, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno), &entries); +                             gf_error_to_errno (rsp.op_errno), &entries, xdata);          if (rsp.op_ret != -1) {                  gf_dirent_free (&entries);          } +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          clnt_readdirp_rsp_cleanup (&rsp); @@ -1912,7 +2328,8 @@ client3_1_rename_cbk (struct rpc_req *req, struct iovec *iov, int count,          struct iatt       prenewparent  = {0,};          struct iatt       postnewparent = {0,};          int               ret        = 0; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL;          this = THIS; @@ -1942,6 +2359,10 @@ client3_1_rename_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.postnewparent, &postnewparent);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, "remote operation failed: %s", @@ -1950,7 +2371,13 @@ out:          CLIENT_STACK_UNWIND (rename, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno),                               &stbuf, &preoldparent, &postoldparent, -                             &prenewparent, &postnewparent); +                             &prenewparent, &postnewparent, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -1967,7 +2394,9 @@ client3_1_link_cbk (struct rpc_req *req, struct iovec *iov, int count,          int               ret        = 0;          clnt_local_t     *local      = NULL;          inode_t          *inode      = NULL; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL; +          this = THIS; @@ -1997,6 +2426,10 @@ client3_1_link_cbk (struct rpc_req *req, struct iovec *iov, int count,                  gf_stat_to_iatt (&rsp.postparent, &postparent);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, @@ -2007,7 +2440,13 @@ out:          CLIENT_STACK_UNWIND (link, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno), inode, -                             &stbuf, &preparent, &postparent); +                             &stbuf, &preparent, &postparent, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -2024,7 +2463,8 @@ client3_1_opendir_cbk (struct rpc_req *req, struct iovec *iov, int count,          fd_t             *fd = NULL;          int ret = 0;          gfs3_opendir_rsp  rsp = {0,}; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL;          this = THIS; @@ -2073,6 +2513,10 @@ client3_1_opendir_cbk (struct rpc_req *req, struct iovec *iov, int count,                  pthread_mutex_unlock (&conf->lock);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, @@ -2081,7 +2525,13 @@ out:                          (local) ? local->loc.path : "--");          }          CLIENT_STACK_UNWIND (opendir, frame, rsp.op_ret, -                             gf_error_to_errno (rsp.op_errno), fd); +                             gf_error_to_errno (rsp.op_errno), fd, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -2098,7 +2548,7 @@ client3_1_lookup_cbk (struct rpc_req *req, struct iovec *iov, int count,          struct iatt      stbuf      = {0,};          struct iatt      postparent = {0,};          int              op_errno   = EINVAL; -        dict_t          *xattr      = NULL; +        dict_t          *xdata      = NULL;          inode_t         *inode      = NULL;          xlator_t        *this       = NULL; @@ -2131,8 +2581,8 @@ client3_1_lookup_cbk (struct rpc_req *req, struct iovec *iov, int count,          rsp.op_ret = -1;          gf_stat_to_iatt (&rsp.stat, &stbuf); -        GF_PROTOCOL_DICT_UNSERIALIZE (frame->this, xattr, (rsp.dict.dict_val), -                                      (rsp.dict.dict_len), rsp.op_ret, +        GF_PROTOCOL_DICT_UNSERIALIZE (frame->this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), rsp.op_ret,                                        op_errno, out);          if ((!uuid_is_null (inode->gfid)) @@ -2161,16 +2611,13 @@ out:          }          CLIENT_STACK_UNWIND (lookup, frame, rsp.op_ret, rsp.op_errno, inode, -                             &stbuf, xattr, &postparent); +                             &stbuf, xdata, &postparent); -        if (xattr) -                dict_unref (xattr); +        if (xdata) +                dict_unref (xdata); -        if (rsp.dict.dict_val) { -                /* don't use GF_FREE, this memory was allocated by libc -                 */ -                free (rsp.dict.dict_val); -        } +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val);          return 0;  } @@ -2186,7 +2633,8 @@ client3_1_readv_cbk (struct rpc_req *req, struct iovec *iov, int count,          gfs3_read_rsp   rsp    = {0,};          int             ret    = 0, rspcount = 0;          clnt_local_t   *local  = NULL; -        xlator_t         *this       = NULL; +        xlator_t *this       = NULL; +        dict_t  *xdata       = NULL;          this = THIS; @@ -2218,6 +2666,10 @@ client3_1_readv_cbk (struct rpc_req *req, struct iovec *iov, int count,                          vector[0].iov_base = req->rsp[1].iov_base;                  rspcount = 1;          } +        GF_PROTOCOL_DICT_UNSERIALIZE (this, xdata, (rsp.xdata.xdata_val), +                                      (rsp.xdata.xdata_len), ret, +                                      rsp.op_errno, out); +  out:          if (rsp.op_ret == -1) {                  gf_log (this->name, GF_LOG_WARNING, @@ -2226,7 +2678,13 @@ out:          }          CLIENT_STACK_UNWIND (readv, frame, rsp.op_ret,                               gf_error_to_errno (rsp.op_errno), vector, rspcount, -                             &stat, iobref); +                             &stat, iobref, xdata); + +        if (rsp.xdata.xdata_val) +                free (rsp.xdata.xdata_val); + +        if (xdata) +                dict_unref (xdata);          return 0;  } @@ -2461,8 +2919,8 @@ client3_1_lookup (call_frame_t *frame, xlator_t *this,                          memcpy (req.gfid, args->loc->gfid, 16);          } -        if (args->dict) { -                content = dict_get (args->dict, GF_CONTENT_KEY); +        if (args->xdata) { +                content = dict_get (args->xdata, GF_CONTENT_KEY);                  if (content != NULL) {                          rsp_iobref = iobref_new ();                          if (rsp_iobref == NULL) { @@ -2481,22 +2939,21 @@ client3_1_lookup (call_frame_t *frame, xlator_t *this,                          iobuf_unref (rsp_iobuf);                          rsphdr = &vector[0];                          rsphdr->iov_base = iobuf_ptr (rsp_iobuf); -                        rsphdr->iov_len -                                = iobuf_pagesize (rsp_iobuf); +                        rsphdr->iov_len = iobuf_pagesize (rsp_iobuf);                          count = 1;                          rsp_iobuf = NULL;                          local->iobref = rsp_iobref;                          rsp_iobref = NULL;                  } -                GF_PROTOCOL_DICT_SERIALIZE (this, args->dict, -                                            (&req.dict.dict_val), -                                            req.dict.dict_len, +                GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, +                                            (&req.xdata.xdata_val), +                                            req.xdata.xdata_len,                                              op_errno, unwind);          }          if (args->loc->name) -                req.bname         = (char *)args->loc->name; +                req.bname = (char *)args->loc->name;          else                  req.bname = ""; @@ -2510,8 +2967,8 @@ client3_1_lookup (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } -        if (req.dict.dict_val) { -                GF_FREE (req.dict.dict_val); +        if (req.xdata.xdata_val) { +                GF_FREE (req.xdata.xdata_val);          }          if (rsp_iobref != NULL) { @@ -2524,8 +2981,8 @@ unwind:          CLIENT_STACK_UNWIND (lookup, frame, -1, op_errno, NULL, NULL, NULL,                               NULL); -        if (req.dict.dict_val) -                GF_FREE (req.dict.dict_val); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val);          if (rsp_iobref != NULL) {                  iobref_unref (rsp_iobref); @@ -2538,8 +2995,6 @@ unwind:          return 0;  } - -  int32_t  client3_1_stat (call_frame_t *frame, xlator_t *this,                  void *data) @@ -2567,6 +3022,9 @@ client3_1_stat (call_frame_t *frame, xlator_t *this,                                         unwind, op_errno, EINVAL);          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_STAT, client3_1_stat_cbk, NULL,                                       NULL, 0, NULL, 0, NULL, @@ -2575,9 +3033,16 @@ client3_1_stat (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (stat, frame, -1, op_errno, NULL); +        CLIENT_STACK_UNWIND (stat, frame, -1, op_errno, NULL, NULL); + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -2612,6 +3077,9 @@ client3_1_truncate (call_frame_t *frame, xlator_t *this,          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_TRUNCATE,                                       client3_1_truncate_cbk, NULL, @@ -2621,9 +3089,15 @@ client3_1_truncate (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (truncate, frame, -1, op_errno, NULL, NULL); +        CLIENT_STACK_UNWIND (truncate, frame, -1, op_errno, NULL, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -2652,6 +3126,9 @@ client3_1_ftruncate (call_frame_t *frame, xlator_t *this,          req.fd     = remote_fd;          memcpy (req.gfid, args->fd->inode->gfid, 16); +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_FTRUNCATE,                                       client3_1_ftruncate_cbk, NULL, @@ -2661,9 +3138,15 @@ client3_1_ftruncate (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (ftruncate, frame, -1, op_errno, NULL, NULL); +        CLIENT_STACK_UNWIND (ftruncate, frame, -1, op_errno, NULL, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -2699,6 +3182,9 @@ client3_1_access (call_frame_t *frame, xlator_t *this,          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_ACCESS,                                       client3_1_access_cbk, NULL, @@ -2708,9 +3194,15 @@ client3_1_access (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (access, frame, -1, op_errno); +        CLIENT_STACK_UNWIND (access, frame, -1, op_errno, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -2743,6 +3235,9 @@ client3_1_readlink (call_frame_t *frame, xlator_t *this,          req.size = args->size;          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_READLINK,                                       client3_1_readlink_cbk, NULL, @@ -2752,9 +3247,15 @@ client3_1_readlink (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (readlink, frame, -1, op_errno, NULL, NULL); +        CLIENT_STACK_UNWIND (readlink, frame, -1, op_errno, NULL, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -2790,6 +3291,9 @@ client3_1_unlink (call_frame_t *frame, xlator_t *this,          req.bname = (char *)args->loc->name;          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_UNLINK,                                       client3_1_unlink_cbk, NULL, @@ -2798,9 +3302,16 @@ client3_1_unlink (call_frame_t *frame, xlator_t *this,          if (ret) {                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (unlink, frame, -1, op_errno, NULL, NULL); +        CLIENT_STACK_UNWIND (unlink, frame, -1, op_errno, NULL, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -2833,9 +3344,12 @@ client3_1_rmdir (call_frame_t *frame, xlator_t *this,                                         !uuid_is_null (*((uuid_t*)req.pargfid)),                                         unwind, op_errno, EINVAL);          req.bname = (char *)args->loc->name; -        req.flags = args->flags; +        req.xflags = args->flags;          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_RMDIR, client3_1_rmdir_cbk, NULL,                                       NULL, 0, NULL, 0, @@ -2843,9 +3357,15 @@ client3_1_rmdir (call_frame_t *frame, xlator_t *this,          if (ret) {                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (rmdir, frame, -1, op_errno, NULL, NULL); +        CLIENT_STACK_UNWIND (rmdir, frame, -1, op_errno, NULL, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -2889,12 +3409,13 @@ client3_1_symlink (call_frame_t *frame, xlator_t *this,                                         unwind, op_errno, EINVAL);          req.linkname = (char *)args->linkname;          req.bname    = (char *)args->loc->name; - -        GF_PROTOCOL_DICT_SERIALIZE (this, args->dict, (&req.dict.dict_val), -                                    req.dict.dict_len, op_errno, unwind); +        req.umask = args->umask;          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_SYMLINK, client3_1_symlink_cbk,                                       NULL,  NULL, 0, NULL, @@ -2903,18 +3424,18 @@ client3_1_symlink (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } -        if (req.dict.dict_val) { -                GF_FREE (req.dict.dict_val); -        } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind:          CLIENT_STACK_UNWIND (symlink, frame, -1, op_errno, NULL, NULL, NULL, -                             NULL); +                             NULL, NULL); + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); -        if (req.dict.dict_val) { -                GF_FREE (req.dict.dict_val); -        }          return 0;  } @@ -2959,6 +3480,9 @@ client3_1_rename (call_frame_t *frame, xlator_t *this,          req.newbname = (char *)args->newloc->name;          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_RENAME, client3_1_rename_cbk, NULL,                                       NULL, 0, NULL, 0, @@ -2967,10 +3491,17 @@ client3_1_rename (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind:          CLIENT_STACK_UNWIND (rename, frame, -1, op_errno, NULL, NULL, NULL, -                             NULL, NULL); +                             NULL, NULL, NULL); + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -3024,6 +3555,9 @@ client3_1_link (call_frame_t *frame, xlator_t *this,          req.newbname = (char *)args->newloc->name;          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_LINK, client3_1_link_cbk, NULL,                                       NULL, 0, NULL, 0, NULL, @@ -3032,9 +3566,15 @@ client3_1_link (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (link, frame, -1, op_errno, NULL, NULL, NULL, NULL); +        CLIENT_STACK_UNWIND (link, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -3079,15 +3619,13 @@ client3_1_mknod (call_frame_t *frame, xlator_t *this,          req.bname  = (char *)args->loc->name;          req.mode   = args->mode;          req.dev    = args->rdev; -        if (args->dict) { -                GF_PROTOCOL_DICT_SERIALIZE (this, args->dict, -                                            (&req.dict.dict_val), -                                            req.dict.dict_len, -                                            op_errno, unwind); -        } +        req.umask = args->umask;          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_MKNOD, client3_1_mknod_cbk, NULL,                                       NULL, 0, NULL, 0, @@ -3095,17 +3633,17 @@ client3_1_mknod (call_frame_t *frame, xlator_t *this,          if (ret) {                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } -        if (req.dict.dict_val) { -                GF_FREE (req.dict.dict_val); -        } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind:          CLIENT_STACK_UNWIND (mknod, frame, -1, op_errno, NULL, NULL, NULL, -                             NULL); +                             NULL, NULL); + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); -        if (req.dict.dict_val) { -                GF_FREE (req.dict.dict_val); -        }          return 0;  } @@ -3150,15 +3688,13 @@ client3_1_mkdir (call_frame_t *frame, xlator_t *this,          req.bname = (char *)args->loc->name;          req.mode  = args->mode; -        if (args->dict) { -                GF_PROTOCOL_DICT_SERIALIZE (this, args->dict, -                                            (&req.dict.dict_val), -                                            req.dict.dict_len, -                                            op_errno, unwind); -        } +        req.umask = args->umask;          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_MKDIR, client3_1_mkdir_cbk, NULL,                                       NULL, 0, NULL, 0, @@ -3166,17 +3702,17 @@ client3_1_mkdir (call_frame_t *frame, xlator_t *this,          if (ret) {                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } -        if (req.dict.dict_val) { -                GF_FREE (req.dict.dict_val); -        } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind:          CLIENT_STACK_UNWIND (mkdir, frame, -1, op_errno, NULL, NULL, NULL, -                             NULL); +                             NULL, NULL); + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); -        if (req.dict.dict_val) { -                GF_FREE (req.dict.dict_val); -        }          return 0;  } @@ -3222,15 +3758,13 @@ client3_1_create (call_frame_t *frame, xlator_t *this,          req.bname = (char *)args->loc->name;          req.mode  = args->mode;          req.flags = gf_flags_from_flags (args->flags); -        if (args->dict) { -                GF_PROTOCOL_DICT_SERIALIZE (this, args->dict, -                                            (&req.dict.dict_val), -                                            req.dict.dict_len, -                                            op_errno, unwind); -        } +        req.umask = args->umask;          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_CREATE, client3_1_create_cbk, NULL,                                       NULL, 0, NULL, 0, @@ -3239,17 +3773,17 @@ client3_1_create (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } -        if (req.dict.dict_val) { -                GF_FREE (req.dict.dict_val); -        } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind:          CLIENT_STACK_UNWIND (create, frame, -1, op_errno, NULL, NULL, NULL, -                             NULL, NULL); +                             NULL, NULL, NULL); + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); -        if (req.dict.dict_val) { -                GF_FREE (req.dict.dict_val); -        }          return 0;  } @@ -3281,7 +3815,6 @@ client3_1_open (call_frame_t *frame, xlator_t *this,          local->fd = fd_ref (args->fd);          local->flags = args->flags; -        local->wbflags = args->wbflags;          loc_copy (&local->loc, args->loc);          frame->local = local; @@ -3294,10 +3827,12 @@ client3_1_open (call_frame_t *frame, xlator_t *this,                                         !uuid_is_null (*((uuid_t*)req.gfid)),                                         unwind, op_errno, EINVAL);          req.flags = gf_flags_from_flags (args->flags); -        req.wbflags = args->wbflags;          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_OPEN, client3_1_open_cbk, NULL,                                       NULL, 0, NULL, 0, NULL, @@ -3306,9 +3841,15 @@ client3_1_open (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (open, frame, -1, op_errno, NULL); +        CLIENT_STACK_UNWIND (open, frame, -1, op_errno, NULL, NULL); + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val);          return 0;  } @@ -3383,6 +3924,9 @@ client3_1_readv (call_frame_t *frame, xlator_t *this,          rsp_iobref = NULL;          frame->local = local; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_READ, client3_1_readv_cbk, NULL,                                       NULL, 0, &rsp_vec, 1, @@ -3392,6 +3936,9 @@ client3_1_readv (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind:          if (rsp_iobuf) { @@ -3402,7 +3949,10 @@ unwind:                  iobref_unref (rsp_iobref);          } -        CLIENT_STACK_UNWIND (readv, frame, -1, op_errno, NULL, 0, NULL, NULL); +        CLIENT_STACK_UNWIND (readv, frame, -1, op_errno, NULL, 0, NULL, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -3446,10 +3996,16 @@ client3_1_writev (call_frame_t *frame, xlator_t *this, void *data)                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (writev, frame, -1, op_errno, NULL, NULL); +        CLIENT_STACK_UNWIND (writev, frame, -1, op_errno, NULL, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -3489,6 +4045,9 @@ client3_1_flush (call_frame_t *frame, xlator_t *this,          req.fd = remote_fd;          memcpy (req.gfid, args->fd->inode->gfid, 16); +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_FLUSH, client3_1_flush_cbk, NULL,                                       NULL, 0, NULL, 0, @@ -3496,10 +4055,18 @@ client3_1_flush (call_frame_t *frame, xlator_t *this,          if (ret) {                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); + +          return 0;  unwind: -        CLIENT_STACK_UNWIND (flush, frame, -1, op_errno); +        CLIENT_STACK_UNWIND (flush, frame, -1, op_errno, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -3537,10 +4104,17 @@ client3_1_fsync (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (fsync, frame, -1, op_errno, NULL, NULL); +        CLIENT_STACK_UNWIND (fsync, frame, -1, op_errno, NULL, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -3568,6 +4142,9 @@ client3_1_fstat (call_frame_t *frame, xlator_t *this,          req.fd = remote_fd;          memcpy (req.gfid, args->fd->inode->gfid, 16); +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_FSTAT, client3_1_fstat_cbk, NULL,                                       NULL, 0, NULL, 0, @@ -3576,10 +4153,16 @@ client3_1_fstat (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (fstat, frame, -1, op_errno, NULL); +        CLIENT_STACK_UNWIND (fstat, frame, -1, op_errno, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -3632,10 +4215,16 @@ client3_1_opendir (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (opendir, frame, -1, op_errno, NULL); +        CLIENT_STACK_UNWIND (opendir, frame, -1, op_errno, NULL, NULL); + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val);          return 0;  } @@ -3666,6 +4255,9 @@ client3_1_fsyncdir (call_frame_t *frame, xlator_t *this, void *data)          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_FSYNCDIR, client3_1_fsyncdir_cbk,                                       NULL, NULL, 0, @@ -3675,10 +4267,16 @@ client3_1_fsyncdir (call_frame_t *frame, xlator_t *this, void *data)                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (fsyncdir, frame, -1, op_errno); +        CLIENT_STACK_UNWIND (fsyncdir, frame, -1, op_errno, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -3716,6 +4314,9 @@ client3_1_statfs (call_frame_t *frame, xlator_t *this,          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_STATFS, client3_1_statfs_cbk, NULL,                                       NULL, 0, NULL, 0, @@ -3723,10 +4324,17 @@ client3_1_statfs (call_frame_t *frame, xlator_t *this,          if (ret) {                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (statfs, frame, -1, op_errno, NULL); +        CLIENT_STACK_UNWIND (statfs, frame, -1, op_errno, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -3758,8 +4366,8 @@ client3_1_setxattr (call_frame_t *frame, xlator_t *this,          GF_ASSERT_AND_GOTO_WITH_ERROR (this->name,                                         !uuid_is_null (*((uuid_t*)req.gfid)),                                         unwind, op_errno, EINVAL); -        if (args->dict) { -                GF_PROTOCOL_DICT_SERIALIZE (this, args->dict, +        if (args->xattr) { +                GF_PROTOCOL_DICT_SERIALIZE (this, args->xattr,                                              (&req.dict.dict_val),                                              req.dict.dict_len,                                              op_errno, unwind); @@ -3769,6 +4377,9 @@ client3_1_setxattr (call_frame_t *frame, xlator_t *this,          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_SETXATTR, client3_1_setxattr_cbk,                                       NULL, NULL, 0, NULL, 0, NULL, @@ -3776,16 +4387,21 @@ client3_1_setxattr (call_frame_t *frame, xlator_t *this,          if (ret) {                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } -        if (req.dict.dict_val) { +        if (req.dict.dict_val)                  GF_FREE (req.dict.dict_val); -        } + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val);          return 0;  unwind: -        CLIENT_STACK_UNWIND (setxattr, frame, -1, op_errno); -        if (req.dict.dict_val) { +        CLIENT_STACK_UNWIND (setxattr, frame, -1, op_errno, NULL); +        if (req.dict.dict_val)                  GF_FREE (req.dict.dict_val); -        } + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -3814,13 +4430,16 @@ client3_1_fsetxattr (call_frame_t *frame, xlator_t *this,          req.flags = args->flags;          memcpy (req.gfid, args->fd->inode->gfid, 16); -        if (args->dict) { -                GF_PROTOCOL_DICT_SERIALIZE (this, args->dict, +        if (args->xattr) { +                GF_PROTOCOL_DICT_SERIALIZE (this, args->xattr,                                              (&req.dict.dict_val),                                              req.dict.dict_len,                                              op_errno, unwind);          } +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_FSETXATTR, client3_1_fsetxattr_cbk,                                       NULL, NULL, 0, NULL, 0, NULL, @@ -3829,16 +4448,21 @@ client3_1_fsetxattr (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } -        if (req.dict.dict_val) { +        if (req.dict.dict_val)                  GF_FREE (req.dict.dict_val); -        } + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val);          return 0;  unwind: -        CLIENT_STACK_UNWIND (fsetxattr, frame, -1, op_errno); -        if (req.dict.dict_val) { +        CLIENT_STACK_UNWIND (fsetxattr, frame, -1, op_errno, NULL); +        if (req.dict.dict_val)                  GF_FREE (req.dict.dict_val); -        } + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -3909,6 +4533,9 @@ client3_1_fgetxattr (call_frame_t *frame, xlator_t *this,          }          memcpy (req.gfid, args->fd->inode->gfid, 16); +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_FGETXATTR,                                       client3_1_fgetxattr_cbk, NULL, @@ -3919,9 +4546,12 @@ client3_1_fgetxattr (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (fgetxattr, frame, -1, op_errno, NULL); +        CLIENT_STACK_UNWIND (fgetxattr, frame, -1, op_errno, NULL, NULL);          if (rsp_iobuf) {                  iobuf_unref (rsp_iobuf); @@ -3930,6 +4560,8 @@ unwind:          if (rsp_iobref) {                  iobref_unref (rsp_iobref);          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val);          return 0;  } @@ -4032,6 +4664,9 @@ client3_1_getxattr (call_frame_t *frame, xlator_t *this,                  }          } +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_GETXATTR,                                       client3_1_getxattr_cbk, NULL, @@ -4042,6 +4677,9 @@ client3_1_getxattr (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind:          if (rsp_iobuf) { @@ -4052,7 +4690,10 @@ unwind:                  iobref_unref (rsp_iobref);          } -        CLIENT_STACK_UNWIND (getxattr, frame, op_ret, op_errno, dict); +        CLIENT_STACK_UNWIND (getxattr, frame, op_ret, op_errno, dict, NULL); + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val);          return 0;  } @@ -4121,8 +4762,8 @@ client3_1_xattrop (call_frame_t *frame, xlator_t *this,          GF_ASSERT_AND_GOTO_WITH_ERROR (this->name,                                         !uuid_is_null (*((uuid_t*)req.gfid)),                                         unwind, op_errno, EINVAL); -        if (args->dict) { -                GF_PROTOCOL_DICT_SERIALIZE (this, args->dict, +        if (args->xattr) { +                GF_PROTOCOL_DICT_SERIALIZE (this, args->xattr,                                              (&req.dict.dict_val),                                              req.dict.dict_len,                                              op_errno, unwind); @@ -4132,6 +4773,9 @@ client3_1_xattrop (call_frame_t *frame, xlator_t *this,          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_XATTROP,                                       client3_1_xattrop_cbk, NULL, @@ -4142,12 +4786,15 @@ client3_1_xattrop (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } -        if (req.dict.dict_val) { +        if (req.dict.dict_val)                  GF_FREE (req.dict.dict_val); -        } + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (xattrop, frame, -1, op_errno, NULL); +        CLIENT_STACK_UNWIND (xattrop, frame, -1, op_errno, NULL, NULL);          if (req.dict.dict_val) {                  GF_FREE (req.dict.dict_val); @@ -4160,6 +4807,8 @@ unwind:          if (rsp_iobref) {                  iobref_unref (rsp_iobref);          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val);          return 0;  } @@ -4225,13 +4874,16 @@ client3_1_fxattrop (call_frame_t *frame, xlator_t *this,          local->iobref = rsp_iobref;          rsp_iobref = NULL; -        if (args->dict) { -                GF_PROTOCOL_DICT_SERIALIZE (this, args->dict, +        if (args->xattr) { +                GF_PROTOCOL_DICT_SERIALIZE (this, args->xattr,                                              (&req.dict.dict_val),                                              req.dict.dict_len,                                              op_errno, unwind);          } +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_FXATTROP,                                       client3_1_fxattrop_cbk, NULL, @@ -4242,31 +4894,32 @@ client3_1_fxattrop (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } -        if (req.dict.dict_val) { +        if (req.dict.dict_val)                  GF_FREE (req.dict.dict_val); -        } + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val);          return 0;  unwind: -        CLIENT_STACK_UNWIND (fxattrop, frame, -1, op_errno, NULL); +        CLIENT_STACK_UNWIND (fxattrop, frame, -1, op_errno, NULL, NULL); -        if (req.dict.dict_val) { +        if (req.dict.dict_val)                  GF_FREE (req.dict.dict_val); -        } -        if (rsp_iobref) { +        if (rsp_iobref)                  iobref_unref (rsp_iobref); -        } -        if (rsp_iobuf) { +        if (rsp_iobuf)                  iobuf_unref (rsp_iobuf); -        } + +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val);          return 0;  } -  int32_t  client3_1_removexattr (call_frame_t *frame, xlator_t *this,                         void *data) @@ -4297,6 +4950,9 @@ client3_1_removexattr (call_frame_t *frame, xlator_t *this,          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_REMOVEXATTR,                                       client3_1_removexattr_cbk, NULL, @@ -4306,9 +4962,15 @@ client3_1_removexattr (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (removexattr, frame, -1, op_errno); +        CLIENT_STACK_UNWIND (removexattr, frame, -1, op_errno, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -4339,6 +5001,9 @@ client3_1_fremovexattr (call_frame_t *frame, xlator_t *this,          req.name = (char *)args->name;          req.fd = remote_fd; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_FREMOVEXATTR,                                       client3_1_fremovexattr_cbk, NULL, @@ -4348,9 +5013,15 @@ client3_1_fremovexattr (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (fremovexattr, frame, -1, op_errno); +        CLIENT_STACK_UNWIND (fremovexattr, frame, -1, op_errno, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -4421,9 +5092,15 @@ client3_1_lk (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (lk, frame, -1, op_errno, NULL); +        CLIENT_STACK_UNWIND (lk, frame, -1, op_errno, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -4487,6 +5164,9 @@ client3_1_inodelk (call_frame_t *frame, xlator_t *this,          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_INODELK,                                       client3_1_inodelk_cbk, NULL, @@ -4496,9 +5176,15 @@ client3_1_inodelk (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (inodelk, frame, -1, op_errno); +        CLIENT_STACK_UNWIND (inodelk, frame, -1, op_errno, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -4556,6 +5242,9 @@ client3_1_finodelk (call_frame_t *frame, xlator_t *this,          gf_proto_flock_from_flock (&req.flock, args->flock);          memcpy (req.gfid, args->fd->inode->gfid, 16); +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_FINODELK,                                       client3_1_finodelk_cbk, NULL, @@ -4565,9 +5254,14 @@ client3_1_finodelk (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val);          return 0;  unwind: -        CLIENT_STACK_UNWIND (finodelk, frame, -1, op_errno); +        CLIENT_STACK_UNWIND (finodelk, frame, -1, op_errno, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -4609,6 +5303,9 @@ client3_1_entrylk (call_frame_t *frame, xlator_t *this,          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_ENTRYLK,                                       client3_1_entrylk_cbk, NULL, @@ -4618,9 +5315,15 @@ client3_1_entrylk (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (entrylk, frame, -1, op_errno); +        CLIENT_STACK_UNWIND (entrylk, frame, -1, op_errno, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -4656,6 +5359,9 @@ client3_1_fentrylk (call_frame_t *frame, xlator_t *this,          }          memcpy (req.gfid, args->fd->inode->gfid, 16); +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_FENTRYLK,                                       client3_1_fentrylk_cbk, NULL, @@ -4665,9 +5371,15 @@ client3_1_fentrylk (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (fentrylk, frame, -1, op_errno); +        CLIENT_STACK_UNWIND (fentrylk, frame, -1, op_errno, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -4695,6 +5407,9 @@ client3_1_rchecksum (call_frame_t *frame, xlator_t *this,          req.offset = args->offset;          req.fd     = remote_fd; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_RCHECKSUM,                                       client3_1_rchecksum_cbk, NULL, @@ -4705,9 +5420,15 @@ client3_1_rchecksum (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (rchecksum, frame, -1, op_errno, 0, NULL); +        CLIENT_STACK_UNWIND (rchecksum, frame, -1, op_errno, 0, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -4782,6 +5503,8 @@ client3_1_readdir (call_frame_t *frame, xlator_t *this,          local->cmd = remote_fd;          memcpy (req.gfid, args->fd->inode->gfid, 16); +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind);          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_READDIR, @@ -4795,6 +5518,9 @@ client3_1_readdir (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: @@ -4806,7 +5532,10 @@ unwind:                  iobuf_unref (rsp_iobuf);          } -        CLIENT_STACK_UNWIND (readdir, frame, -1, op_errno, NULL); +        CLIENT_STACK_UNWIND (readdir, frame, -1, op_errno, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -4882,12 +5611,9 @@ client3_1_readdirp (call_frame_t *frame, xlator_t *this,          req.fd = remote_fd;          memcpy (req.gfid, args->fd->inode->gfid, 16); -        if (args->dict) { -                GF_PROTOCOL_DICT_SERIALIZE (this, args->dict, -                                            (&req.dict.dict_val), -                                            req.dict.dict_len, -                                            op_errno, unwind); -        } +        /* dict itself is 'xdata' here */ +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.dict.dict_val), +                                    req.dict.dict_len, op_errno, unwind);          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_READDIRP, @@ -4915,7 +5641,7 @@ unwind:          if (req.dict.dict_val)                  GF_FREE (req.dict.dict_val); -        CLIENT_STACK_UNWIND (readdirp, frame, -1, op_errno, NULL); +        CLIENT_STACK_UNWIND (readdirp, frame, -1, op_errno, NULL, NULL);          return 0;  } @@ -4951,6 +5677,9 @@ client3_1_setattr (call_frame_t *frame, xlator_t *this,          conf = this->private; +        GF_PROTOCOL_DICT_SERIALIZE (this, args->xdata, (&req.xdata.xdata_val), +                                    req.xdata.xdata_len, op_errno, unwind); +          ret = client_submit_request (this, &req, frame, conf->fops,                                       GFS3_OP_SETATTR,                                       client3_1_setattr_cbk, NULL, @@ -4960,9 +5689,15 @@ client3_1_setattr (call_frame_t *frame, xlator_t *this,                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (setattr, frame, -1, op_errno, NULL, NULL); +        CLIENT_STACK_UNWIND (setattr, frame, -1, op_errno, NULL, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } @@ -4997,9 +5732,15 @@ client3_1_fsetattr (call_frame_t *frame, xlator_t *this, void *data)                  gf_log (this->name, GF_LOG_WARNING, "failed to send the fop");          } +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  unwind: -        CLIENT_STACK_UNWIND (fsetattr, frame, -1, op_errno, NULL, NULL); +        CLIENT_STACK_UNWIND (fsetattr, frame, -1, op_errno, NULL, NULL, NULL); +        if (req.xdata.xdata_val) +                GF_FREE (req.xdata.xdata_val); +          return 0;  } diff --git a/xlators/protocol/server/src/server-helpers.c b/xlators/protocol/server/src/server-helpers.c index adcf9c1f1..7ccd629e7 100644 --- a/xlators/protocol/server/src/server-helpers.c +++ b/xlators/protocol/server/src/server-helpers.c @@ -116,6 +116,11 @@ free_state (server_state_t *state)                  state->dict = NULL;          } +        if (state->xdata) { +                dict_unref (state->xdata); +                state->xdata = NULL; +        } +          if (state->volume)                  GF_FREE ((void *)state->volume); @@ -249,7 +254,7 @@ out:  static int  server_nop_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                int32_t op_ret, int32_t op_errno) +                int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          int             ret   = -1;          server_state_t *state = NULL; @@ -334,7 +339,7 @@ do_lock_table_cleanup (xlator_t *this, server_connection_t *conn,                          STACK_WIND (tmp_frame, server_nop_cbk, bound_xl,                                      bound_xl->fops->finodelk,                                      locker->volume, -                                    locker->fd, F_SETLK, &flock); +                                    locker->fd, F_SETLK, &flock, NULL);                          fd_unref (locker->fd);                  } else {                          gf_log (this->name, GF_LOG_INFO, "inodelk released " @@ -343,7 +348,7 @@ do_lock_table_cleanup (xlator_t *this, server_connection_t *conn,                          STACK_WIND (tmp_frame, server_nop_cbk, bound_xl,                                      bound_xl->fops->inodelk,                                      locker->volume, -                                    &(locker->loc), F_SETLK, &flock); +                                    &(locker->loc), F_SETLK, &flock, NULL);                          loc_wipe (&locker->loc);                  } @@ -382,7 +387,7 @@ do_lock_table_cleanup (xlator_t *this, server_connection_t *conn,                                      bound_xl->fops->fentrylk,                                      locker->volume,                                      locker->fd, NULL, -                                    ENTRYLK_UNLOCK, ENTRYLK_WRLCK); +                                    ENTRYLK_UNLOCK, ENTRYLK_WRLCK, NULL);                          fd_unref (locker->fd);                  } else {                          gf_log (this->name, GF_LOG_INFO, "entrylk released " @@ -392,7 +397,7 @@ do_lock_table_cleanup (xlator_t *this, server_connection_t *conn,                                      bound_xl->fops->entrylk,                                      locker->volume,                                      &(locker->loc), NULL, -                                    ENTRYLK_UNLOCK, ENTRYLK_WRLCK); +                                    ENTRYLK_UNLOCK, ENTRYLK_WRLCK, NULL);                          loc_wipe (&locker->loc);                  } @@ -411,7 +416,7 @@ out:  static int  server_connection_cleanup_flush_cbk (call_frame_t *frame, void *cookie,                                       xlator_t *this, int32_t op_ret, -                                     int32_t op_errno) +                                     int32_t op_errno, dict_t *xdata)  {          int32_t ret = -1;          fd_t *fd = NULL; @@ -484,7 +489,7 @@ do_fd_cleanup (xlator_t *this, server_connection_t *conn, call_frame_t *frame,                          STACK_WIND (tmp_frame,                                      server_connection_cleanup_flush_cbk, -                                    bound_xl, bound_xl->fops->flush, fd); +                                    bound_xl, bound_xl->fops->flush, fd, NULL);                  }          } diff --git a/xlators/protocol/server/src/server-resolve.c b/xlators/protocol/server/src/server-resolve.c index 38ab368c3..4992fb530 100644 --- a/xlators/protocol/server/src/server-resolve.c +++ b/xlators/protocol/server/src/server-resolve.c @@ -70,7 +70,8 @@ resolve_loc_touchup (call_frame_t *frame)  int  resolve_gfid_entry_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          int op_ret, int op_errno, inode_t *inode, -                        struct iatt *buf, dict_t *xattr, struct iatt *postparent) +                        struct iatt *buf, dict_t *xdata, +                        struct iatt *postparent)  {          server_state_t       *state = NULL;          server_resolve_t     *resolve = NULL; @@ -111,7 +112,7 @@ out:  int  resolve_gfid_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                    int op_ret, int op_errno, inode_t *inode, struct iatt *buf, -                  dict_t *xattr, struct iatt *postparent) +                  dict_t *xdata, struct iatt *postparent)  {          server_state_t       *state = NULL;          server_resolve_t     *resolve = NULL; diff --git a/xlators/protocol/server/src/server.h b/xlators/protocol/server/src/server.h index d000c8d36..94ceafd10 100644 --- a/xlators/protocol/server/src/server.h +++ b/xlators/protocol/server/src/server.h @@ -197,6 +197,9 @@ struct _server_state {          struct gf_flock      flock;          const char       *volume;          dir_entry_t      *entry; + +        dict_t           *xdata; +        mode_t            umask;  };  extern struct rpcsvc_program gluster_handshake_prog; diff --git a/xlators/protocol/server/src/server3_1-fops.c b/xlators/protocol/server/src/server3_1-fops.c index ef9a98f38..1c40a12cf 100644 --- a/xlators/protocol/server/src/server3_1-fops.c +++ b/xlators/protocol/server/src/server3_1-fops.c @@ -36,15 +36,13 @@  /* Callback function section */  int  server_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                   int32_t op_ret, int32_t op_errno, struct statvfs *buf) +                   int32_t op_ret, int32_t op_errno, struct statvfs *buf, +                   dict_t *xdata)  {          gfs3_statfs_rsp   rsp = {0,};          rpcsvc_request_t *req = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          if (op_ret >= 0) {                  gf_statfs_from_statfs (&rsp.statfs, buf); @@ -54,16 +52,27 @@ server_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          frame->root->unique, op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); + +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_statfs_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                     int32_t op_ret, int32_t op_errno, -                   inode_t *inode, struct iatt *stbuf, dict_t *dict, +                   inode_t *inode, struct iatt *stbuf, dict_t *xdata,                     struct iatt *postparent)  {          rpcsvc_request_t *req        = NULL; @@ -86,19 +95,12 @@ server_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  STACK_WIND (frame, server_lookup_cbk, BOUND_XL (frame),                              BOUND_XL (frame)->fops->lookup, -                            &fresh_loc, state->dict); +                            &fresh_loc, state->xdata);                  loc_wipe (&fresh_loc);                  return 0;          } -        if ((op_ret >= 0) && dict) { -                GF_PROTOCOL_DICT_SERIALIZE (this, dict, -                                            (&rsp.dict.dict_val), -                                            rsp.dict.dict_len, -                                            op_errno, out); -        } -          gf_stat_from_iatt (&rsp.postparent, postparent);          if (op_ret == 0) { @@ -129,6 +131,10 @@ server_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          }                  }          } + +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); +  out:          rsp.op_ret   = op_ret;          rsp.op_errno = gf_errno_to_error (op_errno); @@ -145,8 +151,8 @@ out:          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_lookup_rsp); -        if (rsp.dict.dict_val) -                GF_FREE (rsp.dict.dict_val); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val);          return 0;  } @@ -154,16 +160,17 @@ out:  int  server_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -               int32_t op_ret, int32_t op_errno, struct gf_flock *lock) +               int32_t op_ret, int32_t op_errno, struct gf_flock *lock, +               dict_t *xdata)  {          gfs3_lk_rsp       rsp   = {0,};          rpcsvc_request_t *req   = NULL;          server_state_t   *state = NULL; -        req           = frame->local; +        req = frame->local; -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out);          state = CALL_STATE(frame); @@ -193,16 +200,23 @@ server_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          op_ret, strerror (op_errno));          } +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_lk_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_inodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                    int32_t op_ret, int32_t op_errno) +                    int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          gf_common_rsp        rsp   = {0,};          server_connection_t *conn  = NULL; @@ -211,8 +225,8 @@ server_inodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          req           = frame->local; -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out);          conn  = SERVER_CONNECTION(frame);          state = CALL_STATE(frame); @@ -235,26 +249,30 @@ server_inodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          "--", op_ret, strerror (op_errno));          } +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gf_common_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_finodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                     int32_t op_ret, int32_t op_errno) +                     int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          gf_common_rsp        rsp   = {0,};          server_state_t      *state = NULL;          server_connection_t *conn  = NULL;          rpcsvc_request_t    *req   = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          conn = SERVER_CONNECTION(frame);          state = CALL_STATE(frame); @@ -277,25 +295,32 @@ server_finodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gf_common_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_entrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                    int32_t op_ret, int32_t op_errno) +                    int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          server_connection_t *conn  = NULL;          server_state_t      *state = NULL;          rpcsvc_request_t    *req   = NULL;          gf_common_rsp        rsp   = {0,}; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          conn  = SERVER_CONNECTION(frame);          state = CALL_STATE(frame); @@ -318,26 +343,33 @@ server_entrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          "--", op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gf_common_rsp); + +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_fentrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                     int32_t op_ret, int32_t op_errno) +                     int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          gf_common_rsp        rsp   = {0,};          server_connection_t *conn  = NULL;          server_state_t      *state = NULL;          rpcsvc_request_t    *req   = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); - +        req   = frame->local;          conn  = SERVER_CONNECTION(frame);          state = CALL_STATE(frame);          if (op_ret >= 0) { @@ -358,27 +390,35 @@ server_fentrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gf_common_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_access_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                   int32_t op_ret, int32_t op_errno) +                   int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          gf_common_rsp     rsp = {0,};          rpcsvc_request_t *req = NULL;          server_state_t   *state = NULL; -        req           = frame->local; +        req = frame->local;          state = CALL_STATE(frame); -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno);          if (op_ret)                  gf_log (this->name, GF_LOG_INFO,                          "%"PRId64": ACCESS %s (%s) ==> %"PRId32" (%s)", @@ -386,26 +426,33 @@ server_access_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          state->loc.inode ? uuid_utoa (state->loc.inode->gfid) :                          "--", op_ret, strerror (op_errno)); +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gf_common_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                    int32_t op_ret, int32_t op_errno, struct iatt *preparent, -                  struct iatt *postparent) +                  struct iatt *postparent, dict_t *xdata)  {          gfs3_rmdir_rsp    rsp    = {0,};          server_state_t   *state  = NULL;          inode_t          *parent = NULL;          rpcsvc_request_t *req    = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          state = CALL_STATE(frame); @@ -432,9 +479,19 @@ server_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          "--", op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_rmdir_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  } @@ -442,17 +499,14 @@ int  server_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                    int32_t op_ret, int32_t op_errno, inode_t *inode,                    struct iatt *stbuf, struct iatt *preparent, -                  struct iatt *postparent) +                  struct iatt *postparent, dict_t *xdata)  {          gfs3_mkdir_rsp    rsp        = {0,};          server_state_t   *state      = NULL;          inode_t          *link_inode = NULL;          rpcsvc_request_t *req        = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          state = CALL_STATE(frame);          if (op_ret >= 0) { @@ -471,9 +525,19 @@ server_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_mkdir_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  } @@ -481,17 +545,14 @@ int  server_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                    int32_t op_ret, int32_t op_errno,                    inode_t *inode, struct iatt *stbuf, struct iatt *preparent, -                  struct iatt *postparent) +                  struct iatt *postparent, dict_t *xdata)  {          gfs3_mknod_rsp    rsp        = {0,};          server_state_t   *state      = NULL;          inode_t          *link_inode = NULL;          rpcsvc_request_t *req        = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          state = CALL_STATE(frame);          if (op_ret >= 0) { @@ -510,25 +571,31 @@ server_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_mknod_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val);          return 0;  }  int  server_fsyncdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                     int32_t op_ret, int32_t op_errno) +                     int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          gf_common_rsp     rsp   = {0,};          server_state_t   *state = NULL;          rpcsvc_request_t *req   = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          state = CALL_STATE(frame); @@ -540,22 +607,32 @@ server_fsyncdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gf_common_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                    int32_t op_ret, int32_t op_errno, gf_dirent_t *entries) +                    int32_t op_ret, int32_t op_errno, gf_dirent_t *entries, dict_t *xdata)  {          gfs3_readdir_rsp  rsp   = {0,};          server_state_t   *state = NULL;          rpcsvc_request_t *req   = NULL;          int               ret   = 0; -        req           = frame->local; +        req = frame->local;          state = CALL_STATE(frame);          if (op_ret > 0) { @@ -563,7 +640,7 @@ server_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  if (ret == -1) {                          op_ret   = -1;                          op_errno = ENOMEM; -                        goto unwind; +                        goto out;                  }          } else {                  /* (op_ret == 0) is valid, and means EOF, don't log for that */ @@ -573,40 +650,28 @@ server_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          state->fd ? uuid_utoa (state->fd->inode->gfid) : "--",                          op_ret, strerror (op_errno));          } -unwind: + +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out:          rsp.op_ret    = op_ret;          rsp.op_errno  = gf_errno_to_error (op_errno);          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_readdir_rsp); -        readdir_rsp_cleanup (&rsp); - -        return 0; -} - - -int -server_releasedir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                       int32_t op_ret, int32_t op_errno) -{ -        gf_common_rsp     rsp = {0,}; -        rpcsvc_request_t *req = NULL; +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); - -        server_submit_reply (frame, req, &rsp, NULL, 0, NULL, -                             (xdrproc_t)xdr_gf_common_rsp); +        readdir_rsp_cleanup (&rsp);          return 0;  }  int  server_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                    int32_t op_ret, int32_t op_errno, fd_t *fd) +                    int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)  {          server_connection_t *conn  = NULL;          server_state_t      *state = NULL; @@ -630,21 +695,28 @@ server_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          "--", op_ret, strerror (op_errno));          } -        req           = frame->local; +        req = frame->local; -        rsp.fd        = fd_no; +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.fd = fd_no;          rsp.op_ret    = op_ret;          rsp.op_errno  = gf_errno_to_error (op_errno);          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_opendir_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                        int32_t op_ret, int32_t op_errno) +                        int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          gf_common_rsp     rsp = {0,};          rpcsvc_request_t *req = NULL; @@ -653,8 +725,6 @@ server_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          req   = frame->local;          state = CALL_STATE(frame); -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno);          if (op_ret == -1)                  gf_log (this->name, GF_LOG_INFO,                          "%"PRId64": REMOVEXATTR %s (%s) ==> %"PRId32" (%s)", @@ -662,15 +732,25 @@ server_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          state->loc.inode ? uuid_utoa (state->loc.inode->gfid) :                          "--", op_ret, strerror (op_errno)); +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gf_common_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_fremovexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                         int32_t op_ret, int32_t op_errno) +                         int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          gf_common_rsp     rsp = {0,};          rpcsvc_request_t *req = NULL; @@ -679,8 +759,6 @@ server_fremovexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          req   = frame->local;          state = CALL_STATE(frame); -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno);          if (op_ret == -1)                  gf_log (this->name, GF_LOG_INFO,                          "%"PRId64": FREMOVEXATTR (%s) ==> %"PRId32" (%s)", @@ -689,15 +767,26 @@ server_fremovexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                                "--"),                          op_ret, strerror (op_errno)); +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gf_common_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                     int32_t op_ret, int32_t op_errno, dict_t *dict) +                     int32_t op_ret, int32_t op_errno, dict_t *dict, +                     dict_t *xdata)  {          gfs3_getxattr_rsp  rsp   = {0,};          rpcsvc_request_t  *req   = NULL; @@ -711,6 +800,10 @@ server_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                              rsp.dict.dict_len,                                              op_errno, out);          } + +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); +  out:          req               = frame->local; @@ -729,13 +822,17 @@ out:          if (rsp.dict.dict_val)                  GF_FREE (rsp.dict.dict_val); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_fgetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                      int32_t op_ret, int32_t op_errno, dict_t *dict) +                      int32_t op_ret, int32_t op_errno, dict_t *dict, +                      dict_t *xdata)  {          gfs3_fgetxattr_rsp  rsp   = {0,};          server_state_t     *state = NULL; @@ -750,6 +847,9 @@ server_fgetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                              op_errno, out);          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); +  out:          req               = frame->local; @@ -768,12 +868,15 @@ out:          if (rsp.dict.dict_val)                  GF_FREE (rsp.dict.dict_val); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                     int32_t op_ret, int32_t op_errno) +                     int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          gf_common_rsp     rsp = {0,};          rpcsvc_request_t *req = NULL; @@ -791,26 +894,35 @@ server_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          frame->root->unique, state->loc.path,                          state->loc.inode ? uuid_utoa (state->loc.inode->gfid) :                          "--", op_ret, strerror (op_errno)); + +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gf_common_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                      int32_t op_ret, int32_t op_errno) +                      int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          gf_common_rsp     rsp = {0,};          rpcsvc_request_t *req = NULL;          server_state_t      *state = NULL; -        req           = frame->local; +        req = frame->local;          state = CALL_STATE(frame); -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno);          if (op_ret == -1)                  gf_log (this->name, GF_LOG_INFO, @@ -819,9 +931,19 @@ server_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          state->fd ? uuid_utoa (state->fd->inode->gfid) : "--",                          op_ret, strerror (op_errno)); +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gf_common_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  } @@ -829,7 +951,8 @@ int  server_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                     int32_t op_ret, int32_t op_errno, struct iatt *stbuf,                     struct iatt *preoldparent, struct iatt *postoldparent, -                   struct iatt *prenewparent, struct iatt *postnewparent) +                   struct iatt *prenewparent, struct iatt *postnewparent, +                   dict_t *xdata)  {          gfs3_rename_rsp   rsp   = {0,};          server_state_t   *state = NULL; @@ -837,11 +960,7 @@ server_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          inode_t     *tmp_inode = NULL;          inode_t     *tmp_parent = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); - +        req   = frame->local;          state = CALL_STATE(frame);          if (op_ret == 0) { @@ -894,26 +1013,33 @@ server_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          state->loc.inode ? uuid_utoa (state->loc.inode->gfid) :                          "--", op_ret, strerror (op_errno)); +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_rename_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                     int32_t op_ret, int32_t op_errno, struct iatt *preparent, -                   struct iatt *postparent) +                   struct iatt *postparent, dict_t *xdata)  {          gfs3_unlink_rsp   rsp    = {0,};          server_state_t   *state  = NULL;          inode_t          *parent = NULL;          rpcsvc_request_t *req    = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          state = CALL_STATE(frame); @@ -943,9 +1069,19 @@ server_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          "--", op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_unlink_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  } @@ -953,17 +1089,14 @@ int  server_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                      int32_t op_ret, int32_t op_errno, inode_t *inode,                      struct iatt *stbuf, struct iatt *preparent, -                    struct iatt *postparent) +                    struct iatt *postparent, dict_t *xdata)  {          gfs3_symlink_rsp  rsp        = {0,};          server_state_t   *state      = NULL;          inode_t          *link_inode = NULL;          rpcsvc_request_t *req        = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          state = CALL_STATE(frame);          if (op_ret >= 0) { @@ -983,9 +1116,19 @@ server_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          "--", op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_symlink_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  } @@ -994,17 +1137,14 @@ int  server_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                   int32_t op_ret, int32_t op_errno, inode_t *inode,                   struct iatt *stbuf, struct iatt *preparent, -                 struct iatt *postparent) +                 struct iatt *postparent, dict_t *xdata)  {          gfs3_link_rsp     rsp        = {0,};          server_state_t   *state      = NULL;          inode_t          *link_inode = NULL;          rpcsvc_request_t *req        = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          state = CALL_STATE(frame); @@ -1026,25 +1166,32 @@ server_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          state->loc.inode ? uuid_utoa (state->loc.inode->gfid) :                          "--", op_ret, strerror (op_errno)); +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_link_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf, -                     struct iatt *postbuf) +                     struct iatt *postbuf, dict_t *xdata)  {          gfs3_truncate_rsp  rsp   = {0,};          server_state_t    *state = NULL;          rpcsvc_request_t  *req   = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          state = CALL_STATE (frame); @@ -1059,24 +1206,31 @@ server_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          "--", op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_truncate_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                  int32_t op_ret, int32_t op_errno, struct iatt *stbuf) +                  int32_t op_ret, int32_t op_errno, struct iatt *stbuf, dict_t *xdata)  {          gfs3_fstat_rsp    rsp   = {0,};          server_state_t   *state = NULL;          rpcsvc_request_t *req   = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          state = CALL_STATE(frame); @@ -1090,25 +1244,32 @@ server_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_fstat_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                        int32_t op_ret, int32_t op_errno, struct iatt *prebuf, -                      struct iatt *postbuf) +                      struct iatt *postbuf, dict_t *xdata)  {          gfs3_ftruncate_rsp  rsp   = {0};          server_state_t     *state = NULL;          rpcsvc_request_t   *req   = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          state = CALL_STATE (frame); @@ -1123,24 +1284,31 @@ server_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_ftruncate_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                  int32_t op_ret, int32_t op_errno) +                  int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          gf_common_rsp     rsp   = {0,};          server_state_t   *state = NULL;          rpcsvc_request_t *req   = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          state = CALL_STATE(frame);          if (op_ret < 0) { @@ -1151,9 +1319,18 @@ server_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gf_common_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val);          return 0;  } @@ -1161,16 +1338,13 @@ server_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  int  server_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf, -                  struct iatt *postbuf) +                  struct iatt *postbuf, dict_t *xdata)  {          gfs3_fsync_rsp    rsp   = {0,};          server_state_t   *state = NULL;          rpcsvc_request_t *req   = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          state = CALL_STATE(frame); @@ -1185,25 +1359,32 @@ server_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_fsync_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf, -                   struct iatt *postbuf) +                   struct iatt *postbuf, dict_t *xdata)  {          gfs3_write_rsp    rsp   = {0,};          server_state_t   *state = NULL;          rpcsvc_request_t *req   = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          state = CALL_STATE(frame);          if (op_ret >= 0) { @@ -1217,9 +1398,19 @@ server_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_write_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  } @@ -1228,16 +1419,13 @@ int  server_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                    int32_t op_ret, int32_t op_errno,                    struct iovec *vector, int32_t count, -                  struct iatt *stbuf, struct iobref *iobref) +                  struct iatt *stbuf, struct iobref *iobref, dict_t *xdata)  {          gfs3_read_rsp     rsp   = {0,};          server_state_t   *state = NULL;          rpcsvc_request_t *req   = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          state = CALL_STATE(frame);          if (op_ret >= 0) { @@ -1251,27 +1439,34 @@ server_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, vector, count, iobref,                               (xdrproc_t)xdr_gfs3_read_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_rchecksum_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                        int32_t op_ret, int32_t op_errno, -                      uint32_t weak_checksum, uint8_t *strong_checksum) +                      uint32_t weak_checksum, uint8_t *strong_checksum, dict_t *xdata)  {          gfs3_rchecksum_rsp  rsp = {0,};          rpcsvc_request_t   *req = NULL;          server_state_t      *state = NULL; -        req           = frame->local; +        req = frame->local;          state = CALL_STATE(frame); -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); -          if (op_ret >= 0) {                  rsp.weak_checksum = weak_checksum; @@ -1285,16 +1480,26 @@ server_rchecksum_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          state->fd ? uuid_utoa (state->fd->inode->gfid) : "--",                          op_ret, strerror (op_errno)); +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_rchecksum_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                 int32_t op_ret, int32_t op_errno, fd_t *fd) +                 int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)  {          server_connection_t *conn  = NULL;          server_state_t      *state = NULL; @@ -1317,14 +1522,21 @@ server_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          "--", op_ret, strerror (op_errno));          } -        req           = frame->local; +        req    = frame->local; +        rsp.fd = fd_no; -        rsp.fd        = fd_no; +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out:          rsp.op_ret    = op_ret;          rsp.op_errno  = gf_errno_to_error (op_errno);          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_open_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  } @@ -1333,7 +1545,7 @@ int  server_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                     int32_t op_ret, int32_t op_errno,                     fd_t *fd, inode_t *inode, struct iatt *stbuf, -                   struct iatt *preparent, struct iatt *postparent) +                   struct iatt *preparent, struct iatt *postparent, dict_t *xdata)  {          server_connection_t *conn       = NULL;          server_state_t      *state      = NULL; @@ -1395,6 +1607,9 @@ server_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          "--", op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); +  out:          req           = frame->local; @@ -1405,25 +1620,24 @@ out:          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_create_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                       int32_t op_ret, int32_t op_errno, const char *buf, -                     struct iatt *stbuf) +                     struct iatt *stbuf, dict_t *xdata)  {          gfs3_readlink_rsp  rsp   = {0,};          server_state_t    *state = NULL;          rpcsvc_request_t  *req   = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); - +        req = frame->local; -        state  = CALL_STATE(frame); +        state = CALL_STATE(frame);          if (op_ret >= 0) {                  gf_stat_from_iatt (&rsp.buf, stbuf); @@ -1439,24 +1653,31 @@ server_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (!rsp.path)                  rsp.path = ""; +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_readlink_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                 int32_t op_ret, int32_t op_errno, struct iatt *stbuf) +                 int32_t op_ret, int32_t op_errno, struct iatt *stbuf, dict_t *xdata)  {          gfs3_stat_rsp     rsp   = {0,};          server_state_t   *state = NULL;          rpcsvc_request_t *req   = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); +        req = frame->local;          state  = CALL_STATE (frame); @@ -1470,9 +1691,19 @@ server_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          "--", op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_stat_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  } @@ -1480,18 +1711,14 @@ server_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  int  server_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                      int32_t op_ret, int32_t op_errno, -                    struct iatt *statpre, struct iatt *statpost) +                    struct iatt *statpre, struct iatt *statpost, dict_t *xdata)  {          gfs3_setattr_rsp  rsp   = {0,};          server_state_t   *state = NULL;          rpcsvc_request_t *req   = NULL; -        req           = frame->local; - -        rsp.op_ret    = op_ret; -        rsp.op_errno  = gf_errno_to_error (op_errno); - -        state  = CALL_STATE (frame); +        req = frame->local; +        state = CALL_STATE (frame);          if (op_ret == 0) {                  gf_stat_from_iatt (&rsp.statpre, statpre); @@ -1504,16 +1731,26 @@ server_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          "--", op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +out: +        rsp.op_ret    = op_ret; +        rsp.op_errno  = gf_errno_to_error (op_errno); +          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_setattr_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_fsetattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                       int32_t op_ret, int32_t op_errno, -                     struct iatt *statpre, struct iatt *statpost) +                     struct iatt *statpre, struct iatt *statpost, dict_t *xdata)  {          gfs3_fsetattr_rsp  rsp   = {0,};          server_state_t    *state = NULL; @@ -1532,21 +1769,29 @@ server_fsetattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          op_ret, strerror (op_errno));          } -        req           = frame->local; +        req = frame->local; + +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); +out:          rsp.op_ret    = op_ret;          rsp.op_errno  = gf_errno_to_error (op_errno);          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_fsetattr_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                    int32_t op_ret, int32_t op_errno, dict_t *dict) +                    int32_t op_ret, int32_t op_errno, dict_t *dict, +                    dict_t *xdata)  {          gfs3_xattrop_rsp  rsp   = {0,};          server_state_t   *state = NULL; @@ -1569,6 +1814,10 @@ server_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                              rsp.dict.dict_len,                                              op_errno, out);          } + +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); +  out:          req               = frame->local; @@ -1588,13 +1837,17 @@ out:          if (rsp.dict.dict_val)                  GF_FREE (rsp.dict.dict_val); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_fxattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                     int32_t op_ret, int32_t op_errno, dict_t *dict) +                     int32_t op_ret, int32_t op_errno, dict_t *dict, +                     dict_t *xdata)  {          gfs3_xattrop_rsp  rsp   = {0,};          server_state_t   *state = NULL; @@ -1617,6 +1870,11 @@ server_fxattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                              rsp.dict.dict_len,                                              op_errno, out);          } + +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); + +  out:          req               = frame->local; @@ -1636,13 +1894,16 @@ out:          if (rsp.dict.dict_val)                  GF_FREE (rsp.dict.dict_val); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          return 0;  }  int  server_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                     int32_t op_ret, int32_t op_errno, gf_dirent_t *entries) +                     int32_t op_ret, int32_t op_errno, gf_dirent_t *entries, dict_t *xdata)  {          gfs3_readdirp_rsp  rsp   = {0,};          server_state_t    *state = NULL; @@ -1672,6 +1933,9 @@ server_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          op_ret, strerror (op_errno));          } +        GF_PROTOCOL_DICT_SERIALIZE (this, xdata, (&rsp.xdata.xdata_val), +                                    rsp.xdata.xdata_len, op_errno, out); +  out:          rsp.op_ret    = op_ret;          rsp.op_errno  = gf_errno_to_error (op_errno); @@ -1679,6 +1943,9 @@ out:          server_submit_reply (frame, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gfs3_readdirp_rsp); +        if (rsp.xdata.xdata_val) +                GF_FREE (rsp.xdata.xdata_val); +          readdirp_rsp_cleanup (&rsp);          return 0; @@ -1703,11 +1970,12 @@ server_rchecksum_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_rchecksum_cbk, bound_xl,                      bound_xl->fops->rchecksum, state->fd, -                    state->offset, state->size); +                    state->offset, state->size, state->xdata);          return 0;  err: -        server_rchecksum_cbk (frame, NULL, frame->this, op_ret, op_errno, 0, NULL); +        server_rchecksum_cbk (frame, NULL, frame->this, op_ret, op_errno, 0, +                              NULL, NULL);          return 0; @@ -1724,13 +1992,13 @@ server_lk_resume (call_frame_t *frame, xlator_t *bound_xl)                  goto err;          STACK_WIND (frame, server_lk_cbk, bound_xl, bound_xl->fops->lk, -                    state->fd, state->cmd, &state->flock); +                    state->fd, state->cmd, &state->flock, state->xdata);          return 0;  err:          server_lk_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                       state->resolve.op_errno, NULL); +                       state->resolve.op_errno, NULL, NULL);          return 0;  } @@ -1757,11 +2025,11 @@ server_rename_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_rename_cbk,                      bound_xl, bound_xl->fops->rename, -                    &state->loc, &state->loc2); +                    &state->loc, &state->loc2, state->xdata);          return 0;  err:          server_rename_cbk (frame, NULL, frame->this, op_ret, op_errno, -                           NULL, NULL, NULL, NULL, NULL); +                           NULL, NULL, NULL, NULL, NULL, NULL);          return 0;  } @@ -1790,12 +2058,12 @@ server_link_resume (call_frame_t *frame, xlator_t *bound_xl)          state->loc2.inode = inode_ref (state->loc.inode);          STACK_WIND (frame, server_link_cbk, bound_xl, bound_xl->fops->link, -                    &state->loc, &state->loc2); +                    &state->loc, &state->loc2, state->xdata);          return 0;  err:          server_link_cbk (frame, NULL, frame->this, op_ret, op_errno, -                         NULL, NULL, NULL, NULL); +                         NULL, NULL, NULL, NULL, NULL);          return 0;  } @@ -1813,12 +2081,12 @@ server_symlink_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_symlink_cbk,                      bound_xl, bound_xl->fops->symlink, -                    state->name, &state->loc, state->params); +                    state->name, &state->loc, state->umask, state->xdata);          return 0;  err:          server_symlink_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                            state->resolve.op_errno, NULL, NULL, NULL, NULL); +                            state->resolve.op_errno, NULL, NULL, NULL, NULL, NULL);          return 0;  } @@ -1835,11 +2103,11 @@ server_access_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_access_cbk,                      bound_xl, bound_xl->fops->access, -                    &state->loc, state->mask); +                    &state->loc, state->mask, state->xdata);          return 0;  err:          server_access_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                           state->resolve.op_errno); +                           state->resolve.op_errno, NULL);          return 0;  } @@ -1856,12 +2124,12 @@ server_fentrylk_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_fentrylk_cbk, bound_xl,                      bound_xl->fops->fentrylk,                      state->volume, state->fd, state->name, -                    state->cmd, state->type); +                    state->cmd, state->type, state->xdata);          return 0;  err:          server_fentrylk_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                             state->resolve.op_errno); +                             state->resolve.op_errno, NULL);          return 0;  } @@ -1879,11 +2147,11 @@ server_entrylk_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_entrylk_cbk,                      bound_xl, bound_xl->fops->entrylk,                      state->volume, &state->loc, state->name, -                    state->cmd, state->type); +                    state->cmd, state->type, state->xdata);          return 0;  err:          server_entrylk_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                            state->resolve.op_errno); +                            state->resolve.op_errno, NULL);          return 0;  } @@ -1899,13 +2167,13 @@ server_finodelk_resume (call_frame_t *frame, xlator_t *bound_xl)                  goto err;          STACK_WIND (frame, server_finodelk_cbk, bound_xl, -                    bound_xl->fops->finodelk, -                    state->volume, state->fd, state->cmd, &state->flock); +                    bound_xl->fops->finodelk, state->volume, state->fd, +                    state->cmd, &state->flock, state->xdata);          return 0;  err:          server_finodelk_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                             state->resolve.op_errno); +                             state->resolve.op_errno, NULL);          return 0;  } @@ -1920,13 +2188,13 @@ server_inodelk_resume (call_frame_t *frame, xlator_t *bound_xl)          if (state->resolve.op_ret != 0)                  goto err; -        STACK_WIND (frame, server_inodelk_cbk, -                    bound_xl, bound_xl->fops->inodelk, -                    state->volume, &state->loc, state->cmd, &state->flock); +        STACK_WIND (frame, server_inodelk_cbk, bound_xl, +                    bound_xl->fops->inodelk, state->volume, &state->loc, +                    state->cmd, &state->flock, state->xdata);          return 0;  err:          server_inodelk_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                            state->resolve.op_errno); +                            state->resolve.op_errno, NULL);          return 0;  } @@ -1940,12 +2208,12 @@ server_rmdir_resume (call_frame_t *frame, xlator_t *bound_xl)          if (state->resolve.op_ret != 0)                  goto err; -        STACK_WIND (frame, server_rmdir_cbk, -                    bound_xl, bound_xl->fops->rmdir, &state->loc, state->flags); +        STACK_WIND (frame, server_rmdir_cbk, bound_xl, bound_xl->fops->rmdir, +                    &state->loc, state->flags, state->xdata);          return 0;  err:          server_rmdir_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                          state->resolve.op_errno, NULL, NULL); +                          state->resolve.op_errno, NULL, NULL, NULL);          return 0;  } @@ -1964,12 +2232,12 @@ server_mkdir_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_mkdir_cbk,                      bound_xl, bound_xl->fops->mkdir, -                    &(state->loc), state->mode, state->params); +                    &(state->loc), state->mode, state->umask, state->xdata);          return 0;  err:          server_mkdir_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                          state->resolve.op_errno, NULL, NULL, NULL, NULL); +                          state->resolve.op_errno, NULL, NULL, NULL, NULL, NULL);          return 0;  } @@ -1989,12 +2257,12 @@ server_mknod_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_mknod_cbk,                      bound_xl, bound_xl->fops->mknod,                      &(state->loc), state->mode, state->dev, -                    state->params); +                    state->umask, state->xdata);          return 0;  err:          server_mknod_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                          state->resolve.op_errno, NULL, NULL, NULL, NULL); +                          state->resolve.op_errno, NULL, NULL, NULL, NULL, NULL);          return 0;  } @@ -2012,13 +2280,13 @@ server_fsyncdir_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_fsyncdir_cbk,                      bound_xl,                      bound_xl->fops->fsyncdir, -                    state->fd, state->flags); +                    state->fd, state->flags, state->xdata);          return 0;  err:          server_fsyncdir_cbk (frame, NULL, frame->this,                               state->resolve.op_ret, -                             state->resolve.op_errno); +                             state->resolve.op_errno, NULL);          return 0;  } @@ -2036,12 +2304,12 @@ server_readdir_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_readdir_cbk,                      bound_xl,                      bound_xl->fops->readdir, -                    state->fd, state->size, state->offset); +                    state->fd, state->size, state->offset, state->xdata);          return 0;  err:          server_readdir_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                            state->resolve.op_errno, NULL); +                            state->resolve.op_errno, NULL, NULL);          return 0;  } @@ -2062,7 +2330,7 @@ server_readdirp_resume (call_frame_t *frame, xlator_t *bound_xl)          return 0;  err:          server_readdirp_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                             state->resolve.op_errno, NULL); +                             state->resolve.op_errno, NULL, NULL);          return 0;  } @@ -2081,11 +2349,11 @@ server_opendir_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_opendir_cbk,                      bound_xl, bound_xl->fops->opendir, -                    &state->loc, state->fd); +                    &state->loc, state->fd, state->xdata);          return 0;  err:          server_opendir_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                            state->resolve.op_errno, NULL); +                            state->resolve.op_errno, NULL, NULL);          return 0;  } @@ -2102,12 +2370,12 @@ server_statfs_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_statfs_cbk,                      bound_xl, bound_xl->fops->statfs, -                    &state->loc); +                    &state->loc, state->xdata);          return 0;  err:          server_statfs_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                           state->resolve.op_errno, NULL); +                           state->resolve.op_errno, NULL, NULL);          return 0;  } @@ -2124,11 +2392,11 @@ server_removexattr_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_removexattr_cbk,                      bound_xl, bound_xl->fops->removexattr, -                    &state->loc, state->name); +                    &state->loc, state->name, state->xdata);          return 0;  err:          server_removexattr_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                                state->resolve.op_errno); +                                state->resolve.op_errno, NULL);          return 0;  } @@ -2144,11 +2412,11 @@ server_fremovexattr_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_fremovexattr_cbk,                      bound_xl, bound_xl->fops->fremovexattr, -                    state->fd, state->name); +                    state->fd, state->name, state->xdata);          return 0;  err:          server_fremovexattr_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                                 state->resolve.op_errno); +                                 state->resolve.op_errno, NULL);          return 0;  } @@ -2164,11 +2432,11 @@ server_fgetxattr_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_fgetxattr_cbk,                      bound_xl, bound_xl->fops->fgetxattr, -                    state->fd, state->name); +                    state->fd, state->name, state->xdata);          return 0;  err:          server_fgetxattr_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                              state->resolve.op_errno, NULL); +                              state->resolve.op_errno, NULL, NULL);          return 0;  } @@ -2185,11 +2453,11 @@ server_xattrop_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_xattrop_cbk,                      bound_xl, bound_xl->fops->xattrop, -                    &state->loc, state->flags, state->dict); +                    &state->loc, state->flags, state->dict, state->xdata);          return 0;  err:          server_xattrop_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                            state->resolve.op_errno, NULL); +                            state->resolve.op_errno, NULL, NULL);          return 0;  } @@ -2205,11 +2473,11 @@ server_fxattrop_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_fxattrop_cbk,                      bound_xl, bound_xl->fops->fxattrop, -                    state->fd, state->flags, state->dict); +                    state->fd, state->flags, state->dict, state->xdata);          return 0;  err:          server_fxattrop_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                             state->resolve.op_errno, NULL); +                             state->resolve.op_errno, NULL, NULL);          return 0;  } @@ -2225,11 +2493,11 @@ server_fsetxattr_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_setxattr_cbk,                      bound_xl, bound_xl->fops->fsetxattr, -                    state->fd, state->dict, state->flags); +                    state->fd, state->dict, state->flags, state->xdata);          return 0;  err:          server_fsetxattr_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                              state->resolve.op_errno); +                              state->resolve.op_errno, NULL);          return 0;  } @@ -2246,11 +2514,11 @@ server_unlink_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_unlink_cbk,                      bound_xl, bound_xl->fops->unlink, -                    &state->loc); +                    &state->loc, state->flags, state->xdata);          return 0;  err:          server_unlink_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                           state->resolve.op_errno, NULL, NULL); +                           state->resolve.op_errno, NULL, NULL, NULL);          return 0;  } @@ -2266,11 +2534,11 @@ server_truncate_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_truncate_cbk,                      bound_xl, bound_xl->fops->truncate, -                    &state->loc, state->offset); +                    &state->loc, state->offset, state->xdata);          return 0;  err:          server_truncate_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                             state->resolve.op_errno, NULL, NULL); +                             state->resolve.op_errno, NULL, NULL, NULL);          return 0;  } @@ -2288,11 +2556,11 @@ server_fstat_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_fstat_cbk,                      bound_xl, bound_xl->fops->fstat, -                    state->fd); +                    state->fd, state->xdata);          return 0;  err:          server_fstat_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                          state->resolve.op_errno, NULL); +                          state->resolve.op_errno, NULL, NULL);          return 0;  } @@ -2309,11 +2577,11 @@ server_setxattr_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_setxattr_cbk,                      bound_xl, bound_xl->fops->setxattr, -                    &state->loc, state->dict, state->flags); +                    &state->loc, state->dict, state->flags, state->xdata);          return 0;  err:          server_setxattr_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                             state->resolve.op_errno); +                             state->resolve.op_errno, NULL);          return 0;  } @@ -2331,11 +2599,11 @@ server_getxattr_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_getxattr_cbk,                      bound_xl, bound_xl->fops->getxattr, -                    &state->loc, state->name); +                    &state->loc, state->name, state->xdata);          return 0;  err:          server_getxattr_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                             state->resolve.op_errno, NULL); +                             state->resolve.op_errno, NULL, NULL);          return 0;  } @@ -2352,11 +2620,11 @@ server_ftruncate_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_ftruncate_cbk,                      bound_xl, bound_xl->fops->ftruncate, -                    state->fd, state->offset); +                    state->fd, state->offset, state->xdata);          return 0;  err:          server_ftruncate_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                              state->resolve.op_errno, NULL, NULL); +                              state->resolve.op_errno, NULL, NULL, NULL);          return 0;  } @@ -2373,11 +2641,11 @@ server_flush_resume (call_frame_t *frame, xlator_t *bound_xl)                  goto err;          STACK_WIND (frame, server_flush_cbk, -                    bound_xl, bound_xl->fops->flush, state->fd); +                    bound_xl, bound_xl->fops->flush, state->fd, state->xdata);          return 0;  err:          server_flush_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                          state->resolve.op_errno); +                          state->resolve.op_errno, NULL);          return 0;  } @@ -2395,11 +2663,11 @@ server_fsync_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_fsync_cbk,                      bound_xl, bound_xl->fops->fsync, -                    state->fd, state->flags); +                    state->fd, state->flags, state->xdata);          return 0;  err:          server_fsync_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                          state->resolve.op_errno, NULL, NULL); +                          state->resolve.op_errno, NULL, NULL, NULL);          return 0;  } @@ -2417,12 +2685,12 @@ server_writev_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_writev_cbk,                      bound_xl, bound_xl->fops->writev,                      state->fd, state->payload_vector, state->payload_count, -                    state->offset, state->flags, state->iobref); +                    state->offset, state->flags, state->iobref, state->xdata);          return 0;  err:          server_writev_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                           state->resolve.op_errno, NULL, NULL); +                           state->resolve.op_errno, NULL, NULL, NULL);          return 0;  } @@ -2439,12 +2707,12 @@ server_readv_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_readv_cbk,                      bound_xl, bound_xl->fops->readv, -                    state->fd, state->size, state->offset, state->flags); +                    state->fd, state->size, state->offset, state->flags, state->xdata);          return 0;  err:          server_readv_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                          state->resolve.op_errno, NULL, 0, NULL, NULL); +                          state->resolve.op_errno, NULL, 0, NULL, NULL, NULL);          return 0;  } @@ -2475,13 +2743,13 @@ server_create_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_create_cbk,                      bound_xl, bound_xl->fops->create,                      &(state->loc), state->flags, state->mode, -                    state->fd, state->params); +                    state->umask, state->fd, state->xdata);          return 0;  err:          server_create_cbk (frame, NULL, frame->this, state->resolve.op_ret,                             state->resolve.op_errno, NULL, NULL, NULL, -                           NULL, NULL); +                           NULL, NULL, NULL);          return 0;  } @@ -2501,12 +2769,12 @@ server_open_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_open_cbk,                      bound_xl, bound_xl->fops->open, -                    &state->loc, state->flags, state->fd, 0); +                    &state->loc, state->flags, state->fd, state->xdata);          return 0;  err:          server_open_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                         state->resolve.op_errno, NULL); +                         state->resolve.op_errno, NULL, NULL);          return 0;  } @@ -2523,11 +2791,11 @@ server_readlink_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_readlink_cbk,                      bound_xl, bound_xl->fops->readlink, -                    &state->loc, state->size); +                    &state->loc, state->size, state->xdata);          return 0;  err:          server_readlink_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                             state->resolve.op_errno, NULL, NULL); +                             state->resolve.op_errno, NULL, NULL, NULL);          return 0;  } @@ -2544,11 +2812,11 @@ server_fsetattr_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_fsetattr_cbk,                      bound_xl, bound_xl->fops->fsetattr, -                    state->fd, &state->stbuf, state->valid); +                    state->fd, &state->stbuf, state->valid, state->xdata);          return 0;  err:          server_fsetattr_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                             state->resolve.op_errno, NULL, NULL); +                             state->resolve.op_errno, NULL, NULL, NULL);          return 0;  } @@ -2566,11 +2834,11 @@ server_setattr_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_setattr_cbk,                      bound_xl, bound_xl->fops->setattr, -                    &state->loc, &state->stbuf, state->valid); +                    &state->loc, &state->stbuf, state->valid, state->xdata);          return 0;  err:          server_setattr_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                            state->resolve.op_errno, NULL, NULL); +                            state->resolve.op_errno, NULL, NULL, NULL);          return 0;  } @@ -2587,11 +2855,11 @@ server_stat_resume (call_frame_t *frame, xlator_t *bound_xl)                  goto err;          STACK_WIND (frame, server_stat_cbk, -                    bound_xl, bound_xl->fops->stat, &state->loc); +                    bound_xl, bound_xl->fops->stat, &state->loc, state->xdata);          return 0;  err:          server_stat_cbk (frame, NULL, frame->this, state->resolve.op_ret, -                         state->resolve.op_errno, NULL); +                         state->resolve.op_errno, NULL, NULL);          return 0;  } @@ -2612,7 +2880,7 @@ server_lookup_resume (call_frame_t *frame, xlator_t *bound_xl)          STACK_WIND (frame, server_lookup_cbk,                      bound_xl, bound_xl->fops->lookup, -                    &state->loc, state->dict); +                    &state->loc, state->xdata);          return 0;  err: @@ -2630,10 +2898,11 @@ err:  int  server_stat (rpcsvc_request_t *req)  { -        server_state_t *state                 = NULL; -        call_frame_t   *frame                 = NULL; -        gfs3_stat_req   args                  = {{0,},}; -        int             ret                   = -1; +        server_state_t *state    = NULL; +        call_frame_t   *frame    = NULL; +        gfs3_stat_req   args     = {{0,},}; +        int             ret      = -1; +        int             op_errno = 0;          if (!req)                  return 0; @@ -2664,9 +2933,22 @@ server_stat (rpcsvc_request_t *req)          state->resolve.type  = RESOLVE_MUST;          memcpy (state->resolve.gfid, args.gfid, 16); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); + +          ret = 0;          resolve_and_resume (frame, server_stat_resume); +  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -2678,6 +2960,7 @@ server_setattr (rpcsvc_request_t *req)          call_frame_t     *frame                 = NULL;          gfs3_setattr_req  args                  = {{0,},};          int               ret                   = -1; +        int               op_errno = 0;          if (!req)                  return 0; @@ -2709,9 +2992,21 @@ server_setattr (rpcsvc_request_t *req)          gf_stat_to_iatt (&args.stbuf, &state->stbuf);          state->valid = args.valid; +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_setattr_resume); +  out: +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; + +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); +          return ret;  } @@ -2723,6 +3018,7 @@ server_fsetattr (rpcsvc_request_t *req)          call_frame_t      *frame = NULL;          gfs3_fsetattr_req  args  = {0,};          int                ret   = -1; +        int                op_errno = 0;          if (!req)                  return ret; @@ -2754,9 +3050,21 @@ server_fsetattr (rpcsvc_request_t *req)          gf_stat_to_iatt (&args.stbuf, &state->stbuf);          state->valid = args.valid; +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_fsetattr_resume); +  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -2768,6 +3076,7 @@ server_readlink (rpcsvc_request_t *req)          call_frame_t      *frame                 = NULL;          gfs3_readlink_req  args                  = {{0,},};          int                ret                   = -1; +        int                op_errno = 0;          if (!req)                  return ret; @@ -2798,9 +3107,21 @@ server_readlink (rpcsvc_request_t *req)          state->size  = args.size; +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_readlink_resume); +  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -2810,7 +3131,6 @@ server_create (rpcsvc_request_t *req)  {          server_state_t  *state    = NULL;          call_frame_t    *frame    = NULL; -        dict_t          *params   = NULL;          gfs3_create_req  args     = {{0,},};          int              ret      = -1;          int              op_errno = 0; @@ -2841,16 +3161,10 @@ server_create (rpcsvc_request_t *req)                  goto out;          } -        /* Unserialize the dictionary */ -        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, params, -                                      (args.dict.dict_val), -                                      (args.dict.dict_len), ret, -                                      op_errno, out); - -        state->params = params;          state->resolve.bname  = gf_strdup (args.bname);          state->mode           = args.mode; +        state->umask          = args.umask;          state->flags          = gf_flags_to_flags (args.flags);          memcpy (state->resolve.pargfid, args.pargfid, 16); @@ -2860,27 +3174,23 @@ server_create (rpcsvc_request_t *req)                  state->resolve.type = RESOLVE_DONTCARE;          } +        /* TODO: can do alloca for xdata field instead of stdalloc */ +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_create_resume); +out:          /* memory allocated by libc, don't use GF_FREE */ -        if (args.dict.dict_val != NULL) { -                free (args.dict.dict_val); -        } +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); -        return ret; -out:          if (op_errno)                  req->rpc_err = GARBAGE_ARGS; -        if (params) -                dict_unref (params); - -        /* memory allocated by libc, don't use GF_FREE */ -        if (args.dict.dict_val != NULL) { -                free (args.dict.dict_val); -        } -          return ret;  } @@ -2892,6 +3202,7 @@ server_open (rpcsvc_request_t *req)          call_frame_t   *frame                 = NULL;          gfs3_open_req   args                  = {{0,},};          int             ret                   = -1; +        int             op_errno = 0;          if (!req)                  return ret; @@ -2922,9 +3233,20 @@ server_open (rpcsvc_request_t *req)          state->flags = gf_flags_to_flags (args.flags); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_open_resume);  out: +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; + +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); +          return ret;  } @@ -2936,6 +3258,7 @@ server_readv (rpcsvc_request_t *req)          call_frame_t   *frame = NULL;          gfs3_read_req   args  = {{0,},};          int             ret   = -1; +        int             op_errno = 0;          if (!req)                  goto out; @@ -2969,9 +3292,21 @@ server_readv (rpcsvc_request_t *req)          memcpy (state->resolve.gfid, args.gfid, 16); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_readv_resume);  out: +        /* memory allocated by libc, don't use GF_FREE */ +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -2985,6 +3320,7 @@ server_writev (rpcsvc_request_t *req)          ssize_t              len    = 0;          int                  i      = 0;          int                  ret    = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -3035,9 +3371,20 @@ server_writev (rpcsvc_request_t *req)                  state->size += state->payload_vector[i].iov_len;          } +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_writev_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -3093,6 +3440,7 @@ server_release (rpcsvc_request_t *req)          server_submit_reply (NULL, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gf_common_rsp); +          ret = 0;  out:          return ret; @@ -3117,6 +3465,7 @@ server_releasedir (rpcsvc_request_t *req)          server_submit_reply (NULL, req, &rsp, NULL, 0, NULL,                               (xdrproc_t)xdr_gf_common_rsp); +          ret = 0;  out:          return ret; @@ -3130,6 +3479,7 @@ server_fsync (rpcsvc_request_t *req)          call_frame_t   *frame = NULL;          gfs3_fsync_req  args  = {{0,},};          int             ret   = -1; +        int             op_errno = 0;          if (!req)                  return ret; @@ -3160,9 +3510,20 @@ server_fsync (rpcsvc_request_t *req)          state->flags         = args.data;          memcpy (state->resolve.gfid, args.gfid, 16); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_fsync_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -3175,6 +3536,7 @@ server_flush (rpcsvc_request_t *req)          call_frame_t   *frame = NULL;          gfs3_flush_req  args  = {{0,},};          int             ret   = -1; +        int             op_errno = 0;          if (!req)                  return ret; @@ -3204,9 +3566,20 @@ server_flush (rpcsvc_request_t *req)          state->resolve.fd_no = args.fd;          memcpy (state->resolve.gfid, args.gfid, 16); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_flush_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -3219,6 +3592,7 @@ server_ftruncate (rpcsvc_request_t *req)          call_frame_t       *frame = NULL;          gfs3_ftruncate_req  args  = {{0,},};          int                 ret   = -1; +        int                 op_errno = 0;          if (!req)                  return ret; @@ -3249,9 +3623,20 @@ server_ftruncate (rpcsvc_request_t *req)          state->offset         = args.offset;          memcpy (state->resolve.gfid, args.gfid, 16); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_ftruncate_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -3261,8 +3646,9 @@ server_fstat (rpcsvc_request_t *req)  {          server_state_t *state = NULL;          call_frame_t   *frame = NULL; -        gfs3_write_req  args  = {{0,},}; +        gfs3_fstat_req  args  = {{0,},};          int             ret   = -1; +        int             op_errno = 0;          if (!req)                  return ret; @@ -3292,9 +3678,20 @@ server_fstat (rpcsvc_request_t *req)          state->resolve.fd_no   = args.fd;          memcpy (state->resolve.gfid, args.gfid, 16); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_fstat_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -3306,6 +3703,7 @@ server_truncate (rpcsvc_request_t *req)          call_frame_t      *frame                 = NULL;          gfs3_truncate_req  args                  = {{0,},};          int                ret                   = -1; +        int                op_errno = 0;          if (!req)                  return ret; @@ -3335,9 +3733,20 @@ server_truncate (rpcsvc_request_t *req)          memcpy (state->resolve.gfid, args.gfid, 16);          state->offset        = args.offset; +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_truncate_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -3350,6 +3759,7 @@ server_unlink (rpcsvc_request_t *req)          call_frame_t    *frame                  = NULL;          gfs3_unlink_req  args                   = {{0,},};          int              ret                    = -1; +        int              op_errno = 0;          if (!req)                  return ret; @@ -3381,9 +3791,22 @@ server_unlink (rpcsvc_request_t *req)          state->resolve.bname  = gf_strdup (args.bname);          memcpy (state->resolve.pargfid, args.pargfid, 16); +        state->flags = args.xflags; + +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_unlink_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -3397,7 +3820,7 @@ server_setxattr (rpcsvc_request_t *req)          server_connection_t *conn                  = NULL;          gfs3_setxattr_req    args                  = {{0,},};          int32_t              ret                   = -1; -        int                  op_errno = 0; +        int32_t              op_errno = 0;          if (!req)                  return ret; @@ -3441,17 +3864,25 @@ server_setxattr (rpcsvc_request_t *req)          /* There can be some commands hidden in key, check and proceed */          gf_server_check_setxattr_cmd (frame, dict); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_setxattr_resume);          return ret;  out: -        if (dict) -                dict_unref (dict); +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val);          if (op_errno)                  req->rpc_err = GARBAGE_ARGS; +        if (dict) +                dict_unref (dict); +          return ret;  } @@ -3466,7 +3897,7 @@ server_fsetxattr (rpcsvc_request_t *req)          call_frame_t        *frame                = NULL;          gfs3_fsetxattr_req   args                 = {{0,},};          int32_t              ret                  = -1; -        int                  op_errno = 0; +        int32_t              op_errno = 0;          if (!req)                  return ret; @@ -3507,15 +3938,25 @@ server_fsetxattr (rpcsvc_request_t *req)          state->dict = dict; +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_fsetxattr_resume);          return ret;  out: -        if (dict) -                dict_unref (dict); +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); +          if (op_errno)                  req->rpc_err = GARBAGE_ARGS; + +        if (dict) +                dict_unref (dict); +          return ret;  } @@ -3530,7 +3971,7 @@ server_fxattrop (rpcsvc_request_t *req)          call_frame_t        *frame                = NULL;          gfs3_fxattrop_req    args                 = {{0,},};          int32_t              ret                  = -1; -        int              op_errno = 0; +        int32_t              op_errno = 0;          if (!req)                  return ret; @@ -3571,17 +4012,26 @@ server_fxattrop (rpcsvc_request_t *req)          state->dict = dict; +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_fxattrop_resume);          return ret;  out: -        if (dict) -                dict_unref (dict); +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); +          if (op_errno)                  req->rpc_err = GARBAGE_ARGS; +        if (dict) +                dict_unref (dict); +          return ret;  } @@ -3596,7 +4046,7 @@ server_xattrop (rpcsvc_request_t *req)          call_frame_t        *frame                 = NULL;          gfs3_xattrop_req     args                  = {{0,},};          int32_t              ret                   = -1; -        int              op_errno = 0; +        int32_t              op_errno = 0;          if (!req)                  return ret; @@ -3637,17 +4087,25 @@ server_xattrop (rpcsvc_request_t *req)          state->dict = dict; +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_xattrop_resume);          return ret;  out: -        if (dict) -                dict_unref (dict); +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val);          if (op_errno)                  req->rpc_err = GARBAGE_ARGS; +        if (dict) +                dict_unref (dict); +          return ret;  } @@ -3659,6 +4117,7 @@ server_getxattr (rpcsvc_request_t *req)          call_frame_t        *frame                 = NULL;          gfs3_getxattr_req    args                  = {{0,},};          int                  ret                   = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -3695,9 +4154,20 @@ server_getxattr (rpcsvc_request_t *req)                  gf_server_check_getxattr_cmd (frame, state->name);          } +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_getxattr_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -3709,6 +4179,7 @@ server_fgetxattr (rpcsvc_request_t *req)          call_frame_t        *frame      = NULL;          gfs3_fgetxattr_req   args       = {{0,},};          int                  ret        = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -3742,9 +4213,20 @@ server_fgetxattr (rpcsvc_request_t *req)          if (args.namelen)                  state->name = gf_strdup (args.name); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_fgetxattr_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -3757,6 +4239,7 @@ server_removexattr (rpcsvc_request_t *req)          call_frame_t         *frame                 = NULL;          gfs3_removexattr_req  args                  = {{0,},};          int                   ret                   = -1; +        int                   op_errno = 0;          if (!req)                  return ret; @@ -3788,9 +4271,20 @@ server_removexattr (rpcsvc_request_t *req)          memcpy (state->resolve.gfid, args.gfid, 16);          state->name           = gf_strdup (args.name); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_removexattr_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -3801,6 +4295,7 @@ server_fremovexattr (rpcsvc_request_t *req)          call_frame_t         *frame                 = NULL;          gfs3_fremovexattr_req  args                  = {{0,},};          int                   ret                   = -1; +        int                   op_errno = 0;          if (!req)                  return ret; @@ -3834,9 +4329,20 @@ server_fremovexattr (rpcsvc_request_t *req)          memcpy (state->resolve.gfid, args.gfid, 16);          state->name           = gf_strdup (args.name); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_fremovexattr_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -3850,6 +4356,7 @@ server_opendir (rpcsvc_request_t *req)          call_frame_t     *frame                 = NULL;          gfs3_opendir_req  args                  = {{0,},};          int               ret                   = -1; +        int               op_errno = 0;          if (!req)                  return ret; @@ -3878,9 +4385,20 @@ server_opendir (rpcsvc_request_t *req)          state->resolve.type   = RESOLVE_MUST;          memcpy (state->resolve.gfid, args.gfid, 16); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_opendir_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -3893,7 +4411,7 @@ server_readdirp (rpcsvc_request_t *req)          gfs3_readdirp_req    args         = {{0,},};          size_t               headers_size = 0;          int                  ret          = -1; -        int              op_errno = 0; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -3935,6 +4453,7 @@ server_readdirp (rpcsvc_request_t *req)          state->offset = args.offset;          memcpy (state->resolve.gfid, args.gfid, 16); +        /* here, dict itself works as xdata */          GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->dict,                                        (args.dict.dict_val),                                        (args.dict.dict_len), ret, @@ -3947,9 +4466,8 @@ out:          if (op_errno)                  req->rpc_err = GARBAGE_ARGS; -        if (args.dict.dict_val != NULL) { +        if (args.dict.dict_val)                  free (args.dict.dict_val); -        }          return ret;  } @@ -3962,6 +4480,7 @@ server_readdir (rpcsvc_request_t *req)          gfs3_readdir_req     args         = {{0,},};          size_t               headers_size = 0;          int                  ret          = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4003,9 +4522,20 @@ server_readdir (rpcsvc_request_t *req)          state->offset = args.offset;          memcpy (state->resolve.gfid, args.gfid, 16); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_readdir_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -4016,6 +4546,7 @@ server_fsyncdir (rpcsvc_request_t *req)          call_frame_t        *frame = NULL;          gfs3_fsyncdir_req    args  = {{0,},};          int                  ret   = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4046,9 +4577,20 @@ server_fsyncdir (rpcsvc_request_t *req)          state->flags = args.data;          memcpy (state->resolve.gfid, args.gfid, 16); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_fsyncdir_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -4059,10 +4601,9 @@ server_mknod (rpcsvc_request_t *req)  {          server_state_t      *state                  = NULL;          call_frame_t        *frame                  = NULL; -        dict_t              *params                 = NULL;          gfs3_mknod_req       args                   = {{0,},};          int                  ret                    = -1; -        int              op_errno = 0; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4090,40 +4631,29 @@ server_mknod (rpcsvc_request_t *req)                  goto out;          } -        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, params, -                                      (args.dict.dict_val), -                                      (args.dict.dict_len), ret, -                                      op_errno, out); - -        state->params = params; -          state->resolve.type    = RESOLVE_NOT;          memcpy (state->resolve.pargfid, args.pargfid, 16);          state->resolve.bname   = gf_strdup (args.bname); -        state->mode = args.mode; -        state->dev  = args.dev; +        state->mode  = args.mode; +        state->dev   = args.dev; +        state->umask = args.umask; + +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out);          ret = 0;          resolve_and_resume (frame, server_mknod_resume); -        /* memory allocated by libc, don't use GF_FREE */ -        if (args.dict.dict_val != NULL) { -                free (args.dict.dict_val); -        } - -        return ret;  out:          if (op_errno)                  req->rpc_err = GARBAGE_ARGS; -        if (params) -                dict_unref (params); -          /* memory allocated by libc, don't use GF_FREE */ -        if (args.dict.dict_val != NULL) { -                free (args.dict.dict_val); -        } +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val);          return ret; @@ -4135,10 +4665,9 @@ server_mkdir (rpcsvc_request_t *req)  {          server_state_t      *state                  = NULL;          call_frame_t        *frame                  = NULL; -        dict_t              *params                 = NULL;          gfs3_mkdir_req       args                   = {{0,},};          int                  ret                    = -1; -        int              op_errno = 0; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4165,39 +4694,29 @@ server_mkdir (rpcsvc_request_t *req)                  req->rpc_err = GARBAGE_ARGS;                  goto out;          } -        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, params, -                                      (args.dict.dict_val), -                                      (args.dict.dict_len), ret, -                                      op_errno, out); - -        state->params = params;          state->resolve.type    = RESOLVE_NOT;          memcpy (state->resolve.pargfid, args.pargfid, 16);          state->resolve.bname   = gf_strdup (args.bname); -        state->mode = args.mode; +        state->mode  = args.mode; +        state->umask = args.umask; + +        /* TODO: can do alloca for xdata field instead of stdalloc */ +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out);          ret = 0;          resolve_and_resume (frame, server_mkdir_resume); -        if (args.dict.dict_val != NULL) { -                /* memory allocated by libc, don't use GF_FREE */ -                free (args.dict.dict_val); -        } - -        return ret;  out:          if (op_errno)                  req->rpc_err = GARBAGE_ARGS; -        if (params) -                dict_unref (params); - -        if (args.dict.dict_val != NULL) { -                /* memory allocated by libc, don't use GF_FREE */ -                free (args.dict.dict_val); -        } +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val);          return ret;  } @@ -4210,6 +4729,7 @@ server_rmdir (rpcsvc_request_t *req)          call_frame_t        *frame                  = NULL;          gfs3_rmdir_req       args                   = {{0,},};          int                  ret                    = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4241,11 +4761,22 @@ server_rmdir (rpcsvc_request_t *req)          memcpy (state->resolve.pargfid, args.pargfid, 16);          state->resolve.bname   = gf_strdup (args.bname); -        state->flags = args.flags; +        state->flags = args.xflags; + +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out);          ret = 0;          resolve_and_resume (frame, server_rmdir_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -4259,6 +4790,7 @@ server_inodelk (rpcsvc_request_t *req)          gfs3_inodelk_req     args                  = {{0,},};          int                  cmd                   = 0;          int                  ret                   = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4319,9 +4851,20 @@ server_inodelk (rpcsvc_request_t *req)                  break;          } +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_inodelk_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -4332,6 +4875,7 @@ server_finodelk (rpcsvc_request_t *req)          call_frame_t        *frame        = NULL;          gfs3_finodelk_req    args         = {{0,},};          int                  ret          = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4392,9 +4936,20 @@ server_finodelk (rpcsvc_request_t *req)                  break;          } +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_finodelk_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -4406,6 +4961,7 @@ server_entrylk (rpcsvc_request_t *req)          call_frame_t        *frame                 = NULL;          gfs3_entrylk_req     args                  = {{0,},};          int                  ret                   = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4444,9 +5000,20 @@ server_entrylk (rpcsvc_request_t *req)          state->cmd            = args.cmd;          state->type           = args.type; +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_entrylk_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -4457,6 +5024,7 @@ server_fentrylk (rpcsvc_request_t *req)          call_frame_t        *frame        = NULL;          gfs3_fentrylk_req    args         = {{0,},};          int                  ret          = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4495,9 +5063,20 @@ server_fentrylk (rpcsvc_request_t *req)                  state->name = gf_strdup (args.name);          state->volume = gf_strdup (args.volume); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_fentrylk_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -4508,6 +5087,7 @@ server_access (rpcsvc_request_t *req)          call_frame_t        *frame                 = NULL;          gfs3_access_req      args                  = {{0,},};          int                  ret                   = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4537,9 +5117,20 @@ server_access (rpcsvc_request_t *req)          memcpy (state->resolve.gfid, args.gfid, 16);          state->mask          = args.mask; +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_access_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -4550,10 +5141,9 @@ server_symlink (rpcsvc_request_t *req)  {          server_state_t      *state                 = NULL;          call_frame_t        *frame                 = NULL; -        dict_t              *params                = NULL;          gfs3_symlink_req     args                  = {{0,},};          int                  ret                   = -1; -        int              op_errno = 0; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4582,37 +5172,27 @@ server_symlink (rpcsvc_request_t *req)                  goto out;          } -        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, params, -                                      (args.dict.dict_val), -                                      (args.dict.dict_len), ret, -                                      op_errno, out); - -        state->params = params; -          state->resolve.type   = RESOLVE_NOT;          memcpy (state->resolve.pargfid, args.pargfid, 16);          state->resolve.bname  = gf_strdup (args.bname);          state->name           = gf_strdup (args.linkname); +        state->umask          = args.umask; + +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out);          ret = 0;          resolve_and_resume (frame, server_symlink_resume); -        /* memory allocated by libc, don't use GF_FREE */ -        if (args.dict.dict_val != NULL) { -                free (args.dict.dict_val); -        } -        return ret;  out:          if (op_errno)                  req->rpc_err = GARBAGE_ARGS; -        if (params) -                dict_unref (params); -          /* memory allocated by libc, don't use GF_FREE */ -        if (args.dict.dict_val != NULL) { -                free (args.dict.dict_val); -        } +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val);          return ret;  } @@ -4626,6 +5206,7 @@ server_link (rpcsvc_request_t *req)          call_frame_t        *frame                     = NULL;          gfs3_link_req        args                      = {{0,},};          int                  ret                       = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4660,9 +5241,20 @@ server_link (rpcsvc_request_t *req)          state->resolve2.bname  = gf_strdup (args.newbname);          memcpy (state->resolve2.pargfid, args.newgfid, 16); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_link_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -4674,6 +5266,7 @@ server_rename (rpcsvc_request_t *req)          call_frame_t        *frame                     = NULL;          gfs3_rename_req      args                      = {{0,},};          int                  ret                       = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4710,9 +5303,20 @@ server_rename (rpcsvc_request_t *req)          state->resolve2.bname = gf_strdup (args.newbname);          memcpy (state->resolve2.pargfid, args.newgfid, 16); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_rename_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -4724,6 +5328,7 @@ server_lk (rpcsvc_request_t *req)          call_frame_t        *frame = NULL;          gfs3_lk_req          args  = {{0,},};          int                  ret   = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4803,9 +5408,20 @@ server_lk (rpcsvc_request_t *req)          } +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_lk_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -4817,6 +5433,7 @@ server_rchecksum (rpcsvc_request_t *req)          call_frame_t        *frame = NULL;          gfs3_rchecksum_req   args  = {0,};          int                  ret   = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4847,9 +5464,20 @@ server_rchecksum (rpcsvc_request_t *req)          state->offset        = args.offset;          state->size          = args.len; +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_rchecksum_resume);  out: +        if (args.xdata.xdata_val) +                free (args.xdata.xdata_val); + +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  } @@ -4870,20 +5498,19 @@ server_null (rpcsvc_request_t *req)  int  server_lookup (rpcsvc_request_t *req)  { -        call_frame_t        *frame                  = NULL; -        server_connection_t *conn                   = NULL; -        server_state_t      *state                  = NULL; -        dict_t              *xattr_req              = NULL; -        gfs3_lookup_req      args                   = {{0,},}; -        int                  ret                    = -1; -        int              op_errno = 0; +        call_frame_t        *frame    = NULL; +        server_connection_t *conn     = NULL; +        server_state_t      *state    = NULL; +        gfs3_lookup_req      args     = {{0,},}; +        int                  ret      = -1; +        int                  op_errno = 0;          GF_VALIDATE_OR_GOTO ("server", req, err);          conn = req->trans->xl_private; -        args.bname         = alloca (req->msg[0].iov_len); -        args.dict.dict_val = alloca (req->msg[0].iov_len); +        args.bname           = alloca (req->msg[0].iov_len); +        args.xdata.xdata_val = alloca (req->msg[0].iov_len);          if (!xdr_to_generic (req->msg[0], &args, (xdrproc_t)xdr_gfs3_lookup_req)) {                  //failed to decode msg; @@ -4919,19 +5546,16 @@ server_lookup (rpcsvc_request_t *req)                  memcpy (state->resolve.gfid, args.gfid, 16);          } -        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, xattr_req, -                                      (args.dict.dict_val), -                                      (args.dict.dict_len), ret, +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret,                                        op_errno, out); -        state->dict = xattr_req;          ret = 0;          resolve_and_resume (frame, server_lookup_resume);          return ret;  out: -        if (xattr_req) -                dict_unref (xattr_req);          server_lookup_cbk (frame, NULL, frame->this, -1, EINVAL, NULL, NULL,                             NULL, NULL); @@ -4946,7 +5570,8 @@ server_statfs (rpcsvc_request_t *req)          server_state_t      *state = NULL;          call_frame_t        *frame = NULL;          gfs3_statfs_req      args  = {{0,},}; -        int                  ret                    = -1; +        int                  ret   = -1; +        int                  op_errno = 0;          if (!req)                  return ret; @@ -4975,9 +5600,17 @@ server_statfs (rpcsvc_request_t *req)          state->resolve.type   = RESOLVE_MUST;          memcpy (state->resolve.gfid, args.gfid, 16); +        GF_PROTOCOL_DICT_UNSERIALIZE (state->conn->bound_xl, state->xdata, +                                      (args.xdata.xdata_val), +                                      (args.xdata.xdata_len), ret, +                                      op_errno, out); +          ret = 0;          resolve_and_resume (frame, server_statfs_resume);  out: +        if (op_errno) +                req->rpc_err = GARBAGE_ARGS; +          return ret;  }  | 
