diff options
| author | Krishnan P <kp@gluster.com> | 2011-06-16 01:26:00 +0000 | 
|---|---|---|
| committer | Anand Avati <avati@gluster.com> | 2011-06-16 09:15:00 -0700 | 
| commit | 84fe7114833aed4efc31a1beaf7fcff0124c0ab4 (patch) | |
| tree | 277b21d78de7e1ad48851eaaed89ae8c99593612 /libglusterfs | |
| parent | 3f2c74a941f34b29dd92e4754d01ebea9db42218 (diff) | |
syncop: Modified to accept one 'non-frame' arg.
Earlier syncops used to accept one argument which
was a call frame to carry out the fops synchronously.
Now we have two args passed to synctask function, one
call frame and another void pointer.
Signed-off-by: Krishnan Parthasarathi <kp@gluster.com>
Signed-off-by: Anand Avati <avati@gluster.com>
BUG: 3033 (Changes to replace-brick and syntask interface.)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3033
Diffstat (limited to 'libglusterfs')
| -rw-r--r-- | libglusterfs/src/syncop.c | 45 | ||||
| -rw-r--r-- | libglusterfs/src/syncop.h | 6 | 
2 files changed, 44 insertions, 7 deletions
diff --git a/libglusterfs/src/syncop.c b/libglusterfs/src/syncop.c index 267e4b3a2d1..938fa35854d 100644 --- a/libglusterfs/src/syncop.c +++ b/libglusterfs/src/syncop.c @@ -28,12 +28,12 @@ call_frame_t *  syncop_create_frame ()  {          struct synctask *task = NULL; -        struct call_frame_t *frame = NULL; +        call_frame_t *frame = NULL;          task = synctask_get ();          if (task) { -                frame = task->opaque; +                frame = task->frame;          }          return (call_frame_t *)frame; @@ -102,7 +102,7 @@ synctask_wrap (struct synctask *task)          int              ret;          ret = task->syncfn (task->opaque); -        task->synccbk (ret, task->opaque); +        task->synccbk (ret, task->frame, task->opaque);          /* cannot destroy @task right here as we are             in the execution stack of @task itself @@ -128,19 +128,26 @@ synctask_destroy (struct synctask *task)  int  synctask_new (struct syncenv *env, synctask_fn_t fn, synctask_cbk_t cbk, -              void *opaque) +              call_frame_t *frame, void *opaque)  {          struct synctask *newtask = NULL; +        xlator_t        *this    = THIS; + +        VALIDATE_OR_GOTO (env, err); +        VALIDATE_OR_GOTO (fn, err); +        VALIDATE_OR_GOTO (cbk, err); +        VALIDATE_OR_GOTO (frame, err);          newtask = CALLOC (1, sizeof (*newtask));          if (!newtask)                  return -ENOMEM;          newtask->env        = env; -        newtask->xl         = THIS; +        newtask->xl         = this;          newtask->syncfn     = fn;          newtask->synccbk    = cbk;          newtask->opaque     = opaque; +        newtask->frame      = frame;          INIT_LIST_HEAD (&newtask->all_tasks); @@ -430,6 +437,34 @@ syncop_opendir (xlator_t *subvol,  int +syncop_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, +                        int op_ret, int op_errno) +{ +        struct syncargs *args = NULL; + +        args = cookie; + +        args->op_ret   = op_ret; +        args->op_errno = op_errno; + +        __wake (args); + +        return 0; +} + +int +syncop_removexattr (xlator_t *subvol, loc_t *loc, const char *name) +{ +        struct syncargs args = {0, }; + +        SYNCOP (subvol, (&args), syncop_removexattr_cbk, subvol->fops->removexattr, +                loc, name); + +        errno = args.op_errno; +        return args.op_ret; +} + +int  syncop_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                       int op_ret, int op_errno)  { diff --git a/libglusterfs/src/syncop.h b/libglusterfs/src/syncop.h index 6954bfc68a9..ac913c870e1 100644 --- a/libglusterfs/src/syncop.h +++ b/libglusterfs/src/syncop.h @@ -35,7 +35,7 @@ struct synctask;  struct syncenv; -typedef int (*synctask_cbk_t) (int ret, void *opaque); +typedef int (*synctask_cbk_t) (int ret, call_frame_t *frame, void *opaque);  typedef int (*synctask_fn_t) (void *opaque); @@ -45,6 +45,7 @@ struct synctask {          struct list_head    all_tasks;          struct syncenv     *env;          xlator_t           *xl; +        call_frame_t       *frame;          synctask_cbk_t      synccbk;          synctask_fn_t       syncfn;          void               *opaque; @@ -149,7 +150,7 @@ struct syncargs {  struct syncenv * syncenv_new ();  void syncenv_destroy (struct syncenv *); -int synctask_new (struct syncenv *, synctask_fn_t, synctask_cbk_t, void *); +int synctask_new (struct syncenv *, synctask_fn_t, synctask_cbk_t, call_frame_t* frame, void *);  void synctask_zzzz (struct synctask *task);  void synctask_yawn (struct synctask *task);  void synctask_wake (struct synctask *task); @@ -172,5 +173,6 @@ int syncop_setattr (xlator_t *subvol, loc_t *loc, struct iatt *iatt, int valid,  int syncop_statfs (xlator_t *subvol, loc_t *loc, struct statvfs *buf);  int syncop_setxattr (xlator_t *subvol, loc_t *loc, dict_t *dict, int32_t flags); +int syncop_removexattr (xlator_t *subvol, loc_t *loc, const char *name);  #endif /* _SYNCOP_H */  | 
