diff options
| author | karthik-us <ksubrahm@redhat.com> | 2018-04-26 12:38:23 +0530 | 
|---|---|---|
| committer | karthik-us <ksubrahm@redhat.com> | 2018-04-27 11:57:47 +0530 | 
| commit | aa981531458a6d6e279f9a9a26f7c61b24cc14ab (patch) | |
| tree | a165f07b43799cf7b2cc8bf80520cabf78b2344c /libglusterfs/src | |
| parent | 69c35dbb4b3b92c60cbce8dff58e9d1399820b0d (diff) | |
libglusterfs: Capture the dict response in syncop_xattrop_cbk
Problem:
Currently it is not possible to capture the xattrs values which
are set on the bricks by calling syncop_(f)xattrop, because the
response dict is not being assigned to any of the dictionaries.
Fix:
In the xattrop callback capture the response dict and send it
back to the caller if it is requested.
Change-Id: I9de9bcd97d6008091c9b060bcca3676cb9ae8ef9
fixes: bz#1572076
Signed-off-by: karthik-us <ksubrahm@redhat.com>
Diffstat (limited to 'libglusterfs/src')
| -rw-r--r-- | libglusterfs/src/syncop.c | 18 | ||||
| -rw-r--r-- | libglusterfs/src/syncop.h | 7 | 
2 files changed, 21 insertions, 4 deletions
diff --git a/libglusterfs/src/syncop.c b/libglusterfs/src/syncop.c index 58477770368..3db6fae6b00 100644 --- a/libglusterfs/src/syncop.c +++ b/libglusterfs/src/syncop.c @@ -3175,6 +3175,8 @@ syncop_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          args->op_errno = op_errno;          if (xdata)                  args->xdata  = dict_ref (xdata); +        if (dict) +                args->dict_out = dict_ref (dict);          __wake (args); @@ -3184,7 +3186,8 @@ syncop_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  int  syncop_xattrop (xlator_t *subvol, loc_t *loc, gf_xattrop_flags_t flags, -                dict_t *dict, dict_t *xdata_in, dict_t **xdata_out) +                dict_t *dict, dict_t *xdata_in, dict_t **dict_out, +                dict_t **xdata_out)  {          struct syncargs args = {0, }; @@ -3196,6 +3199,11 @@ syncop_xattrop (xlator_t *subvol, loc_t *loc, gf_xattrop_flags_t flags,          else if (args.xdata)                  dict_unref (args.xdata); +        if (dict_out) +                *dict_out = args.dict_out; +        else if (args.dict_out) +                dict_unref (args.dict_out); +          if (args.op_ret < 0)                  return -args.op_errno; @@ -3204,7 +3212,8 @@ syncop_xattrop (xlator_t *subvol, loc_t *loc, gf_xattrop_flags_t flags,  int  syncop_fxattrop (xlator_t *subvol, fd_t *fd, gf_xattrop_flags_t flags, -                 dict_t *dict, dict_t *xdata_in, dict_t **xdata_out) +                 dict_t *dict, dict_t *xdata_in, dict_t **dict_out, +                 dict_t **xdata_out)  {          struct syncargs args = {0, }; @@ -3216,6 +3225,11 @@ syncop_fxattrop (xlator_t *subvol, fd_t *fd, gf_xattrop_flags_t flags,          else if (args.xdata)                  dict_unref (args.xdata); +        if (dict_out) +                *dict_out = args.dict_out; +        else if (args.dict_out) +                dict_unref (args.dict_out); +          if (args.op_ret < 0)                  return -args.op_errno; diff --git a/libglusterfs/src/syncop.h b/libglusterfs/src/syncop.h index 367204d05b7..3000d2e74c9 100644 --- a/libglusterfs/src/syncop.h +++ b/libglusterfs/src/syncop.h @@ -159,6 +159,7 @@ struct syncargs {          dict_t             *xdata;  	struct gf_flock     flock;          struct gf_lease     lease; +        dict_t             *dict_out;          /* some more _cbk needs */          uuid_t              uuid; @@ -544,11 +545,13 @@ int syncop_lease (xlator_t *subvol, loc_t *loc, struct gf_lease *lease,  int syncop_ipc (xlator_t *subvol, int op, dict_t *xdata_in, dict_t **xdata_out);  int syncop_xattrop (xlator_t *subvol, loc_t *loc, gf_xattrop_flags_t flags, -                    dict_t *dict, dict_t *xdata_in, dict_t **xdata_out); +                    dict_t *dict, dict_t *xdata_in, dict_t **dict_out, +                    dict_t **xdata_out);  int  syncop_fxattrop (xlator_t *subvol, fd_t *fd, gf_xattrop_flags_t flags, -                 dict_t *dict, dict_t *xdata_in, dict_t **xdata_out); +                 dict_t *dict, dict_t *xdata_in, dict_t **dict_out, +                 dict_t **xdata_out);  int  syncop_seek (xlator_t *subvol, fd_t *fd, off_t offset, gf_seek_what_t what,  | 
