diff options
Diffstat (limited to 'libglusterfs/src/call-stub.c')
| -rw-r--r-- | libglusterfs/src/call-stub.c | 720 | 
1 files changed, 468 insertions, 252 deletions
diff --git a/libglusterfs/src/call-stub.c b/libglusterfs/src/call-stub.c index 9b3a9c34849..01e919d6943 100644 --- a/libglusterfs/src/call-stub.c +++ b/libglusterfs/src/call-stub.c @@ -55,7 +55,7 @@ call_stub_t *  fop_lookup_stub (call_frame_t *frame,                   fop_lookup_t fn,                   loc_t *loc, -                 dict_t *xattr_req) +                 dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -67,10 +67,10 @@ fop_lookup_stub (call_frame_t *frame,          stub->args.lookup.fn = fn; -        if (xattr_req) -                stub->args.lookup.xattr_req = dict_ref (xattr_req); -          loc_copy (&stub->args.lookup.loc, loc); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -83,7 +83,7 @@ fop_lookup_cbk_stub (call_frame_t *frame,                       int32_t op_errno,                       inode_t *inode,                       struct iatt *buf, -                     dict_t *dict, +                     dict_t *xdata,                       struct iatt *postparent)  {          call_stub_t *stub = NULL; @@ -100,10 +100,11 @@ fop_lookup_cbk_stub (call_frame_t *frame,                  stub->args.lookup_cbk.inode = inode_ref (inode);          if (buf)                  stub->args.lookup_cbk.buf = *buf; -        if (dict) -                stub->args.lookup_cbk.dict = dict_ref (dict);          if (postparent)                  stub->args.lookup_cbk.postparent = *postparent; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -113,7 +114,7 @@ out:  call_stub_t *  fop_stat_stub (call_frame_t *frame,                 fop_stat_t fn, -               loc_t *loc) +               loc_t *loc, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -125,6 +126,9 @@ fop_stat_stub (call_frame_t *frame,          stub->args.stat.fn = fn;          loc_copy (&stub->args.stat.loc, loc); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -135,7 +139,7 @@ fop_stat_cbk_stub (call_frame_t *frame,                     fop_stat_cbk_t fn,                     int32_t op_ret,                     int32_t op_errno, -                   struct iatt *buf) +                   struct iatt *buf, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -149,6 +153,9 @@ fop_stat_cbk_stub (call_frame_t *frame,          stub->args.stat_cbk.op_errno = op_errno;          if (op_ret == 0)                  stub->args.stat_cbk.buf = *buf; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -157,7 +164,7 @@ out:  call_stub_t *  fop_fstat_stub (call_frame_t *frame,                  fop_fstat_t fn, -                fd_t *fd) +                fd_t *fd, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -170,6 +177,9 @@ fop_fstat_stub (call_frame_t *frame,          if (fd)                  stub->args.fstat.fd = fd_ref (fd); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -180,7 +190,7 @@ fop_fstat_cbk_stub (call_frame_t *frame,                      fop_fstat_cbk_t fn,                      int32_t op_ret,                      int32_t op_errno, -                    struct iatt *buf) +                    struct iatt *buf, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -194,6 +204,9 @@ fop_fstat_cbk_stub (call_frame_t *frame,          stub->args.fstat_cbk.op_errno = op_errno;          if (buf)                  stub->args.fstat_cbk.buf = *buf; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -205,7 +218,7 @@ call_stub_t *  fop_truncate_stub (call_frame_t *frame,                     fop_truncate_t fn,                     loc_t *loc, -                   off_t off) +                   off_t off, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -218,6 +231,9 @@ fop_truncate_stub (call_frame_t *frame,          stub->args.truncate.fn = fn;          loc_copy (&stub->args.truncate.loc, loc);          stub->args.truncate.off = off; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -229,7 +245,7 @@ fop_truncate_cbk_stub (call_frame_t *frame,                         int32_t op_ret,                         int32_t op_errno,                         struct iatt *prebuf, -                       struct iatt *postbuf) +                       struct iatt *postbuf, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -245,6 +261,9 @@ fop_truncate_cbk_stub (call_frame_t *frame,                  stub->args.truncate_cbk.prebuf = *prebuf;          if (postbuf)                  stub->args.truncate_cbk.postbuf = *postbuf; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -254,7 +273,7 @@ call_stub_t *  fop_ftruncate_stub (call_frame_t *frame,                      fop_ftruncate_t fn,                      fd_t *fd, -                    off_t off) +                    off_t off, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -268,6 +287,9 @@ fop_ftruncate_stub (call_frame_t *frame,                  stub->args.ftruncate.fd = fd_ref (fd);          stub->args.ftruncate.off = off; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -279,7 +301,7 @@ fop_ftruncate_cbk_stub (call_frame_t *frame,                          int32_t op_ret,                          int32_t op_errno,                          struct iatt *prebuf, -                        struct iatt *postbuf) +                        struct iatt *postbuf, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -295,6 +317,9 @@ fop_ftruncate_cbk_stub (call_frame_t *frame,                  stub->args.ftruncate_cbk.prebuf = *prebuf;          if (postbuf)                  stub->args.ftruncate_cbk.postbuf = *postbuf; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -304,7 +329,7 @@ call_stub_t *  fop_access_stub (call_frame_t *frame,                   fop_access_t fn,                   loc_t *loc, -                 int32_t mask) +                 int32_t mask, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -317,6 +342,9 @@ fop_access_stub (call_frame_t *frame,          stub->args.access.fn = fn;          loc_copy (&stub->args.access.loc, loc);          stub->args.access.mask = mask; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -326,7 +354,7 @@ call_stub_t *  fop_access_cbk_stub (call_frame_t *frame,                       fop_access_cbk_t fn,                       int32_t op_ret, -                     int32_t op_errno) +                     int32_t op_errno, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -338,6 +366,9 @@ fop_access_cbk_stub (call_frame_t *frame,          stub->args.access_cbk.fn = fn;          stub->args.access_cbk.op_ret = op_ret;          stub->args.access_cbk.op_errno = op_errno; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -347,7 +378,7 @@ call_stub_t *  fop_readlink_stub (call_frame_t *frame,                     fop_readlink_t fn,                     loc_t *loc, -                   size_t size) +                   size_t size, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -360,6 +391,9 @@ fop_readlink_stub (call_frame_t *frame,          stub->args.readlink.fn = fn;          loc_copy (&stub->args.readlink.loc, loc);          stub->args.readlink.size = size; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -371,7 +405,7 @@ fop_readlink_cbk_stub (call_frame_t *frame,                         int32_t op_ret,                         int32_t op_errno,                         const char *path, -                       struct iatt *sbuf) +                       struct iatt *sbuf, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -387,14 +421,17 @@ fop_readlink_cbk_stub (call_frame_t *frame,                  stub->args.readlink_cbk.buf = gf_strdup (path);          if (sbuf)                  stub->args.readlink_cbk.sbuf = *sbuf; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  }  call_stub_t * -fop_mknod_stub (call_frame_t *frame, fop_mknod_t fn, -                loc_t *loc, mode_t mode, dev_t rdev, dict_t *params) +fop_mknod_stub (call_frame_t *frame, fop_mknod_t fn, loc_t *loc, mode_t mode, +                dev_t rdev, mode_t umask, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -408,8 +445,10 @@ fop_mknod_stub (call_frame_t *frame, fop_mknod_t fn,          loc_copy (&stub->args.mknod.loc, loc);          stub->args.mknod.mode = mode;          stub->args.mknod.rdev = rdev; -        if (params) -                stub->args.mknod.params = dict_ref (params); +        stub->args.mknod.umask = umask; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -423,7 +462,7 @@ fop_mknod_cbk_stub (call_frame_t *frame,                      inode_t *inode,                      struct iatt *buf,                      struct iatt *preparent, -                    struct iatt *postparent) +                    struct iatt *postparent, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -443,6 +482,9 @@ fop_mknod_cbk_stub (call_frame_t *frame,                  stub->args.mknod_cbk.preparent = *preparent;          if (postparent)                  stub->args.mknod_cbk.postparent = *postparent; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -450,7 +492,7 @@ out:  call_stub_t *  fop_mkdir_stub (call_frame_t *frame, fop_mkdir_t fn, -                loc_t *loc, mode_t mode, dict_t *params) +                loc_t *loc, mode_t mode, mode_t umask, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -462,9 +504,12 @@ fop_mkdir_stub (call_frame_t *frame, fop_mkdir_t fn,          stub->args.mkdir.fn = fn;          loc_copy (&stub->args.mkdir.loc, loc); -        stub->args.mkdir.mode = mode; -        if (params) -                stub->args.mkdir.params = dict_ref (params); +        stub->args.mkdir.mode  = mode; +        stub->args.mkdir.umask = umask; + +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -478,7 +523,7 @@ fop_mkdir_cbk_stub (call_frame_t *frame,                      inode_t *inode,                      struct iatt *buf,                      struct iatt *preparent, -                    struct iatt *postparent) +                    struct iatt *postparent, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -498,6 +543,9 @@ fop_mkdir_cbk_stub (call_frame_t *frame,                  stub->args.mkdir_cbk.preparent = *preparent;          if (postparent)                  stub->args.mkdir_cbk.postparent = *postparent; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -506,7 +554,7 @@ out:  call_stub_t *  fop_unlink_stub (call_frame_t *frame,                   fop_unlink_t fn, -                 loc_t *loc) +                 loc_t *loc, int xflag, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -518,6 +566,10 @@ fop_unlink_stub (call_frame_t *frame,          stub->args.unlink.fn = fn;          loc_copy (&stub->args.unlink.loc, loc); +        stub->args.unlink.xflag = xflag; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -529,7 +581,7 @@ fop_unlink_cbk_stub (call_frame_t *frame,                       int32_t op_ret,                       int32_t op_errno,                       struct iatt *preparent, -                     struct iatt *postparent) +                     struct iatt *postparent, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -545,6 +597,9 @@ fop_unlink_cbk_stub (call_frame_t *frame,                  stub->args.unlink_cbk.preparent = *preparent;          if (postparent)                  stub->args.unlink_cbk.postparent = *postparent; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -553,7 +608,7 @@ out:  call_stub_t *  fop_rmdir_stub (call_frame_t *frame, fop_rmdir_t fn, -                loc_t *loc, int flags) +                loc_t *loc, int flags, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -566,6 +621,9 @@ fop_rmdir_stub (call_frame_t *frame, fop_rmdir_t fn,          stub->args.rmdir.fn = fn;          loc_copy (&stub->args.rmdir.loc, loc);          stub->args.rmdir.flags = flags; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -577,7 +635,7 @@ fop_rmdir_cbk_stub (call_frame_t *frame,                      int32_t op_ret,                      int32_t op_errno,                      struct iatt *preparent, -                    struct iatt *postparent) +                    struct iatt *postparent, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -593,6 +651,9 @@ fop_rmdir_cbk_stub (call_frame_t *frame,                  stub->args.rmdir_cbk.preparent = *preparent;          if (postparent)                  stub->args.rmdir_cbk.postparent = *postparent; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -600,7 +661,7 @@ out:  call_stub_t *  fop_symlink_stub (call_frame_t *frame, fop_symlink_t fn, -                  const char *linkname, loc_t *loc, dict_t *params) +                  const char *linkname, loc_t *loc, mode_t umask, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -613,9 +674,11 @@ fop_symlink_stub (call_frame_t *frame, fop_symlink_t fn,          stub->args.symlink.fn = fn;          stub->args.symlink.linkname = gf_strdup (linkname); +        stub->args.symlink.umask = umask;          loc_copy (&stub->args.symlink.loc, loc); -        if (params) -                stub->args.symlink.params = dict_ref (params); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -629,7 +692,7 @@ fop_symlink_cbk_stub (call_frame_t *frame,                        inode_t *inode,                        struct iatt *buf,                        struct iatt *preparent, -                      struct iatt *postparent) +                      struct iatt *postparent, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -649,6 +712,9 @@ fop_symlink_cbk_stub (call_frame_t *frame,                  stub->args.symlink_cbk.preparent = *preparent;          if (postparent)                  stub->args.symlink_cbk.postparent = *postparent; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -658,7 +724,7 @@ call_stub_t *  fop_rename_stub (call_frame_t *frame,                   fop_rename_t fn,                   loc_t *oldloc, -                 loc_t *newloc) +                 loc_t *newloc, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -672,6 +738,9 @@ fop_rename_stub (call_frame_t *frame,          stub->args.rename.fn = fn;          loc_copy (&stub->args.rename.old, oldloc);          loc_copy (&stub->args.rename.new, newloc); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -686,7 +755,7 @@ fop_rename_cbk_stub (call_frame_t *frame,                       struct iatt *preoldparent,                       struct iatt *postoldparent,                       struct iatt *prenewparent, -                     struct iatt *postnewparent) +                     struct iatt *postnewparent, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -708,6 +777,9 @@ fop_rename_cbk_stub (call_frame_t *frame,                  stub->args.rename_cbk.prenewparent = *prenewparent;          if (postnewparent)                  stub->args.rename_cbk.postnewparent = *postnewparent; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -717,7 +789,7 @@ call_stub_t *  fop_link_stub (call_frame_t *frame,                 fop_link_t fn,                 loc_t *oldloc, -               loc_t *newloc) +               loc_t *newloc, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -732,6 +804,9 @@ fop_link_stub (call_frame_t *frame,          loc_copy (&stub->args.link.oldloc, oldloc);          loc_copy (&stub->args.link.newloc, newloc); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -745,7 +820,7 @@ fop_link_cbk_stub (call_frame_t *frame,                     inode_t *inode,                     struct iatt *buf,                     struct iatt *preparent, -                   struct iatt *postparent) +                   struct iatt *postparent, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -765,6 +840,9 @@ fop_link_cbk_stub (call_frame_t *frame,                  stub->args.link_cbk.preparent = *preparent;          if (postparent)                  stub->args.link_cbk.postparent = *postparent; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -773,7 +851,7 @@ out:  call_stub_t *  fop_create_stub (call_frame_t *frame, fop_create_t fn,                   loc_t *loc, int32_t flags, mode_t mode, -                 fd_t *fd, dict_t *params) +                 mode_t umask, fd_t *fd, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -787,10 +865,12 @@ fop_create_stub (call_frame_t *frame, fop_create_t fn,          loc_copy (&stub->args.create.loc, loc);          stub->args.create.flags = flags;          stub->args.create.mode = mode; +        stub->args.create.umask = umask;          if (fd)                  stub->args.create.fd = fd_ref (fd); -        if (params) -                stub->args.create.params = dict_ref (params); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -805,7 +885,7 @@ fop_create_cbk_stub (call_frame_t *frame,                       inode_t *inode,                       struct iatt *buf,                       struct iatt *preparent, -                     struct iatt *postparent) +                     struct iatt *postparent, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -827,6 +907,9 @@ fop_create_cbk_stub (call_frame_t *frame,                  stub->args.create_cbk.preparent = *preparent;          if (postparent)                  stub->args.create_cbk.postparent = *postparent; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -837,7 +920,7 @@ fop_open_stub (call_frame_t *frame,                 fop_open_t fn,                 loc_t *loc,                 int32_t flags, fd_t *fd, -               int32_t wbflags) +               dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -850,9 +933,11 @@ fop_open_stub (call_frame_t *frame,          stub->args.open.fn = fn;          loc_copy (&stub->args.open.loc, loc);          stub->args.open.flags = flags; -        stub->args.open.wbflags = wbflags;          if (fd)                  stub->args.open.fd = fd_ref (fd); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -863,8 +948,7 @@ fop_open_cbk_stub (call_frame_t *frame,                     fop_open_cbk_t fn,                     int32_t op_ret,                     int32_t op_errno, -                   fd_t *fd) - +                   fd_t *fd, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -878,6 +962,9 @@ fop_open_cbk_stub (call_frame_t *frame,          stub->args.open_cbk.op_errno = op_errno;          if (fd)                  stub->args.open_cbk.fd = fd_ref (fd); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -888,7 +975,7 @@ fop_readv_stub (call_frame_t *frame,                  fop_readv_t fn,                  fd_t *fd,                  size_t size, -                off_t off, uint32_t flags) +                off_t off, uint32_t flags, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -904,6 +991,9 @@ fop_readv_stub (call_frame_t *frame,          stub->args.readv.off   = off;          stub->args.readv.flags = flags; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -917,8 +1007,7 @@ fop_readv_cbk_stub (call_frame_t *frame,                      struct iovec *vector,                      int32_t count,                      struct iatt *stbuf, -                    struct iobref *iobref) - +                    struct iobref *iobref, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -936,6 +1025,9 @@ fop_readv_cbk_stub (call_frame_t *frame,                  stub->args.readv_cbk.stbuf = *stbuf;                  stub->args.readv_cbk.iobref = iobref_ref (iobref);          } +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -948,7 +1040,7 @@ fop_writev_stub (call_frame_t *frame,                   struct iovec *vector,                   int32_t count,                   off_t off, uint32_t flags, -                 struct iobref *iobref) +                 struct iobref *iobref, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -966,6 +1058,8 @@ fop_writev_stub (call_frame_t *frame,          stub->args.writev.off    = off;          stub->args.writev.flags  = flags;          stub->args.writev.iobref = iobref_ref (iobref); +        if (xdata) +                stub->xdata = dict_ref (xdata);  out:          return stub; @@ -978,8 +1072,7 @@ fop_writev_cbk_stub (call_frame_t *frame,                       int32_t op_ret,                       int32_t op_errno,                       struct iatt *prebuf, -                     struct iatt *postbuf) - +                     struct iatt *postbuf, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -995,6 +1088,9 @@ fop_writev_cbk_stub (call_frame_t *frame,                  stub->args.writev_cbk.postbuf = *postbuf;          if (prebuf)                  stub->args.writev_cbk.prebuf = *prebuf; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1004,7 +1100,7 @@ out:  call_stub_t *  fop_flush_stub (call_frame_t *frame,                  fop_flush_t fn, -                fd_t *fd) +                fd_t *fd, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1016,6 +1112,9 @@ fop_flush_stub (call_frame_t *frame,          stub->args.flush.fn = fn;          if (fd)                  stub->args.flush.fd = fd_ref (fd); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1025,8 +1124,7 @@ call_stub_t *  fop_flush_cbk_stub (call_frame_t *frame,                      fop_flush_cbk_t fn,                      int32_t op_ret, -                    int32_t op_errno) - +                    int32_t op_errno, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1038,6 +1136,9 @@ fop_flush_cbk_stub (call_frame_t *frame,          stub->args.flush_cbk.fn = fn;          stub->args.flush_cbk.op_ret = op_ret;          stub->args.flush_cbk.op_errno = op_errno; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1049,7 +1150,7 @@ call_stub_t *  fop_fsync_stub (call_frame_t *frame,                  fop_fsync_t fn,                  fd_t *fd, -                int32_t datasync) +                int32_t datasync, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1062,6 +1163,9 @@ fop_fsync_stub (call_frame_t *frame,          if (fd)                  stub->args.fsync.fd = fd_ref (fd);          stub->args.fsync.datasync = datasync; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1073,7 +1177,7 @@ fop_fsync_cbk_stub (call_frame_t *frame,                      int32_t op_ret,                      int32_t op_errno,                      struct iatt *prebuf, -                    struct iatt *postbuf) +                    struct iatt *postbuf, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1089,6 +1193,9 @@ fop_fsync_cbk_stub (call_frame_t *frame,                  stub->args.fsync_cbk.prebuf = *prebuf;          if (postbuf)                  stub->args.fsync_cbk.postbuf = *postbuf; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1097,7 +1204,7 @@ out:  call_stub_t *  fop_opendir_stub (call_frame_t *frame,                    fop_opendir_t fn, -                  loc_t *loc, fd_t *fd) +                  loc_t *loc, fd_t *fd, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1111,6 +1218,9 @@ fop_opendir_stub (call_frame_t *frame,          loc_copy (&stub->args.opendir.loc, loc);          if (fd)                  stub->args.opendir.fd = fd_ref (fd); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1121,8 +1231,7 @@ fop_opendir_cbk_stub (call_frame_t *frame,                        fop_opendir_cbk_t fn,                        int32_t op_ret,                        int32_t op_errno, -                      fd_t *fd) - +                      fd_t *fd, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1137,6 +1246,9 @@ fop_opendir_cbk_stub (call_frame_t *frame,          if (fd)                  stub->args.opendir_cbk.fd = fd_ref (fd); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1146,7 +1258,7 @@ call_stub_t *  fop_fsyncdir_stub (call_frame_t *frame,                     fop_fsyncdir_t fn,                     fd_t *fd, -                   int32_t datasync) +                   int32_t datasync, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1159,6 +1271,9 @@ fop_fsyncdir_stub (call_frame_t *frame,          if (fd)                  stub->args.fsyncdir.fd = fd_ref (fd);          stub->args.fsyncdir.datasync = datasync; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1168,8 +1283,7 @@ call_stub_t *  fop_fsyncdir_cbk_stub (call_frame_t *frame,                         fop_fsyncdir_cbk_t fn,                         int32_t op_ret, -                       int32_t op_errno) - +                       int32_t op_errno, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1181,6 +1295,9 @@ fop_fsyncdir_cbk_stub (call_frame_t *frame,          stub->args.fsyncdir_cbk.fn = fn;          stub->args.fsyncdir_cbk.op_ret = op_ret;          stub->args.fsyncdir_cbk.op_errno = op_errno; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1189,7 +1306,7 @@ out:  call_stub_t *  fop_statfs_stub (call_frame_t *frame,                   fop_statfs_t fn, -                 loc_t *loc) +                 loc_t *loc, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1201,6 +1318,9 @@ fop_statfs_stub (call_frame_t *frame,          stub->args.statfs.fn = fn;          loc_copy (&stub->args.statfs.loc, loc); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1211,8 +1331,7 @@ fop_statfs_cbk_stub (call_frame_t *frame,                       fop_statfs_cbk_t fn,                       int32_t op_ret,                       int32_t op_errno, -                     struct statvfs *buf) - +                     struct statvfs *buf, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1226,6 +1345,9 @@ fop_statfs_cbk_stub (call_frame_t *frame,          stub->args.statfs_cbk.op_errno = op_errno;          if (op_ret == 0)                  stub->args.statfs_cbk.buf = *buf; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1236,7 +1358,7 @@ fop_setxattr_stub (call_frame_t *frame,                     fop_setxattr_t fn,                     loc_t *loc,                     dict_t *dict, -                   int32_t flags) +                   int32_t flags, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1252,6 +1374,9 @@ fop_setxattr_stub (call_frame_t *frame,          if (dict)                  stub->args.setxattr.dict = dict_ref (dict);          stub->args.setxattr.flags = flags; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1261,7 +1386,7 @@ call_stub_t *  fop_setxattr_cbk_stub (call_frame_t *frame,                         fop_setxattr_cbk_t fn,                         int32_t op_ret, -                       int32_t op_errno) +                       int32_t op_errno, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1273,6 +1398,9 @@ fop_setxattr_cbk_stub (call_frame_t *frame,          stub->args.setxattr_cbk.fn = fn;          stub->args.setxattr_cbk.op_ret = op_ret;          stub->args.setxattr_cbk.op_errno = op_errno; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1281,7 +1409,7 @@ call_stub_t *  fop_getxattr_stub (call_frame_t *frame,                     fop_getxattr_t fn,                     loc_t *loc, -                   const char *name) +                   const char *name, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1296,6 +1424,9 @@ fop_getxattr_stub (call_frame_t *frame,          if (name)                  stub->args.getxattr.name = gf_strdup (name); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1306,7 +1437,7 @@ fop_getxattr_cbk_stub (call_frame_t *frame,                         fop_getxattr_cbk_t fn,                         int32_t op_ret,                         int32_t op_errno, -                       dict_t *dict) +                       dict_t *dict, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1321,6 +1452,9 @@ fop_getxattr_cbk_stub (call_frame_t *frame,          /* TODO */          if (dict)                  stub->args.getxattr_cbk.dict = dict_ref (dict); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1331,7 +1465,7 @@ fop_fsetxattr_stub (call_frame_t *frame,                      fop_fsetxattr_t fn,                      fd_t *fd,                      dict_t *dict, -                    int32_t flags) +                    int32_t flags, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1348,6 +1482,9 @@ fop_fsetxattr_stub (call_frame_t *frame,          if (dict)                  stub->args.fsetxattr.dict = dict_ref (dict);          stub->args.fsetxattr.flags = flags; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1357,7 +1494,7 @@ call_stub_t *  fop_fsetxattr_cbk_stub (call_frame_t *frame,                          fop_fsetxattr_cbk_t fn,                          int32_t op_ret, -                        int32_t op_errno) +                        int32_t op_errno, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1369,6 +1506,9 @@ fop_fsetxattr_cbk_stub (call_frame_t *frame,          stub->args.fsetxattr_cbk.fn = fn;          stub->args.fsetxattr_cbk.op_ret = op_ret;          stub->args.fsetxattr_cbk.op_errno = op_errno; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1378,7 +1518,7 @@ call_stub_t *  fop_fgetxattr_stub (call_frame_t *frame,                      fop_fgetxattr_t fn,                      fd_t *fd, -                    const char *name) +                    const char *name, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1393,6 +1533,9 @@ fop_fgetxattr_stub (call_frame_t *frame,          if (name)                  stub->args.fgetxattr.name = gf_strdup (name); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1403,7 +1546,7 @@ fop_fgetxattr_cbk_stub (call_frame_t *frame,                          fop_fgetxattr_cbk_t fn,                          int32_t op_ret,                          int32_t op_errno, -                        dict_t *dict) +                        dict_t *dict, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1419,6 +1562,9 @@ fop_fgetxattr_cbk_stub (call_frame_t *frame,          /* TODO */          if (dict)                  stub->args.fgetxattr_cbk.dict = dict_ref (dict); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1428,7 +1574,7 @@ call_stub_t *  fop_removexattr_stub (call_frame_t *frame,                        fop_removexattr_t fn,                        loc_t *loc, -                      const char *name) +                      const char *name, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1442,6 +1588,9 @@ fop_removexattr_stub (call_frame_t *frame,          stub->args.removexattr.fn = fn;          loc_copy (&stub->args.removexattr.loc, loc);          stub->args.removexattr.name = gf_strdup (name); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1451,7 +1600,7 @@ call_stub_t *  fop_removexattr_cbk_stub (call_frame_t *frame,                            fop_removexattr_cbk_t fn,                            int32_t op_ret, -                          int32_t op_errno) +                          int32_t op_errno, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1463,6 +1612,9 @@ fop_removexattr_cbk_stub (call_frame_t *frame,          stub->args.removexattr_cbk.fn = fn;          stub->args.removexattr_cbk.op_ret = op_ret;          stub->args.removexattr_cbk.op_errno = op_errno; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1471,7 +1623,7 @@ call_stub_t *  fop_fremovexattr_stub (call_frame_t *frame,                         fop_fremovexattr_t fn,                         fd_t *fd, -                       const char *name) +                       const char *name, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1485,6 +1637,9 @@ fop_fremovexattr_stub (call_frame_t *frame,          stub->args.fremovexattr.fn = fn;          stub->args.fremovexattr.fd = fd_ref (fd);          stub->args.fremovexattr.name = gf_strdup (name); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1494,7 +1649,7 @@ call_stub_t *  fop_fremovexattr_cbk_stub (call_frame_t *frame,                             fop_fremovexattr_cbk_t fn,                             int32_t op_ret, -                           int32_t op_errno) +                           int32_t op_errno, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1506,6 +1661,9 @@ fop_fremovexattr_cbk_stub (call_frame_t *frame,          stub->args.fremovexattr_cbk.fn = fn;          stub->args.fremovexattr_cbk.op_ret = op_ret;          stub->args.fremovexattr_cbk.op_errno = op_errno; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1515,7 +1673,7 @@ fop_lk_stub (call_frame_t *frame,               fop_lk_t fn,               fd_t *fd,               int32_t cmd, -             struct gf_flock *lock) +             struct gf_flock *lock, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1530,6 +1688,9 @@ fop_lk_stub (call_frame_t *frame,                  stub->args.lk.fd = fd_ref (fd);          stub->args.lk.cmd = cmd;          stub->args.lk.lock = *lock; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1540,8 +1701,7 @@ fop_lk_cbk_stub (call_frame_t *frame,                   fop_lk_cbk_t fn,                   int32_t op_ret,                   int32_t op_errno, -                 struct gf_flock *lock) - +                 struct gf_flock *lock, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1555,13 +1715,17 @@ fop_lk_cbk_stub (call_frame_t *frame,          stub->args.lk_cbk.op_errno = op_errno;          if (op_ret == 0)                  stub->args.lk_cbk.lock = *lock; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  }  call_stub_t *  fop_inodelk_stub (call_frame_t *frame, fop_inodelk_t fn, -                  const char *volume, loc_t *loc, int32_t cmd, struct gf_flock *lock) +                  const char *volume, loc_t *loc, int32_t cmd, +                  struct gf_flock *lock, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1579,13 +1743,16 @@ fop_inodelk_stub (call_frame_t *frame, fop_inodelk_t fn,          loc_copy (&stub->args.inodelk.loc, loc);          stub->args.inodelk.cmd  = cmd;          stub->args.inodelk.lock = *lock; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  }  call_stub_t *  fop_inodelk_cbk_stub (call_frame_t *frame, fop_inodelk_cbk_t fn, -                      int32_t op_ret, int32_t op_errno) +                      int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1598,6 +1765,9 @@ fop_inodelk_cbk_stub (call_frame_t *frame, fop_inodelk_cbk_t fn,          stub->args.inodelk_cbk.op_ret   = op_ret;          stub->args.inodelk_cbk.op_errno = op_errno; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1605,7 +1775,8 @@ out:  call_stub_t *  fop_finodelk_stub (call_frame_t *frame, fop_finodelk_t fn, -                   const char *volume, fd_t *fd, int32_t cmd, struct gf_flock *lock) +                   const char *volume, fd_t *fd, int32_t cmd, +                   struct gf_flock *lock, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1626,6 +1797,9 @@ fop_finodelk_stub (call_frame_t *frame, fop_finodelk_t fn,          stub->args.finodelk.cmd  = cmd;          stub->args.finodelk.lock = *lock; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1633,7 +1807,7 @@ out:  call_stub_t *  fop_finodelk_cbk_stub (call_frame_t *frame, fop_inodelk_cbk_t fn, -                       int32_t op_ret, int32_t op_errno) +                       int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1646,6 +1820,9 @@ fop_finodelk_cbk_stub (call_frame_t *frame, fop_inodelk_cbk_t fn,          stub->args.finodelk_cbk.op_ret   = op_ret;          stub->args.finodelk_cbk.op_errno = op_errno; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1654,7 +1831,7 @@ out:  call_stub_t *  fop_entrylk_stub (call_frame_t *frame, fop_entrylk_t fn,                    const char *volume, loc_t *loc, const char *name, -                  entrylk_cmd cmd, entrylk_type type) +                  entrylk_cmd cmd, entrylk_type type, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1675,13 +1852,16 @@ fop_entrylk_stub (call_frame_t *frame, fop_entrylk_t fn,          if (name)                  stub->args.entrylk.name = gf_strdup (name); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  }  call_stub_t *  fop_entrylk_cbk_stub (call_frame_t *frame, fop_entrylk_cbk_t fn, -                      int32_t op_ret, int32_t op_errno) +                      int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1694,6 +1874,9 @@ fop_entrylk_cbk_stub (call_frame_t *frame, fop_entrylk_cbk_t fn,          stub->args.entrylk_cbk.op_ret   = op_ret;          stub->args.entrylk_cbk.op_errno = op_errno; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1702,7 +1885,7 @@ out:  call_stub_t *  fop_fentrylk_stub (call_frame_t *frame, fop_fentrylk_t fn,                     const char *volume, fd_t *fd, const char *name, -                   entrylk_cmd cmd, entrylk_type type) +                   entrylk_cmd cmd, entrylk_type type, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1723,13 +1906,16 @@ fop_fentrylk_stub (call_frame_t *frame, fop_fentrylk_t fn,          if (name)                  stub->args.fentrylk.name = gf_strdup (name); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  }  call_stub_t *  fop_fentrylk_cbk_stub (call_frame_t *frame, fop_fentrylk_cbk_t fn, -                       int32_t op_ret, int32_t op_errno) +                       int32_t op_ret, int32_t op_errno, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1742,6 +1928,9 @@ fop_fentrylk_cbk_stub (call_frame_t *frame, fop_fentrylk_cbk_t fn,          stub->args.fentrylk_cbk.op_ret   = op_ret;          stub->args.fentrylk_cbk.op_errno = op_errno; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1752,7 +1941,7 @@ fop_readdirp_cbk_stub (call_frame_t *frame,                         fop_readdirp_cbk_t fn,                         int32_t op_ret,                         int32_t op_errno, -                       gf_dirent_t *entries) +                       gf_dirent_t *entries, dict_t *xdata)  {          call_stub_t *stub = NULL;          gf_dirent_t *stub_entry = NULL, *entry = NULL; @@ -1784,6 +1973,9 @@ fop_readdirp_cbk_stub (call_frame_t *frame,                                         &stub->args.readdirp_cbk.entries.list);                  }          } +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1794,7 +1986,7 @@ fop_readdir_cbk_stub (call_frame_t *frame,                        fop_readdir_cbk_t fn,                        int32_t op_ret,                        int32_t op_errno, -                      gf_dirent_t *entries) +                      gf_dirent_t *entries, dict_t *xdata)  {          call_stub_t *stub = NULL;          gf_dirent_t *stub_entry = NULL, *entry = NULL; @@ -1826,6 +2018,9 @@ fop_readdir_cbk_stub (call_frame_t *frame,                                         &stub->args.readdir_cbk.entries.list);                  }          } +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1835,7 +2030,7 @@ fop_readdir_stub (call_frame_t *frame,                    fop_readdir_t fn,                    fd_t *fd,                    size_t size, -                  off_t off) +                  off_t off, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1847,6 +2042,9 @@ fop_readdir_stub (call_frame_t *frame,          stub->args.readdir.size = size;          stub->args.readdir.off = off; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1857,7 +2055,7 @@ fop_readdirp_stub (call_frame_t *frame,                     fd_t *fd,                     size_t size,                     off_t off, -                   dict_t *dict) +                   dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1868,9 +2066,8 @@ fop_readdirp_stub (call_frame_t *frame,          stub->args.readdirp.fd = fd_ref (fd);          stub->args.readdirp.size = size;          stub->args.readdirp.off = off; -        if (dict != NULL) { -                stub->args.readdirp.dict = dict_ref (dict); -        } +        if (xdata) +                stub->xdata = dict_ref (xdata);  out:          return stub; @@ -1880,7 +2077,7 @@ call_stub_t *  fop_rchecksum_stub (call_frame_t *frame,                      fop_rchecksum_t fn,                      fd_t *fd, off_t offset, -                    int32_t len) +                    int32_t len, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1894,6 +2091,9 @@ fop_rchecksum_stub (call_frame_t *frame,          stub->args.rchecksum.fd = fd_ref (fd);          stub->args.rchecksum.offset = offset;          stub->args.rchecksum.len    = len; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1905,7 +2105,7 @@ fop_rchecksum_cbk_stub (call_frame_t *frame,                          int32_t op_ret,                          int32_t op_errno,                          uint32_t weak_checksum, -                        uint8_t *strong_checksum) +                        uint8_t *strong_checksum, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1926,6 +2126,9 @@ fop_rchecksum_cbk_stub (call_frame_t *frame,                  stub->args.rchecksum_cbk.strong_checksum =                          memdup (strong_checksum, MD5_DIGEST_LEN);          } +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1935,7 +2138,7 @@ call_stub_t *  fop_xattrop_cbk_stub (call_frame_t *frame,                        fop_xattrop_cbk_t fn,                        int32_t op_ret, -                      int32_t op_errno) +                      int32_t op_errno, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1948,6 +2151,9 @@ fop_xattrop_cbk_stub (call_frame_t *frame,          stub->args.xattrop_cbk.op_ret   = op_ret;          stub->args.xattrop_cbk.op_errno = op_errno; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1958,7 +2164,7 @@ fop_fxattrop_cbk_stub (call_frame_t *frame,                         fop_fxattrop_cbk_t fn,                         int32_t op_ret,                         int32_t op_errno, -                       dict_t *xattr) +                       dict_t *xattr, dict_t *xdata)  {          call_stub_t *stub = NULL;          GF_VALIDATE_OR_GOTO ("call-stub", frame, out); @@ -1972,6 +2178,9 @@ fop_fxattrop_cbk_stub (call_frame_t *frame,          if (xattr)                  stub->args.fxattrop_cbk.xattr = dict_ref (xattr); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -1982,7 +2191,7 @@ fop_xattrop_stub (call_frame_t *frame,                    fop_xattrop_t fn,                    loc_t *loc,                    gf_xattrop_flags_t optype, -                  dict_t *xattr) +                  dict_t *xattr, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -1999,6 +2208,9 @@ fop_xattrop_stub (call_frame_t *frame,          stub->args.xattrop.optype = optype;          stub->args.xattrop.xattr = dict_ref (xattr); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -2008,7 +2220,7 @@ fop_fxattrop_stub (call_frame_t *frame,                     fop_fxattrop_t fn,                     fd_t *fd,                     gf_xattrop_flags_t optype, -                   dict_t *xattr) +                   dict_t *xattr, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -2025,6 +2237,9 @@ fop_fxattrop_stub (call_frame_t *frame,          stub->args.fxattrop.optype = optype;          stub->args.fxattrop.xattr = dict_ref (xattr); +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -2036,7 +2251,7 @@ fop_setattr_cbk_stub (call_frame_t *frame,                        int32_t op_ret,                        int32_t op_errno,                        struct iatt *statpre, -                      struct iatt *statpost) +                      struct iatt *statpost, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -2055,6 +2270,9 @@ fop_setattr_cbk_stub (call_frame_t *frame,          if (statpost)                  stub->args.setattr_cbk.statpost = *statpost; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -2065,7 +2283,7 @@ fop_fsetattr_cbk_stub (call_frame_t *frame,                         int32_t op_ret,                         int32_t op_errno,                         struct iatt *statpre, -                       struct iatt *statpost) +                       struct iatt *statpost, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -2083,6 +2301,9 @@ fop_fsetattr_cbk_stub (call_frame_t *frame,                  stub->args.setattr_cbk.statpre = *statpre;          if (statpost)                  stub->args.fsetattr_cbk.statpost = *statpost; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -2092,7 +2313,7 @@ fop_setattr_stub (call_frame_t *frame,                    fop_setattr_t fn,                    loc_t *loc,                    struct iatt *stbuf, -                  int32_t valid) +                  int32_t valid, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -2111,6 +2332,9 @@ fop_setattr_stub (call_frame_t *frame,          stub->args.setattr.valid = valid; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -2120,7 +2344,7 @@ fop_fsetattr_stub (call_frame_t *frame,                     fop_fsetattr_t fn,                     fd_t *fd,                     struct iatt *stbuf, -                   int32_t valid) +                   int32_t valid, dict_t *xdata)  {          call_stub_t *stub = NULL; @@ -2140,6 +2364,9 @@ fop_fsetattr_stub (call_frame_t *frame,          stub->args.fsetattr.valid = valid; +        if (xdata) +                stub->xdata = dict_ref (xdata); +  out:          return stub;  } @@ -2156,7 +2383,7 @@ call_resume_wind (call_stub_t *stub)                                      stub->frame->this,                                      &stub->args.open.loc,                                      stub->args.open.flags, stub->args.open.fd, -                                    stub->args.open.wbflags); +                                    stub->xdata);                  break;          }          case GF_FOP_CREATE: @@ -2166,15 +2393,16 @@ call_resume_wind (call_stub_t *stub)                                        &stub->args.create.loc,                                        stub->args.create.flags,                                        stub->args.create.mode, +                                      stub->args.create.umask,                                        stub->args.create.fd, -                                      stub->args.create.params); +                                      stub->xdata);                  break;          }          case GF_FOP_STAT:          {                  stub->args.stat.fn (stub->frame,                                      stub->frame->this, -                                    &stub->args.stat.loc); +                                    &stub->args.stat.loc, stub->xdata);                  break;          }          case GF_FOP_READLINK: @@ -2182,7 +2410,7 @@ call_resume_wind (call_stub_t *stub)                  stub->args.readlink.fn (stub->frame,                                          stub->frame->this,                                          &stub->args.readlink.loc, -                                        stub->args.readlink.size); +                                        stub->args.readlink.size, stub->xdata);                  break;          } @@ -2192,7 +2420,7 @@ call_resume_wind (call_stub_t *stub)                                       &stub->args.mknod.loc,                                       stub->args.mknod.mode,                                       stub->args.mknod.rdev, -                                     stub->args.mknod.params); +                                     stub->args.mknod.umask, stub->xdata);          }          break; @@ -2201,7 +2429,7 @@ call_resume_wind (call_stub_t *stub)                  stub->args.mkdir.fn (stub->frame, stub->frame->this,                                       &stub->args.mkdir.loc,                                       stub->args.mkdir.mode, -                                     stub->args.mkdir.params); +                                     stub->args.mkdir.umask, stub->xdata);          }          break; @@ -2209,7 +2437,8 @@ call_resume_wind (call_stub_t *stub)          {                  stub->args.unlink.fn (stub->frame,                                        stub->frame->this, -                                      &stub->args.unlink.loc); +                                      &stub->args.unlink.loc, +                                      stub->args.unlink.xflag, stub->xdata);          }          break; @@ -2217,7 +2446,7 @@ call_resume_wind (call_stub_t *stub)          {                  stub->args.rmdir.fn (stub->frame, stub->frame->this,                                       &stub->args.rmdir.loc, -                                     stub->args.rmdir.flags); +                                     stub->args.rmdir.flags, stub->xdata);          }          break; @@ -2227,7 +2456,7 @@ call_resume_wind (call_stub_t *stub)                                         stub->frame->this,                                         stub->args.symlink.linkname,                                         &stub->args.symlink.loc, -                                       stub->args.symlink.params); +                                       stub->args.symlink.umask, stub->xdata);          }          break; @@ -2236,7 +2465,7 @@ call_resume_wind (call_stub_t *stub)                  stub->args.rename.fn (stub->frame,                                        stub->frame->this,                                        &stub->args.rename.old, -                                      &stub->args.rename.new); +                                      &stub->args.rename.new, stub->xdata);          }          break; @@ -2245,7 +2474,7 @@ call_resume_wind (call_stub_t *stub)                  stub->args.link.fn (stub->frame,                                      stub->frame->this,                                      &stub->args.link.oldloc, -                                    &stub->args.link.newloc); +                                    &stub->args.link.newloc, stub->xdata);          }          break; @@ -2254,7 +2483,7 @@ call_resume_wind (call_stub_t *stub)                  stub->args.truncate.fn (stub->frame,                                          stub->frame->this,                                          &stub->args.truncate.loc, -                                        stub->args.truncate.off); +                                        stub->args.truncate.off, stub->xdata);                  break;          } @@ -2265,7 +2494,7 @@ call_resume_wind (call_stub_t *stub)                                       stub->args.readv.fd,                                       stub->args.readv.size,                                       stub->args.readv.off, -                                     stub->args.readv.flags); +                                     stub->args.readv.flags, stub->xdata);                  break;          } @@ -2278,7 +2507,7 @@ call_resume_wind (call_stub_t *stub)                                        stub->args.writev.count,                                        stub->args.writev.off,                                        stub->args.writev.flags, -                                      stub->args.writev.iobref); +                                      stub->args.writev.iobref, stub->xdata);                  break;          } @@ -2286,14 +2515,14 @@ call_resume_wind (call_stub_t *stub)          {                  stub->args.statfs.fn (stub->frame,                                        stub->frame->this, -                                      &stub->args.statfs.loc); +                                      &stub->args.statfs.loc, stub->xdata);                  break;          }          case GF_FOP_FLUSH:          {                  stub->args.flush.fn (stub->frame,                                       stub->frame->this, -                                     stub->args.flush.fd); +                                     stub->args.flush.fd, stub->xdata);                  break;          } @@ -2302,7 +2531,7 @@ call_resume_wind (call_stub_t *stub)                  stub->args.fsync.fn (stub->frame,                                       stub->frame->this,                                       stub->args.fsync.fd, -                                     stub->args.fsync.datasync); +                                     stub->args.fsync.datasync, stub->xdata);                  break;          } @@ -2312,7 +2541,7 @@ call_resume_wind (call_stub_t *stub)                                          stub->frame->this,                                          &stub->args.setxattr.loc,                                          stub->args.setxattr.dict, -                                        stub->args.setxattr.flags); +                                        stub->args.setxattr.flags, stub->xdata);                  break;          } @@ -2321,7 +2550,7 @@ call_resume_wind (call_stub_t *stub)                  stub->args.getxattr.fn (stub->frame,                                          stub->frame->this,                                          &stub->args.getxattr.loc, -                                        stub->args.getxattr.name); +                                        stub->args.getxattr.name, stub->xdata);                  break;          } @@ -2331,7 +2560,7 @@ call_resume_wind (call_stub_t *stub)                                           stub->frame->this,                                           stub->args.fsetxattr.fd,                                           stub->args.fsetxattr.dict, -                                         stub->args.fsetxattr.flags); +                                         stub->args.fsetxattr.flags, stub->xdata);                  break;          } @@ -2340,7 +2569,7 @@ call_resume_wind (call_stub_t *stub)                  stub->args.fgetxattr.fn (stub->frame,                                           stub->frame->this,                                           stub->args.fgetxattr.fd, -                                         stub->args.fgetxattr.name); +                                         stub->args.fgetxattr.name, stub->xdata);                  break;          } @@ -2349,7 +2578,7 @@ call_resume_wind (call_stub_t *stub)                  stub->args.removexattr.fn (stub->frame,                                             stub->frame->this,                                             &stub->args.removexattr.loc, -                                           stub->args.removexattr.name); +                                           stub->args.removexattr.name, stub->xdata);                  break;          } @@ -2358,7 +2587,7 @@ call_resume_wind (call_stub_t *stub)                  stub->args.fremovexattr.fn (stub->frame,                                              stub->frame->this,                                              stub->args.fremovexattr.fd, -                                            stub->args.fremovexattr.name); +                                            stub->args.fremovexattr.name, stub->xdata);                  break;          } @@ -2367,7 +2596,7 @@ call_resume_wind (call_stub_t *stub)                  stub->args.opendir.fn (stub->frame,                                         stub->frame->this,                                         &stub->args.opendir.loc, -                                       stub->args.opendir.fd); +                                       stub->args.opendir.fd, stub->xdata);                  break;          } @@ -2376,7 +2605,7 @@ call_resume_wind (call_stub_t *stub)                  stub->args.fsyncdir.fn (stub->frame,                                          stub->frame->this,                                          stub->args.fsyncdir.fd, -                                        stub->args.fsyncdir.datasync); +                                        stub->args.fsyncdir.datasync, stub->xdata);                  break;          } @@ -2385,7 +2614,7 @@ call_resume_wind (call_stub_t *stub)                  stub->args.access.fn (stub->frame,                                        stub->frame->this,                                        &stub->args.access.loc, -                                      stub->args.access.mask); +                                      stub->args.access.mask, stub->xdata);                  break;          } @@ -2394,7 +2623,7 @@ call_resume_wind (call_stub_t *stub)                  stub->args.ftruncate.fn (stub->frame,                                           stub->frame->this,                                           stub->args.ftruncate.fd, -                                         stub->args.ftruncate.off); +                                         stub->args.ftruncate.off, stub->xdata);                  break;          } @@ -2402,7 +2631,7 @@ call_resume_wind (call_stub_t *stub)          {                  stub->args.fstat.fn (stub->frame,                                       stub->frame->this, -                                     stub->args.fstat.fd); +                                     stub->args.fstat.fd, stub->xdata);                  break;          } @@ -2412,7 +2641,7 @@ call_resume_wind (call_stub_t *stub)                                    stub->frame->this,                                    stub->args.lk.fd,                                    stub->args.lk.cmd, -                                  &stub->args.lk.lock); +                                  &stub->args.lk.lock, stub->xdata);                  break;          } @@ -2423,7 +2652,7 @@ call_resume_wind (call_stub_t *stub)                                         stub->args.inodelk.volume,                                         &stub->args.inodelk.loc,                                         stub->args.inodelk.cmd, -                                       &stub->args.inodelk.lock); +                                       &stub->args.inodelk.lock, stub->xdata);                  break;          } @@ -2434,7 +2663,7 @@ call_resume_wind (call_stub_t *stub)                                          stub->args.finodelk.volume,                                          stub->args.finodelk.fd,                                          stub->args.finodelk.cmd, -                                        &stub->args.finodelk.lock); +                                        &stub->args.finodelk.lock, stub->xdata);                  break;          } @@ -2446,7 +2675,7 @@ call_resume_wind (call_stub_t *stub)                                         &stub->args.entrylk.loc,                                         stub->args.entrylk.name,                                         stub->args.entrylk.cmd, -                                       stub->args.entrylk.type); +                                       stub->args.entrylk.type, stub->xdata);                  break;          } @@ -2458,7 +2687,7 @@ call_resume_wind (call_stub_t *stub)                                          stub->args.fentrylk.fd,                                          stub->args.fentrylk.name,                                          stub->args.fentrylk.cmd, -                                        stub->args.fentrylk.type); +                                        stub->args.fentrylk.type, stub->xdata);                  break;          } @@ -2469,7 +2698,7 @@ call_resume_wind (call_stub_t *stub)                  stub->args.lookup.fn (stub->frame,                                        stub->frame->this,                                        &stub->args.lookup.loc, -                                      stub->args.lookup.xattr_req); +                                      stub->xdata);                  break;          } @@ -2479,7 +2708,7 @@ call_resume_wind (call_stub_t *stub)                                           stub->frame->this,                                           stub->args.rchecksum.fd,                                           stub->args.rchecksum.offset, -                                         stub->args.rchecksum.len); +                                         stub->args.rchecksum.len, stub->xdata);                  break;          } @@ -2489,7 +2718,7 @@ call_resume_wind (call_stub_t *stub)                                         stub->frame->this,                                         stub->args.readdir.fd,                                         stub->args.readdir.size, -                                       stub->args.readdir.off); +                                       stub->args.readdir.off, stub->xdata);                  break;          } @@ -2500,7 +2729,7 @@ call_resume_wind (call_stub_t *stub)                                          stub->args.readdirp.fd,                                          stub->args.readdirp.size,                                          stub->args.readdirp.off, -                                        stub->args.readdirp.dict); +                                        stub->xdata);                  break;          } @@ -2510,7 +2739,7 @@ call_resume_wind (call_stub_t *stub)                                         stub->frame->this,                                         &stub->args.xattrop.loc,                                         stub->args.xattrop.optype, -                                       stub->args.xattrop.xattr); +                                       stub->args.xattrop.xattr, stub->xdata);                  break;          } @@ -2520,7 +2749,7 @@ call_resume_wind (call_stub_t *stub)                                          stub->frame->this,                                          stub->args.fxattrop.fd,                                          stub->args.fxattrop.optype, -                                        stub->args.fxattrop.xattr); +                                        stub->args.fxattrop.xattr, stub->xdata);                  break;          } @@ -2530,7 +2759,7 @@ call_resume_wind (call_stub_t *stub)                                         stub->frame->this,                                         &stub->args.setattr.loc,                                         &stub->args.setattr.stbuf, -                                       stub->args.setattr.valid); +                                       stub->args.setattr.valid, stub->xdata);                  break;          }          case GF_FOP_FSETATTR: @@ -2539,7 +2768,7 @@ call_resume_wind (call_stub_t *stub)                                          stub->frame->this,                                          stub->args.fsetattr.fd,                                          &stub->args.fsetattr.stbuf, -                                        stub->args.fsetattr.valid); +                                        stub->args.fsetattr.valid, stub->xdata);                  break;          }          default: @@ -2569,14 +2798,14 @@ call_resume_unwind (call_stub_t *stub)                          STACK_UNWIND (stub->frame,                                        stub->args.open_cbk.op_ret,                                        stub->args.open_cbk.op_errno, -                                      stub->args.open_cbk.fd); +                                      stub->args.open_cbk.fd, stub->xdata);                  else                          stub->args.open_cbk.fn (stub->frame,                                                  stub->frame->cookie,                                                  stub->frame->this,                                                  stub->args.open_cbk.op_ret,                                                  stub->args.open_cbk.op_errno, -                                                stub->args.open_cbk.fd); +                                                stub->args.open_cbk.fd, stub->xdata);                  break;          } @@ -2590,7 +2819,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.create_cbk.inode,                                        &stub->args.create_cbk.buf,                                        &stub->args.create_cbk.preparent, -                                      &stub->args.create_cbk.postparent); +                                      &stub->args.create_cbk.postparent, stub->xdata);                  else                          stub->args.create_cbk.fn (stub->frame,                                                    stub->frame->cookie, @@ -2601,7 +2830,7 @@ call_resume_unwind (call_stub_t *stub)                                                    stub->args.create_cbk.inode,                                                    &stub->args.create_cbk.buf,                                                    &stub->args.create_cbk.preparent, -                                                  &stub->args.create_cbk.postparent); +                                                  &stub->args.create_cbk.postparent, stub->xdata);                  break;          } @@ -2612,14 +2841,14 @@ call_resume_unwind (call_stub_t *stub)                          STACK_UNWIND (stub->frame,                                        stub->args.stat_cbk.op_ret,                                        stub->args.stat_cbk.op_errno, -                                      &stub->args.stat_cbk.buf); +                                      &stub->args.stat_cbk.buf, stub->xdata);                  else                          stub->args.stat_cbk.fn (stub->frame,                                                  stub->frame->cookie,                                                  stub->frame->this,                                                  stub->args.stat_cbk.op_ret,                                                  stub->args.stat_cbk.op_errno, -                                                &stub->args.stat_cbk.buf); +                                                &stub->args.stat_cbk.buf, stub->xdata);                  break;          } @@ -2631,7 +2860,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.readlink_cbk.op_ret,                                        stub->args.readlink_cbk.op_errno,                                        stub->args.readlink_cbk.buf, -                                      &stub->args.readlink_cbk.sbuf); +                                      &stub->args.readlink_cbk.sbuf, stub->xdata);                  else                          stub->args.readlink_cbk.fn (stub->frame,                                                      stub->frame->cookie, @@ -2639,7 +2868,7 @@ call_resume_unwind (call_stub_t *stub)                                                      stub->args.readlink_cbk.op_ret,                                                      stub->args.readlink_cbk.op_errno,                                                      stub->args.readlink_cbk.buf, -                                                    &stub->args.readlink_cbk.sbuf); +                                                    &stub->args.readlink_cbk.sbuf, stub->xdata);                  break;          } @@ -2653,7 +2882,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.mknod_cbk.inode,                                        &stub->args.mknod_cbk.buf,                                        &stub->args.mknod_cbk.preparent, -                                      &stub->args.mknod_cbk.postparent); +                                      &stub->args.mknod_cbk.postparent, stub->xdata);                  else                          stub->args.mknod_cbk.fn (stub->frame,                                                   stub->frame->cookie, @@ -2663,7 +2892,7 @@ call_resume_unwind (call_stub_t *stub)                                                   stub->args.mknod_cbk.inode,                                                   &stub->args.mknod_cbk.buf,                                                   &stub->args.mknod_cbk.preparent, -                                                 &stub->args.mknod_cbk.postparent); +                                                 &stub->args.mknod_cbk.postparent, stub->xdata);                  break;          } @@ -2676,7 +2905,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.mkdir_cbk.inode,                                        &stub->args.mkdir_cbk.buf,                                        &stub->args.mkdir_cbk.preparent, -                                      &stub->args.mkdir_cbk.postparent); +                                      &stub->args.mkdir_cbk.postparent, stub->xdata);                  else                          stub->args.mkdir_cbk.fn (stub->frame,                                                   stub->frame->cookie, @@ -2686,7 +2915,7 @@ call_resume_unwind (call_stub_t *stub)                                                   stub->args.mkdir_cbk.inode,                                                   &stub->args.mkdir_cbk.buf,                                                   &stub->args.mkdir_cbk.preparent, -                                                 &stub->args.mkdir_cbk.postparent); +                                                 &stub->args.mkdir_cbk.postparent, stub->xdata);                  if (stub->args.mkdir_cbk.inode)                          inode_unref (stub->args.mkdir_cbk.inode); @@ -2701,7 +2930,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.unlink_cbk.op_ret,                                        stub->args.unlink_cbk.op_errno,                                        &stub->args.unlink_cbk.preparent, -                                      &stub->args.unlink_cbk.postparent); +                                      &stub->args.unlink_cbk.postparent, stub->xdata);                  else                          stub->args.unlink_cbk.fn (stub->frame,                                                    stub->frame->cookie, @@ -2709,7 +2938,7 @@ call_resume_unwind (call_stub_t *stub)                                                    stub->args.unlink_cbk.op_ret,                                                    stub->args.unlink_cbk.op_errno,                                                    &stub->args.unlink_cbk.preparent, -                                                  &stub->args.unlink_cbk.postparent); +                                                  &stub->args.unlink_cbk.postparent, stub->xdata);                  break;          } @@ -2720,7 +2949,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.rmdir_cbk.op_ret,                                        stub->args.rmdir_cbk.op_errno,                                        &stub->args.rmdir_cbk.preparent, -                                      &stub->args.rmdir_cbk.postparent); +                                      &stub->args.rmdir_cbk.postparent, stub->xdata);                  else                          stub->args.rmdir_cbk.fn (stub->frame,                                                   stub->frame->cookie, @@ -2728,7 +2957,7 @@ call_resume_unwind (call_stub_t *stub)                                                   stub->args.rmdir_cbk.op_ret,                                                   stub->args.rmdir_cbk.op_errno,                                                   &stub->args.rmdir_cbk.preparent, -                                                 &stub->args.rmdir_cbk.postparent); +                                                 &stub->args.rmdir_cbk.postparent, stub->xdata);                  break;          } @@ -2741,7 +2970,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.symlink_cbk.inode,                                        &stub->args.symlink_cbk.buf,                                        &stub->args.symlink_cbk.preparent, -                                      &stub->args.symlink_cbk.postparent); +                                      &stub->args.symlink_cbk.postparent, stub->xdata);                  else                          stub->args.symlink_cbk.fn (stub->frame,                                                     stub->frame->cookie, @@ -2751,7 +2980,7 @@ call_resume_unwind (call_stub_t *stub)                                                     stub->args.symlink_cbk.inode,                                                     &stub->args.symlink_cbk.buf,                                                     &stub->args.symlink_cbk.preparent, -                                                   &stub->args.symlink_cbk.postparent); +                                                   &stub->args.symlink_cbk.postparent, stub->xdata);          }          break; @@ -2765,7 +2994,7 @@ call_resume_unwind (call_stub_t *stub)                                        &stub->args.rename_cbk.preoldparent,                                        &stub->args.rename_cbk.postoldparent,                                        &stub->args.rename_cbk.prenewparent, -                                      &stub->args.rename_cbk.postnewparent); +                                      &stub->args.rename_cbk.postnewparent, stub->xdata);                  else                          stub->args.rename_cbk.fn (stub->frame,                                                    stub->frame->cookie, @@ -2776,7 +3005,7 @@ call_resume_unwind (call_stub_t *stub)                                                    &stub->args.rename_cbk.preoldparent,                                                    &stub->args.rename_cbk.postoldparent,                                                    &stub->args.rename_cbk.prenewparent, -                                                  &stub->args.rename_cbk.postnewparent); +                                                  &stub->args.rename_cbk.postnewparent, stub->xdata);                  break;          } @@ -2787,7 +3016,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.link_cbk.op_ret,                                        stub->args.link_cbk.op_errno,                                        stub->args.link_cbk.inode, -                                      &stub->args.link_cbk.buf); +                                      &stub->args.link_cbk.buf, stub->xdata);                  else                          stub->args.link_cbk.fn (stub->frame,                                                  stub->frame->cookie, @@ -2797,7 +3026,7 @@ call_resume_unwind (call_stub_t *stub)                                                  stub->args.link_cbk.inode,                                                  &stub->args.link_cbk.buf,                                                  &stub->args.link_cbk.preparent, -                                                &stub->args.link_cbk.postparent); +                                                &stub->args.link_cbk.postparent, stub->xdata);                  break;          } @@ -2808,7 +3037,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.truncate_cbk.op_ret,                                        stub->args.truncate_cbk.op_errno,                                        &stub->args.truncate_cbk.prebuf, -                                      &stub->args.truncate_cbk.postbuf); +                                      &stub->args.truncate_cbk.postbuf, stub->xdata);                  else                          stub->args.truncate_cbk.fn (stub->frame,                                                      stub->frame->cookie, @@ -2816,7 +3045,7 @@ call_resume_unwind (call_stub_t *stub)                                                      stub->args.truncate_cbk.op_ret,                                                      stub->args.truncate_cbk.op_errno,                                                      &stub->args.truncate_cbk.prebuf, -                                                    &stub->args.truncate_cbk.postbuf); +                                                    &stub->args.truncate_cbk.postbuf, stub->xdata);                  break;          } @@ -2829,7 +3058,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.readv_cbk.vector,                                        stub->args.readv_cbk.count,                                        &stub->args.readv_cbk.stbuf, -                                      stub->args.readv_cbk.iobref); +                                      stub->args.readv_cbk.iobref, stub->xdata);                  else                          stub->args.readv_cbk.fn (stub->frame,                                                   stub->frame->cookie, @@ -2839,7 +3068,7 @@ call_resume_unwind (call_stub_t *stub)                                                   stub->args.readv_cbk.vector,                                                   stub->args.readv_cbk.count,                                                   &stub->args.readv_cbk.stbuf, -                                                 stub->args.readv_cbk.iobref); +                                                 stub->args.readv_cbk.iobref, stub->xdata);          }          break; @@ -2850,7 +3079,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.writev_cbk.op_ret,                                        stub->args.writev_cbk.op_errno,                                        &stub->args.writev_cbk.prebuf, -                                      &stub->args.writev_cbk.postbuf); +                                      &stub->args.writev_cbk.postbuf, stub->xdata);                  else                          stub->args.writev_cbk.fn (stub->frame,                                                    stub->frame->cookie, @@ -2858,7 +3087,7 @@ call_resume_unwind (call_stub_t *stub)                                                    stub->args.writev_cbk.op_ret,                                                    stub->args.writev_cbk.op_errno,                                                    &stub->args.writev_cbk.prebuf, -                                                  &stub->args.writev_cbk.postbuf); +                                                  &stub->args.writev_cbk.postbuf, stub->xdata);                  break;          } @@ -2868,14 +3097,14 @@ call_resume_unwind (call_stub_t *stub)                          STACK_UNWIND (stub->frame,                                        stub->args.statfs_cbk.op_ret,                                        stub->args.statfs_cbk.op_errno, -                                      &(stub->args.statfs_cbk.buf)); +                                      &(stub->args.statfs_cbk.buf), stub->xdata);                  else                          stub->args.statfs_cbk.fn (stub->frame,                                                    stub->frame->cookie,                                                    stub->frame->this,                                                    stub->args.statfs_cbk.op_ret,                                                    stub->args.statfs_cbk.op_errno, -                                                  &(stub->args.statfs_cbk.buf)); +                                                  &(stub->args.statfs_cbk.buf), stub->xdata);          }          break; @@ -2884,13 +3113,13 @@ call_resume_unwind (call_stub_t *stub)                  if (!stub->args.flush_cbk.fn)                          STACK_UNWIND (stub->frame,                                        stub->args.flush_cbk.op_ret, -                                      stub->args.flush_cbk.op_errno); +                                      stub->args.flush_cbk.op_errno, stub->xdata);                  else                          stub->args.flush_cbk.fn (stub->frame,                                                   stub->frame->cookie,                                                   stub->frame->this,                                                   stub->args.flush_cbk.op_ret, -                                                 stub->args.flush_cbk.op_errno); +                                                 stub->args.flush_cbk.op_errno, stub->xdata);                  break;          } @@ -2902,7 +3131,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.fsync_cbk.op_ret,                                        stub->args.fsync_cbk.op_errno,                                        &stub->args.fsync_cbk.prebuf, -                                      &stub->args.fsync_cbk.postbuf); +                                      &stub->args.fsync_cbk.postbuf, stub->xdata);                  else                          stub->args.fsync_cbk.fn (stub->frame,                                                   stub->frame->cookie, @@ -2910,7 +3139,7 @@ call_resume_unwind (call_stub_t *stub)                                                   stub->args.fsync_cbk.op_ret,                                                   stub->args.fsync_cbk.op_errno,                                                   &stub->args.fsync_cbk.prebuf, -                                                 &stub->args.fsync_cbk.postbuf); +                                                 &stub->args.fsync_cbk.postbuf, stub->xdata);                  break;          } @@ -2919,14 +3148,14 @@ call_resume_unwind (call_stub_t *stub)                  if (!stub->args.setxattr_cbk.fn)                          STACK_UNWIND (stub->frame,                                        stub->args.setxattr_cbk.op_ret, -                                      stub->args.setxattr_cbk.op_errno); +                                      stub->args.setxattr_cbk.op_errno, stub->xdata);                  else                          stub->args.setxattr_cbk.fn (stub->frame,                                                      stub->frame->cookie,                                                      stub->frame->this,                                                      stub->args.setxattr_cbk.op_ret, -                                                    stub->args.setxattr_cbk.op_errno); +                                                    stub->args.setxattr_cbk.op_errno, stub->xdata);                  break;          } @@ -2937,14 +3166,14 @@ call_resume_unwind (call_stub_t *stub)                          STACK_UNWIND (stub->frame,                                        stub->args.getxattr_cbk.op_ret,                                        stub->args.getxattr_cbk.op_errno, -                                      stub->args.getxattr_cbk.dict); +                                      stub->args.getxattr_cbk.dict, stub->xdata);                  else                          stub->args.getxattr_cbk.fn (stub->frame,                                                      stub->frame->cookie,                                                      stub->frame->this,                                                      stub->args.getxattr_cbk.op_ret,                                                      stub->args.getxattr_cbk.op_errno, -                                                    stub->args.getxattr_cbk.dict); +                                                    stub->args.getxattr_cbk.dict, stub->xdata);                  break;          } @@ -2953,14 +3182,14 @@ call_resume_unwind (call_stub_t *stub)                  if (!stub->args.fsetxattr_cbk.fn)                          STACK_UNWIND (stub->frame,                                        stub->args.fsetxattr_cbk.op_ret, -                                      stub->args.fsetxattr_cbk.op_errno); +                                      stub->args.fsetxattr_cbk.op_errno, stub->xdata);                  else                          stub->args.fsetxattr_cbk.fn (stub->frame,                                                       stub->frame->cookie,                                                       stub->frame->this,                                                       stub->args.fsetxattr_cbk.op_ret, -                                                     stub->args.fsetxattr_cbk.op_errno); +                                                     stub->args.fsetxattr_cbk.op_errno, stub->xdata);                  break;          } @@ -2971,14 +3200,14 @@ call_resume_unwind (call_stub_t *stub)                          STACK_UNWIND (stub->frame,                                        stub->args.fgetxattr_cbk.op_ret,                                        stub->args.fgetxattr_cbk.op_errno, -                                      stub->args.fgetxattr_cbk.dict); +                                      stub->args.fgetxattr_cbk.dict, stub->xdata);                  else                          stub->args.fgetxattr_cbk.fn (stub->frame,                                                       stub->frame->cookie,                                                       stub->frame->this,                                                       stub->args.fgetxattr_cbk.op_ret,                                                       stub->args.fgetxattr_cbk.op_errno, -                                                     stub->args.fgetxattr_cbk.dict); +                                                     stub->args.fgetxattr_cbk.dict, stub->xdata);                  break;          } @@ -2987,13 +3216,13 @@ call_resume_unwind (call_stub_t *stub)                  if (!stub->args.removexattr_cbk.fn)                          STACK_UNWIND (stub->frame,                                        stub->args.removexattr_cbk.op_ret, -                                      stub->args.removexattr_cbk.op_errno); +                                      stub->args.removexattr_cbk.op_errno, stub->xdata);                  else                          stub->args.removexattr_cbk.fn (stub->frame,                                                         stub->frame->cookie,                                                         stub->frame->this,                                                         stub->args.removexattr_cbk.op_ret, -                                                       stub->args.removexattr_cbk.op_errno); +                                                       stub->args.removexattr_cbk.op_errno, stub->xdata);                  break;          } @@ -3003,13 +3232,13 @@ call_resume_unwind (call_stub_t *stub)                  if (!stub->args.fremovexattr_cbk.fn)                          STACK_UNWIND (stub->frame,                                        stub->args.fremovexattr_cbk.op_ret, -                                      stub->args.fremovexattr_cbk.op_errno); +                                      stub->args.fremovexattr_cbk.op_errno, stub->xdata);                  else                          stub->args.fremovexattr_cbk.fn (stub->frame,                                                          stub->frame->cookie,                                                          stub->frame->this,                                                          stub->args.fremovexattr_cbk.op_ret, -                                                        stub->args.fremovexattr_cbk.op_errno); +                                                        stub->args.fremovexattr_cbk.op_errno, stub->xdata);                  break;          } @@ -3020,14 +3249,14 @@ call_resume_unwind (call_stub_t *stub)                          STACK_UNWIND (stub->frame,                                        stub->args.opendir_cbk.op_ret,                                        stub->args.opendir_cbk.op_errno, -                                      stub->args.opendir_cbk.fd); +                                      stub->args.opendir_cbk.fd, stub->xdata);                  else                          stub->args.opendir_cbk.fn (stub->frame,                                                     stub->frame->cookie,                                                     stub->frame->this,                                                     stub->args.opendir_cbk.op_ret,                                                     stub->args.opendir_cbk.op_errno, -                                                   stub->args.opendir_cbk.fd); +                                                   stub->args.opendir_cbk.fd, stub->xdata);                  break;          } @@ -3036,13 +3265,13 @@ call_resume_unwind (call_stub_t *stub)                  if (!stub->args.fsyncdir_cbk.fn)                          STACK_UNWIND (stub->frame,                                        stub->args.fsyncdir_cbk.op_ret, -                                      stub->args.fsyncdir_cbk.op_errno); +                                      stub->args.fsyncdir_cbk.op_errno, stub->xdata);                  else                          stub->args.fsyncdir_cbk.fn (stub->frame,                                                      stub->frame->cookie,                                                      stub->frame->this,                                                      stub->args.fsyncdir_cbk.op_ret, -                                                    stub->args.fsyncdir_cbk.op_errno); +                                                    stub->args.fsyncdir_cbk.op_errno, stub->xdata);                  break;          } @@ -3051,13 +3280,13 @@ call_resume_unwind (call_stub_t *stub)                  if (!stub->args.access_cbk.fn)                          STACK_UNWIND (stub->frame,                                        stub->args.access_cbk.op_ret, -                                      stub->args.access_cbk.op_errno); +                                      stub->args.access_cbk.op_errno, stub->xdata);                  else                          stub->args.access_cbk.fn (stub->frame,                                                    stub->frame->cookie,                                                    stub->frame->this,                                                    stub->args.access_cbk.op_ret, -                                                  stub->args.access_cbk.op_errno); +                                                  stub->args.access_cbk.op_errno, stub->xdata);                  break;          } @@ -3069,7 +3298,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.ftruncate_cbk.op_ret,                                        stub->args.ftruncate_cbk.op_errno,                                        &stub->args.ftruncate_cbk.prebuf, -                                      &stub->args.ftruncate_cbk.postbuf); +                                      &stub->args.ftruncate_cbk.postbuf, stub->xdata);                  else                          stub->args.ftruncate_cbk.fn (stub->frame,                                                       stub->frame->cookie, @@ -3077,7 +3306,7 @@ call_resume_unwind (call_stub_t *stub)                                                       stub->args.ftruncate_cbk.op_ret,                                                       stub->args.ftruncate_cbk.op_errno,                                                       &stub->args.ftruncate_cbk.prebuf, -                                                     &stub->args.ftruncate_cbk.postbuf); +                                                     &stub->args.ftruncate_cbk.postbuf, stub->xdata);                  break;          } @@ -3087,14 +3316,14 @@ call_resume_unwind (call_stub_t *stub)                          STACK_UNWIND (stub->frame,                                        stub->args.fstat_cbk.op_ret,                                        stub->args.fstat_cbk.op_errno, -                                      &stub->args.fstat_cbk.buf); +                                      &stub->args.fstat_cbk.buf, stub->xdata);                  else                          stub->args.fstat_cbk.fn (stub->frame,                                                   stub->frame->cookie,                                                   stub->frame->this,                                                   stub->args.fstat_cbk.op_ret,                                                   stub->args.fstat_cbk.op_errno, -                                                 &stub->args.fstat_cbk.buf); +                                                 &stub->args.fstat_cbk.buf, stub->xdata);                  break;          } @@ -3105,14 +3334,14 @@ call_resume_unwind (call_stub_t *stub)                          STACK_UNWIND (stub->frame,                                        stub->args.lk_cbk.op_ret,                                        stub->args.lk_cbk.op_errno, -                                      &stub->args.lk_cbk.lock); +                                      &stub->args.lk_cbk.lock, stub->xdata);                  else                          stub->args.lk_cbk.fn (stub->frame,                                                stub->frame->cookie,                                                stub->frame->this,                                                stub->args.lk_cbk.op_ret,                                                stub->args.lk_cbk.op_errno, -                                              &stub->args.lk_cbk.lock); +                                              &stub->args.lk_cbk.lock, stub->xdata);                  break;          } @@ -3121,14 +3350,14 @@ call_resume_unwind (call_stub_t *stub)                  if (!stub->args.inodelk_cbk.fn)                          STACK_UNWIND (stub->frame,                                        stub->args.inodelk_cbk.op_ret, -                                      stub->args.inodelk_cbk.op_errno); +                                      stub->args.inodelk_cbk.op_errno, stub->xdata);                  else                          stub->args.inodelk_cbk.fn (stub->frame,                                                     stub->frame->cookie,                                                     stub->frame->this,                                                     stub->args.inodelk_cbk.op_ret, -                                                   stub->args.inodelk_cbk.op_errno); +                                                   stub->args.inodelk_cbk.op_errno, stub->xdata);                  break;          } @@ -3137,14 +3366,14 @@ call_resume_unwind (call_stub_t *stub)                  if (!stub->args.finodelk_cbk.fn)                          STACK_UNWIND (stub->frame,                                        stub->args.finodelk_cbk.op_ret, -                                      stub->args.finodelk_cbk.op_errno); +                                      stub->args.finodelk_cbk.op_errno, stub->xdata);                  else                          stub->args.finodelk_cbk.fn (stub->frame,                                                      stub->frame->cookie,                                                      stub->frame->this,                                                      stub->args.finodelk_cbk.op_ret, -                                                    stub->args.finodelk_cbk.op_errno); +                                                    stub->args.finodelk_cbk.op_errno, stub->xdata);                  break;          } @@ -3153,14 +3382,14 @@ call_resume_unwind (call_stub_t *stub)                  if (!stub->args.entrylk_cbk.fn)                          STACK_UNWIND (stub->frame,                                        stub->args.entrylk_cbk.op_ret, -                                      stub->args.entrylk_cbk.op_errno); +                                      stub->args.entrylk_cbk.op_errno, stub->xdata);                  else                          stub->args.entrylk_cbk.fn (stub->frame,                                                     stub->frame->cookie,                                                     stub->frame->this,                                                     stub->args.entrylk_cbk.op_ret, -                                                   stub->args.entrylk_cbk.op_errno); +                                                   stub->args.entrylk_cbk.op_errno, stub->xdata);                  break;          } @@ -3169,14 +3398,14 @@ call_resume_unwind (call_stub_t *stub)                  if (!stub->args.fentrylk_cbk.fn)                          STACK_UNWIND (stub->frame,                                        stub->args.fentrylk_cbk.op_ret, -                                      stub->args.fentrylk_cbk.op_errno); +                                      stub->args.fentrylk_cbk.op_errno, stub->xdata);                  else                          stub->args.fentrylk_cbk.fn (stub->frame,                                                      stub->frame->cookie,                                                      stub->frame->this,                                                      stub->args.fentrylk_cbk.op_ret, -                                                    stub->args.fentrylk_cbk.op_errno); +                                                    stub->args.fentrylk_cbk.op_errno, stub->xdata);                  break;          } @@ -3188,7 +3417,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.lookup_cbk.op_errno,                                        stub->args.lookup_cbk.inode,                                        &stub->args.lookup_cbk.buf, -                                      stub->args.lookup_cbk.dict, +                                      stub->xdata,                                        &stub->args.lookup_cbk.postparent);                  else                          stub->args.lookup_cbk.fn (stub->frame, @@ -3198,12 +3427,10 @@ call_resume_unwind (call_stub_t *stub)                                                    stub->args.lookup_cbk.op_errno,                                                    stub->args.lookup_cbk.inode,                                                    &stub->args.lookup_cbk.buf, -                                                  stub->args.lookup_cbk.dict, +                                                  stub->xdata,                                                    &stub->args.lookup_cbk.postparent);                  /* FIXME NULL should not be passed */ -                if (stub->args.lookup_cbk.dict) -                        dict_unref (stub->args.lookup_cbk.dict);                  if (stub->args.lookup_cbk.inode)                          inode_unref (stub->args.lookup_cbk.inode); @@ -3217,7 +3444,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.rchecksum_cbk.op_ret,                                        stub->args.rchecksum_cbk.op_errno,                                        stub->args.rchecksum_cbk.weak_checksum, -                                      stub->args.rchecksum_cbk.strong_checksum); +                                      stub->args.rchecksum_cbk.strong_checksum, stub->xdata);                  else                          stub->args.rchecksum_cbk.fn (stub->frame,                                                       stub->frame->cookie, @@ -3225,11 +3452,10 @@ call_resume_unwind (call_stub_t *stub)                                                       stub->args.rchecksum_cbk.op_ret,                                                       stub->args.rchecksum_cbk.op_errno,                                                       stub->args.rchecksum_cbk.weak_checksum, -                                                     stub->args.rchecksum_cbk.strong_checksum); +                                                     stub->args.rchecksum_cbk.strong_checksum, stub->xdata); +                  if (stub->args.rchecksum_cbk.op_ret >= 0) -                {                          GF_FREE (stub->args.rchecksum_cbk.strong_checksum); -                }                  break;          } @@ -3240,14 +3466,14 @@ call_resume_unwind (call_stub_t *stub)                          STACK_UNWIND (stub->frame,                                        stub->args.readdir_cbk.op_ret,                                        stub->args.readdir_cbk.op_errno, -                                      &stub->args.readdir_cbk.entries); +                                      &stub->args.readdir_cbk.entries, stub->xdata);                  else                          stub->args.readdir_cbk.fn (stub->frame,                                                     stub->frame->cookie,                                                     stub->frame->this,                                                     stub->args.readdir_cbk.op_ret,                                                     stub->args.readdir_cbk.op_errno, -                                                   &stub->args.readdir_cbk.entries); +                                                   &stub->args.readdir_cbk.entries, stub->xdata);                  if (stub->args.readdir_cbk.op_ret > 0)                          gf_dirent_free (&stub->args.readdir_cbk.entries); @@ -3261,14 +3487,14 @@ call_resume_unwind (call_stub_t *stub)                          STACK_UNWIND (stub->frame,                                        stub->args.readdirp_cbk.op_ret,                                        stub->args.readdirp_cbk.op_errno, -                                      &stub->args.readdirp_cbk.entries); +                                      &stub->args.readdirp_cbk.entries, stub->xdata);                  else                          stub->args.readdirp_cbk.fn (stub->frame,                                                      stub->frame->cookie,                                                      stub->frame->this,                                                      stub->args.readdirp_cbk.op_ret,                                                      stub->args.readdirp_cbk.op_errno, -                                                    &stub->args.readdirp_cbk.entries); +                                                    &stub->args.readdirp_cbk.entries, stub->xdata);                  if (stub->args.readdirp_cbk.op_ret > 0)                          gf_dirent_free (&stub->args.readdirp_cbk.entries); @@ -3281,14 +3507,14 @@ call_resume_unwind (call_stub_t *stub)                  if (!stub->args.xattrop_cbk.fn)                          STACK_UNWIND (stub->frame,                                        stub->args.xattrop_cbk.op_ret, -                                      stub->args.xattrop_cbk.op_errno); +                                      stub->args.xattrop_cbk.op_errno, stub->xdata);                  else                          stub->args.xattrop_cbk.fn (stub->frame,                                                     stub->frame->cookie,                                                     stub->frame->this,                                                     stub->args.xattrop_cbk.op_ret,                                                     stub->args.xattrop_cbk.op_errno, -                                                   stub->args.xattrop_cbk.xattr); +                                                   stub->args.xattrop_cbk.xattr, stub->xdata);                  if (stub->args.xattrop_cbk.xattr)                          dict_unref (stub->args.xattrop_cbk.xattr); @@ -3300,14 +3526,14 @@ call_resume_unwind (call_stub_t *stub)                  if (!stub->args.fxattrop_cbk.fn)                          STACK_UNWIND (stub->frame,                                        stub->args.fxattrop_cbk.op_ret, -                                      stub->args.fxattrop_cbk.op_errno); +                                      stub->args.fxattrop_cbk.op_errno, stub->xdata);                  else                          stub->args.fxattrop_cbk.fn (stub->frame,                                                      stub->frame->cookie,                                                      stub->frame->this,                                                      stub->args.fxattrop_cbk.op_ret,                                                      stub->args.fxattrop_cbk.op_errno, -                                                    stub->args.fxattrop_cbk.xattr); +                                                    stub->args.fxattrop_cbk.xattr, stub->xdata);                  if (stub->args.fxattrop_cbk.xattr)                          dict_unref (stub->args.fxattrop_cbk.xattr); @@ -3321,7 +3547,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.setattr_cbk.op_ret,                                        stub->args.setattr_cbk.op_errno,                                        &stub->args.setattr_cbk.statpre, -                                      &stub->args.setattr_cbk.statpost); +                                      &stub->args.setattr_cbk.statpost, stub->xdata);                  else                          stub->args.setattr_cbk.fn (                                  stub->frame, @@ -3330,7 +3556,7 @@ call_resume_unwind (call_stub_t *stub)                                  stub->args.setattr_cbk.op_ret,                                  stub->args.setattr_cbk.op_errno,                                  &stub->args.setattr_cbk.statpre, -                                &stub->args.setattr_cbk.statpost); +                                &stub->args.setattr_cbk.statpost, stub->xdata);                  break;          }          case GF_FOP_FSETATTR: @@ -3340,7 +3566,7 @@ call_resume_unwind (call_stub_t *stub)                                        stub->args.fsetattr_cbk.op_ret,                                        stub->args.fsetattr_cbk.op_errno,                                        &stub->args.fsetattr_cbk.statpre, -                                      &stub->args.fsetattr_cbk.statpost); +                                      &stub->args.fsetattr_cbk.statpost, stub->xdata);                  else                          stub->args.fsetattr_cbk.fn (                                  stub->frame, @@ -3349,7 +3575,7 @@ call_resume_unwind (call_stub_t *stub)                                  stub->args.fsetattr_cbk.op_ret,                                  stub->args.fsetattr_cbk.op_errno,                                  &stub->args.fsetattr_cbk.statpre, -                                &stub->args.fsetattr_cbk.statpost); +                                &stub->args.fsetattr_cbk.statpost, stub->xdata);                  break;          }          default: @@ -3368,6 +3594,9 @@ out:  static void  call_stub_destroy_wind (call_stub_t *stub)  { +        if (stub->xdata) +                dict_unref (stub->xdata); +          switch (stub->fop) {          case GF_FOP_OPEN:          { @@ -3381,8 +3610,6 @@ call_stub_destroy_wind (call_stub_t *stub)                  loc_wipe (&stub->args.create.loc);                  if (stub->args.create.fd)                          fd_unref (stub->args.create.fd); -                if (stub->args.create.params) -                        dict_unref (stub->args.create.params);                  break;          }          case GF_FOP_STAT: @@ -3399,16 +3626,12 @@ call_stub_destroy_wind (call_stub_t *stub)          case GF_FOP_MKNOD:          {                  loc_wipe (&stub->args.mknod.loc); -                if (stub->args.mknod.params) -                        dict_unref (stub->args.mknod.params);          }          break;          case GF_FOP_MKDIR:          {                  loc_wipe (&stub->args.mkdir.loc); -                if (stub->args.mkdir.params) -                        dict_unref (stub->args.mkdir.params);          }          break; @@ -3428,8 +3651,6 @@ call_stub_destroy_wind (call_stub_t *stub)          {                  GF_FREE ((char *)stub->args.symlink.linkname);                  loc_wipe (&stub->args.symlink.loc); -                if (stub->args.symlink.params) -                        dict_unref (stub->args.symlink.params);          }          break; @@ -3621,8 +3842,6 @@ call_stub_destroy_wind (call_stub_t *stub)          case GF_FOP_LOOKUP:          {                  loc_wipe (&stub->args.lookup.loc); -                if (stub->args.lookup.xattr_req) -                        dict_unref (stub->args.lookup.xattr_req);                  break;          } @@ -3645,9 +3864,6 @@ call_stub_destroy_wind (call_stub_t *stub)                  if (stub->args.readdirp.fd)                          fd_unref (stub->args.readdirp.fd); -                if (stub->args.readdirp.dict) -                        dict_unref (stub->args.readdirp.dict); -                  break;          } @@ -3689,6 +3905,9 @@ call_stub_destroy_wind (call_stub_t *stub)  static void  call_stub_destroy_unwind (call_stub_t *stub)  { +        if (stub->xdata) +                dict_unref (stub->xdata); +          switch (stub->fop) {          case GF_FOP_OPEN:          { @@ -3845,9 +4064,6 @@ call_stub_destroy_unwind (call_stub_t *stub)          {                  if (stub->args.lookup_cbk.inode)                          inode_unref (stub->args.lookup_cbk.inode); - -                if (stub->args.lookup_cbk.dict) -                        dict_unref (stub->args.lookup_cbk.dict);          }          break;  | 
