diff options
Diffstat (limited to 'libglusterfs/src/call-stub.c')
-rw-r--r-- | libglusterfs/src/call-stub.c | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/libglusterfs/src/call-stub.c b/libglusterfs/src/call-stub.c index cd735725960..76f0a736a2b 100644 --- a/libglusterfs/src/call-stub.c +++ b/libglusterfs/src/call-stub.c @@ -2062,6 +2062,91 @@ fop_fxattrop_stub (call_frame_t *frame, } +call_stub_t * +fop_lock_notify_cbk_stub (call_frame_t *frame, fop_lock_notify_cbk_t fn, + int32_t op_ret, int32_t op_errno) +{ + call_stub_t *stub = NULL; + + GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + + stub = stub_new (frame, 0, GF_FOP_LOCK_NOTIFY); + GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + + stub->args.lock_notify_cbk.fn = fn; + stub->args.lock_notify_cbk.op_ret = op_ret; + stub->args.lock_notify_cbk.op_errno = op_errno; + +out: + return stub; +} + + +call_stub_t * +fop_lock_notify_stub (call_frame_t *frame, fop_lock_notify_t fn, + loc_t *loc, int32_t timeout) +{ + call_stub_t *stub = NULL; + + if (!frame) + return NULL; + + stub = stub_new (frame, 1, GF_FOP_LOCK_NOTIFY); + if (!stub) + return NULL; + + stub->args.lock_notify.fn = fn; + + loc_copy (&stub->args.lock_notify.loc, loc); + + stub->args.lock_notify.timeout = timeout; + + return stub; +} + + +call_stub_t * +fop_lock_fnotify_cbk_stub (call_frame_t *frame, fop_lock_fnotify_cbk_t fn, + int32_t op_ret, int32_t op_errno) +{ + call_stub_t *stub = NULL; + + GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + + stub = stub_new (frame, 0, GF_FOP_LOCK_FNOTIFY); + GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + + stub->args.lock_fnotify_cbk.fn = fn; + stub->args.lock_fnotify_cbk.op_ret = op_ret; + stub->args.lock_fnotify_cbk.op_errno = op_errno; + +out: + return stub; +} + + +call_stub_t * +fop_lock_fnotify_stub (call_frame_t *frame, fop_lock_fnotify_t fn, + fd_t *fd, int32_t timeout) +{ + call_stub_t *stub = NULL; + + if (!frame) + return NULL; + + stub = stub_new (frame, 1, GF_FOP_LOCK_FNOTIFY); + if (!stub) + return NULL; + + stub->args.lock_fnotify.fn = fn; + + stub->args.lock_fnotify.fd = fd_ref (fd); + stub->args.lock_fnotify.timeout = timeout; + + return stub; +} + + static void call_resume_wind (call_stub_t *stub) { @@ -2458,6 +2543,22 @@ call_resume_wind (call_stub_t *stub) break; } + case GF_FOP_LOCK_NOTIFY: + { + stub->args.lock_notify.fn (stub->frame, + stub->frame->this, + &stub->args.lock_notify.loc, + stub->args.lock_notify.timeout); + break; + } + case GF_FOP_LOCK_FNOTIFY: + { + stub->args.lock_fnotify.fn (stub->frame, + stub->frame->this, + stub->args.lock_fnotify.fd, + stub->args.lock_fnotify.timeout); + break; + } default: { gf_log ("call-stub", @@ -3232,6 +3333,34 @@ call_resume_unwind (call_stub_t *stub) break; } + case GF_FOP_LOCK_NOTIFY: + { + if (!stub->args.lock_notify_cbk.fn) + STACK_UNWIND (stub->frame, + stub->args.lock_notify_cbk.op_ret, + stub->args.lock_notify_cbk.op_errno); + else + stub->args.lock_notify_cbk.fn (stub->frame, + stub->frame->cookie, + stub->frame->this, + stub->args.lock_notify_cbk.op_ret, + stub->args.lock_notify_cbk.op_errno); + break; + } + case GF_FOP_LOCK_FNOTIFY: + { + if (!stub->args.lock_fnotify_cbk.fn) + STACK_UNWIND (stub->frame, + stub->args.lock_fnotify_cbk.op_ret, + stub->args.lock_fnotify_cbk.op_errno); + else + stub->args.lock_fnotify_cbk.fn (stub->frame, + stub->frame->cookie, + stub->frame->this, + stub->args.lock_fnotify_cbk.op_ret, + stub->args.lock_fnotify_cbk.op_errno); + break; + } case GF_FOP_MAXVALUE: { gf_log ("call-stub", @@ -3540,6 +3669,17 @@ call_stub_destroy_wind (call_stub_t *stub) dict_unref (stub->args.xattrop.xattr); break; } + case GF_FOP_LOCK_NOTIFY: + { + loc_wipe (&stub->args.lock_notify.loc); + break; + } + case GF_FOP_LOCK_FNOTIFY: + { + if (stub->args.lock_fnotify.fd) + fd_unref (stub->args.lock_fnotify.fd); + break; + } case GF_FOP_MAXVALUE: { gf_log ("call-stub", |