summaryrefslogtreecommitdiffstats
path: root/libglusterfs/src/call-stub.c
diff options
context:
space:
mode:
Diffstat (limited to 'libglusterfs/src/call-stub.c')
-rw-r--r--libglusterfs/src/call-stub.c202
1 files changed, 202 insertions, 0 deletions
diff --git a/libglusterfs/src/call-stub.c b/libglusterfs/src/call-stub.c
index 701ee8872a0..89a212807d0 100644
--- a/libglusterfs/src/call-stub.c
+++ b/libglusterfs/src/call-stub.c
@@ -2322,6 +2322,131 @@ fop_lock_fnotify_stub (call_frame_t *frame, fop_lock_fnotify_t fn,
return stub;
}
+call_stub_t *
+fop_setattr_cbk_stub (call_frame_t *frame,
+ fop_setattr_cbk_t fn,
+ int32_t op_ret,
+ int32_t op_errno,
+ struct stat *statpre,
+ struct stat *statpost)
+{
+ call_stub_t *stub = NULL;
+
+ if (frame == NULL)
+ goto out;
+
+ stub = stub_new (frame, 1, GF_FOP_SETATTR);
+ if (stub == NULL)
+ goto out;
+
+ stub->args.setattr_cbk.fn = fn;
+
+ stub->args.setattr_cbk.op_ret = op_ret;
+ stub->args.setattr_cbk.op_errno = op_errno;
+
+ if (statpre)
+ stub->args.setattr_cbk.statpre = *statpre;
+ if (statpost)
+ stub->args.setattr_cbk.statpost = *statpost;
+
+out:
+ return stub;
+}
+
+call_stub_t *
+fop_fsetattr_cbk_stub (call_frame_t *frame,
+ fop_setattr_cbk_t fn,
+ int32_t op_ret,
+ int32_t op_errno,
+ struct stat *statpre,
+ struct stat *statpost)
+{
+ call_stub_t *stub = NULL;
+
+ if (frame == NULL)
+ goto out;
+
+ stub = stub_new (frame, 1, GF_FOP_FSETATTR);
+ if (stub == NULL)
+ goto out;
+
+ stub->args.fsetattr_cbk.fn = fn;
+
+ stub->args.fsetattr_cbk.op_ret = op_ret;
+ stub->args.fsetattr_cbk.op_errno = op_errno;
+
+ if (statpre)
+ stub->args.setattr_cbk.statpre = *statpre;
+ if (statpost)
+ stub->args.fsetattr_cbk.statpost = *statpost;
+out:
+ return stub;
+}
+
+call_stub_t *
+fop_setattr_stub (call_frame_t *frame,
+ fop_setattr_t fn,
+ loc_t *loc,
+ struct stat *stbuf,
+ int32_t valid)
+{
+ call_stub_t *stub = NULL;
+
+ if (frame == NULL)
+ goto out;
+
+ if (fn == NULL)
+ goto out;
+
+ stub = stub_new (frame, 1, GF_FOP_SETATTR);
+ if (stub == NULL)
+ goto out;
+
+ stub->args.setattr.fn = fn;
+
+ loc_copy (&stub->args.setattr.loc, loc);
+
+ if (stbuf)
+ stub->args.setattr.stbuf = *stbuf;
+
+ stub->args.setattr.valid = valid;
+
+out:
+ return stub;
+}
+
+call_stub_t *
+fop_fsetattr_stub (call_frame_t *frame,
+ fop_fsetattr_t fn,
+ fd_t *fd,
+ struct stat *stbuf,
+ int32_t valid)
+{
+ call_stub_t *stub = NULL;
+
+ if (frame == NULL)
+ goto out;
+
+ if (fn == NULL)
+ goto out;
+
+ stub = stub_new (frame, 1, GF_FOP_FSETATTR);
+ if (stub == NULL)
+ goto out;
+
+ stub->args.fsetattr.fn = fn;
+
+ if (fd)
+ stub->args.fsetattr.fd = fd_ref (fd);
+
+ if (stbuf)
+ stub->args.fsetattr.stbuf = *stbuf;
+
+ stub->args.fsetattr.valid = valid;
+
+out:
+ return stub;
+}
static void
call_resume_wind (call_stub_t *stub)
@@ -2770,6 +2895,24 @@ call_resume_wind (call_stub_t *stub)
stub->args.lock_fnotify.timeout);
break;
}
+ case GF_FOP_SETATTR:
+ {
+ stub->args.setattr.fn (stub->frame,
+ stub->frame->this,
+ &stub->args.setattr.loc,
+ &stub->args.setattr.stbuf,
+ stub->args.setattr.valid);
+ break;
+ }
+ case GF_FOP_FSETATTR:
+ {
+ stub->args.fsetattr.fn (stub->frame,
+ stub->frame->this,
+ stub->args.fsetattr.fd,
+ &stub->args.fsetattr.stbuf,
+ stub->args.fsetattr.valid);
+ break;
+ }
default:
{
gf_log ("call-stub",
@@ -3632,6 +3775,44 @@ call_resume_unwind (call_stub_t *stub)
stub->args.lock_fnotify_cbk.op_errno);
break;
}
+ case GF_FOP_SETATTR:
+ {
+ if (!stub->args.setattr_cbk.fn)
+ STACK_UNWIND (stub->frame,
+ stub->args.setattr_cbk.op_ret,
+ stub->args.setattr_cbk.op_errno,
+ &stub->args.setattr_cbk.statpre,
+ &stub->args.setattr_cbk.statpost);
+ else
+ stub->args.setattr_cbk.fn (
+ stub->frame,
+ stub->frame->cookie,
+ stub->frame->this,
+ stub->args.setattr_cbk.op_ret,
+ stub->args.setattr_cbk.op_errno,
+ &stub->args.setattr_cbk.statpre,
+ &stub->args.setattr_cbk.statpost);
+ break;
+ }
+ case GF_FOP_FSETATTR:
+ {
+ if (!stub->args.fsetattr_cbk.fn)
+ STACK_UNWIND (stub->frame,
+ stub->args.fsetattr_cbk.op_ret,
+ stub->args.fsetattr_cbk.op_errno,
+ &stub->args.fsetattr_cbk.statpre,
+ &stub->args.fsetattr_cbk.statpost);
+ else
+ stub->args.fsetattr_cbk.fn (
+ stub->frame,
+ stub->frame->cookie,
+ stub->frame->this,
+ stub->args.fsetattr_cbk.op_ret,
+ stub->args.fsetattr_cbk.op_errno,
+ &stub->args.fsetattr_cbk.statpre,
+ &stub->args.fsetattr_cbk.statpost);
+ break;
+ }
case GF_FOP_MAXVALUE:
{
gf_log ("call-stub",
@@ -3986,6 +4167,17 @@ call_stub_destroy_wind (call_stub_t *stub)
fd_unref (stub->args.lock_fnotify.fd);
break;
}
+ case GF_FOP_SETATTR:
+ {
+ loc_wipe (&stub->args.setattr.loc);
+ break;
+ }
+ case GF_FOP_FSETATTR:
+ {
+ if (stub->args.fsetattr.fd)
+ fd_unref (stub->args.fsetattr.fd);
+ break;
+ }
case GF_FOP_MAXVALUE:
{
gf_log ("call-stub",
@@ -4234,6 +4426,16 @@ call_stub_destroy_unwind (call_stub_t *stub)
dict_unref (stub->args.fxattrop_cbk.xattr);
}
break;
+
+ case GF_FOP_SETATTR:
+ {
+ break;
+ }
+
+ case GF_FOP_FSETATTR:
+ {
+ break;
+ }
case GF_FOP_MAXVALUE:
{