diff options
Diffstat (limited to 'libglusterfs/src/call-stub.c')
| -rw-r--r-- | libglusterfs/src/call-stub.c | 5310 |
1 files changed, 1731 insertions, 3579 deletions
diff --git a/libglusterfs/src/call-stub.c b/libglusterfs/src/call-stub.c index 80b7f12ac9b..ee84f08acd4 100644 --- a/libglusterfs/src/call-stub.c +++ b/libglusterfs/src/call-stub.c @@ -1,4315 +1,2467 @@ /* - Copyright (c) 2007-2009 Gluster, Inc. <http://www.gluster.com> + Copyright (c) 2008-2012 Red Hat, Inc. <http://www.redhat.com> This file is part of GlusterFS. - GlusterFS is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - GlusterFS is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see - <http://www.gnu.org/licenses/>. + This file is licensed to you under your choice of the GNU Lesser + General Public License, version 3 or any later version (LGPLv3 or + later), or the GNU General Public License, version 2 (GPLv2), in all + cases as published by the Free Software Foundation. */ -#ifndef _CONFIG_H -#define _CONFIG_H -#include "config.h" -#endif - +#include <openssl/md5.h> #include <inttypes.h> -#include "md5.h" -#include "call-stub.h" - +#include "glusterfs/call-stub.h" +#include "glusterfs/mem-types.h" +#include "glusterfs/libglusterfs-messages.h" static call_stub_t * -stub_new (call_frame_t *frame, - char wind, - glusterfs_fop_t fop) +stub_new(call_frame_t *frame, const char wind, const glusterfs_fop_t fop) { - call_stub_t *new = NULL; + call_stub_t *new = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + GF_VALIDATE_OR_GOTO("call-stub", frame, out); - new = CALLOC (1, sizeof (*new)); - GF_VALIDATE_OR_GOTO ("call-stub", new, out); + new = mem_get0(frame->this->ctx->stub_mem_pool); + GF_VALIDATE_OR_GOTO("call-stub", new, out); - new->frame = frame; - new->wind = wind; - new->fop = fop; + new->frame = frame; + new->wind = wind; + new->fop = fop; + new->stub_mem_pool = frame->this->ctx->stub_mem_pool; + INIT_LIST_HEAD(&new->list); - INIT_LIST_HEAD (&new->list); + INIT_LIST_HEAD(&new->args_cbk.entries); out: - return new; + return new; } - call_stub_t * -fop_lookup_stub (call_frame_t *frame, - fop_lookup_t fn, - loc_t *loc, - dict_t *xattr_req) +fop_lookup_stub(call_frame_t *frame, fop_lookup_t fn, loc_t *loc, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); + GF_VALIDATE_OR_GOTO("call-stub", loc, out); - stub = stub_new (frame, 1, GF_FOP_LOOKUP); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_LOOKUP); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.lookup.fn = fn; - - if (xattr_req) - stub->args.lookup.xattr_req = dict_ref (xattr_req); - - loc_copy (&stub->args.lookup.loc, loc); + stub->fn.lookup = fn; + args_lookup_store(&stub->args, loc, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_lookup_cbk_stub (call_frame_t *frame, - fop_lookup_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - inode_t *inode, - struct stat *buf, - dict_t *dict, - struct stat *postparent) +fop_lookup_cbk_stub(call_frame_t *frame, fop_lookup_cbk_t fn, int32_t op_ret, + int32_t op_errno, inode_t *inode, struct iatt *buf, + dict_t *xdata, struct iatt *postparent) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - - stub = stub_new (frame, 0, GF_FOP_LOOKUP); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.lookup_cbk.fn = fn; - stub->args.lookup_cbk.op_ret = op_ret; - stub->args.lookup_cbk.op_errno = op_errno; - if (inode) - 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; -out: - return stub; -} + call_stub_t *stub = NULL; + stub = stub_new(frame, 0, GF_FOP_LOOKUP); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + stub->fn_cbk.lookup = fn; + args_lookup_cbk_store(&stub->args_cbk, op_ret, op_errno, inode, buf, xdata, + postparent); +out: + return stub; +} call_stub_t * -fop_stat_stub (call_frame_t *frame, - fop_stat_t fn, - loc_t *loc) +fop_stat_stub(call_frame_t *frame, fop_stat_t fn, loc_t *loc, dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); + call_stub_t *stub = NULL; + + GF_VALIDATE_OR_GOTO("call-stub", loc, out); - stub = stub_new (frame, 1, GF_FOP_STAT); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_STAT); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.stat.fn = fn; - loc_copy (&stub->args.stat.loc, loc); + stub->fn.stat = fn; + args_stat_store(&stub->args, loc, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_stat_cbk_stub (call_frame_t *frame, - fop_stat_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - struct stat *buf) +fop_stat_cbk_stub(call_frame_t *frame, fop_stat_cbk_t fn, int32_t op_ret, + int32_t op_errno, struct iatt *buf, dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - - stub = stub_new (frame, 0, GF_FOP_STAT); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.stat_cbk.fn = fn; - stub->args.stat_cbk.op_ret = op_ret; - stub->args.stat_cbk.op_errno = op_errno; - if (op_ret == 0) - stub->args.stat_cbk.buf = *buf; + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_STAT); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + stub->fn_cbk.stat = fn; + args_stat_cbk_store(&stub->args_cbk, op_ret, op_errno, buf, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_fstat_stub (call_frame_t *frame, - fop_fstat_t fn, - fd_t *fd) +fop_fstat_stub(call_frame_t *frame, fop_fstat_t fn, fd_t *fd, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + stub = stub_new(frame, 1, GF_FOP_FSTAT); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 1, GF_FOP_FSTAT); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub->fn.fstat = fn; + args_fstat_store(&stub->args, fd, xdata); +out: + return stub; +} - stub->args.fstat.fn = fn; +call_stub_t * +fop_fstat_cbk_stub(call_frame_t *frame, fop_fstat_cbk_t fn, int32_t op_ret, + int32_t op_errno, struct iatt *buf, dict_t *xdata) +{ + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_FSTAT); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - if (fd) - stub->args.fstat.fd = fd_ref (fd); + stub->fn_cbk.fstat = fn; + args_fstat_cbk_store(&stub->args_cbk, op_ret, op_errno, buf, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_fstat_cbk_stub (call_frame_t *frame, - fop_fstat_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - struct stat *buf) +fop_truncate_stub(call_frame_t *frame, fop_truncate_t fn, loc_t *loc, off_t off, + dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + GF_VALIDATE_OR_GOTO("call-stub", loc, out); - stub = stub_new (frame, 0, GF_FOP_FSTAT); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_TRUNCATE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.fstat_cbk.fn = fn; - stub->args.fstat_cbk.op_ret = op_ret; - stub->args.fstat_cbk.op_errno = op_errno; - if (buf) - stub->args.fstat_cbk.buf = *buf; + stub->fn.truncate = fn; + args_truncate_store(&stub->args, loc, off, xdata); out: - return stub; + return stub; } - -/* truncate */ - call_stub_t * -fop_truncate_stub (call_frame_t *frame, - fop_truncate_t fn, - loc_t *loc, - off_t off) +fop_truncate_cbk_stub(call_frame_t *frame, fop_truncate_cbk_t fn, + int32_t op_ret, int32_t op_errno, struct iatt *prebuf, + struct iatt *postbuf, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); + stub = stub_new(frame, 0, GF_FOP_TRUNCATE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 1, GF_FOP_TRUNCATE); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.truncate.fn = fn; - loc_copy (&stub->args.truncate.loc, loc); - stub->args.truncate.off = off; + stub->fn_cbk.truncate = fn; + args_truncate_cbk_store(&stub->args_cbk, op_ret, op_errno, prebuf, postbuf, + xdata); out: - return stub; + return stub; } - call_stub_t * -fop_truncate_cbk_stub (call_frame_t *frame, - fop_truncate_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - struct stat *prebuf, - struct stat *postbuf) +fop_ftruncate_stub(call_frame_t *frame, fop_ftruncate_t fn, fd_t *fd, off_t off, + dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + stub = stub_new(frame, 1, GF_FOP_FTRUNCATE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 0, GF_FOP_TRUNCATE); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub->fn.ftruncate = fn; + args_ftruncate_store(&stub->args, fd, off, xdata); - stub->args.truncate_cbk.fn = fn; - stub->args.truncate_cbk.op_ret = op_ret; - stub->args.truncate_cbk.op_errno = op_errno; - if (prebuf) - stub->args.truncate_cbk.prebuf = *prebuf; - if (postbuf) - stub->args.truncate_cbk.postbuf = *postbuf; out: - return stub; + return stub; } - call_stub_t * -fop_ftruncate_stub (call_frame_t *frame, - fop_ftruncate_t fn, - fd_t *fd, - off_t off) +fop_ftruncate_cbk_stub(call_frame_t *frame, fop_ftruncate_cbk_t fn, + int32_t op_ret, int32_t op_errno, struct iatt *prebuf, + struct iatt *postbuf, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + stub = stub_new(frame, 0, GF_FOP_FTRUNCATE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 1, GF_FOP_FTRUNCATE); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub->fn_cbk.ftruncate = fn; + args_ftruncate_cbk_store(&stub->args_cbk, op_ret, op_errno, prebuf, postbuf, + xdata); - stub->args.ftruncate.fn = fn; - if (fd) - stub->args.ftruncate.fd = fd_ref (fd); - - stub->args.ftruncate.off = off; out: - return stub; + return stub; } - call_stub_t * -fop_ftruncate_cbk_stub (call_frame_t *frame, - fop_ftruncate_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - struct stat *prebuf, - struct stat *postbuf) +fop_access_stub(call_frame_t *frame, fop_access_t fn, loc_t *loc, int32_t mask, + dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + GF_VALIDATE_OR_GOTO("call-stub", loc, out); - stub = stub_new (frame, 0, GF_FOP_FTRUNCATE); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_ACCESS); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.ftruncate_cbk.fn = fn; - stub->args.ftruncate_cbk.op_ret = op_ret; - stub->args.ftruncate_cbk.op_errno = op_errno; - if (prebuf) - stub->args.ftruncate_cbk.prebuf = *prebuf; - if (postbuf) - stub->args.ftruncate_cbk.postbuf = *postbuf; + stub->fn.access = fn; + args_access_store(&stub->args, loc, mask, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_access_stub (call_frame_t *frame, - fop_access_t fn, - loc_t *loc, - int32_t mask) +fop_access_cbk_stub(call_frame_t *frame, fop_access_cbk_t fn, int32_t op_ret, + int32_t op_errno, dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); + call_stub_t *stub = NULL; - stub = stub_new (frame, 1, GF_FOP_ACCESS); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 0, GF_FOP_ACCESS); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.access.fn = fn; - loc_copy (&stub->args.access.loc, loc); - stub->args.access.mask = mask; + stub->fn_cbk.access = fn; + args_access_cbk_store(&stub->args_cbk, op_ret, op_errno, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_access_cbk_stub (call_frame_t *frame, - fop_access_cbk_t fn, - int32_t op_ret, - int32_t op_errno) +fop_readlink_stub(call_frame_t *frame, fop_readlink_t fn, loc_t *loc, + size_t size, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + GF_VALIDATE_OR_GOTO("call-stub", loc, out); - stub = stub_new (frame, 0, GF_FOP_ACCESS); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_READLINK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.access_cbk.fn = fn; - stub->args.access_cbk.op_ret = op_ret; - stub->args.access_cbk.op_errno = op_errno; + stub->fn.readlink = fn; + args_readlink_store(&stub->args, loc, size, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_readlink_stub (call_frame_t *frame, - fop_readlink_t fn, - loc_t *loc, - size_t size) +fop_readlink_cbk_stub(call_frame_t *frame, fop_readlink_cbk_t fn, + int32_t op_ret, int32_t op_errno, const char *path, + struct iatt *stbuf, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); - - stub = stub_new (frame, 1, GF_FOP_READLINK); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 0, GF_FOP_READLINK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.readlink.fn = fn; - loc_copy (&stub->args.readlink.loc, loc); - stub->args.readlink.size = size; + stub->fn_cbk.readlink = fn; + args_readlink_cbk_store(&stub->args_cbk, op_ret, op_errno, path, stbuf, + xdata); out: - return stub; + return stub; } - call_stub_t * -fop_readlink_cbk_stub (call_frame_t *frame, - fop_readlink_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - const char *path, - struct stat *sbuf) +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; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + GF_VALIDATE_OR_GOTO("call-stub", loc, out); - stub = stub_new (frame, 0, GF_FOP_READLINK); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_MKNOD); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.readlink_cbk.fn = fn; - stub->args.readlink_cbk.op_ret = op_ret; - stub->args.readlink_cbk.op_errno = op_errno; - if (path) - stub->args.readlink_cbk.buf = strdup (path); - if (sbuf) - stub->args.readlink_cbk.sbuf = *sbuf; + stub->fn.mknod = fn; + args_mknod_store(&stub->args, loc, mode, rdev, umask, xdata); out: - return stub; + return stub; } +call_stub_t * +fop_mknod_cbk_stub(call_frame_t *frame, fop_mknod_cbk_t fn, int32_t op_ret, + int32_t op_errno, inode_t *inode, struct iatt *buf, + struct iatt *preparent, struct iatt *postparent, + dict_t *xdata) +{ + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_MKNOD); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + stub->fn_cbk.mknod = fn; + args_mknod_cbk_store(&stub->args_cbk, op_ret, op_errno, inode, buf, + preparent, postparent, 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) +fop_mkdir_stub(call_frame_t *frame, fop_mkdir_t fn, loc_t *loc, mode_t mode, + mode_t umask, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); + GF_VALIDATE_OR_GOTO("call-stub", loc, out); - stub = stub_new (frame, 1, GF_FOP_MKNOD); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_MKDIR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.mknod.fn = fn; - loc_copy (&stub->args.mknod.loc, loc); - stub->args.mknod.mode = mode; - stub->args.mknod.rdev = rdev; + stub->fn.mkdir = fn; + args_mkdir_store(&stub->args, loc, mode, umask, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_mknod_cbk_stub (call_frame_t *frame, - fop_mknod_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - inode_t *inode, - struct stat *buf, - struct stat *preparent, - struct stat *postparent) +fop_mkdir_cbk_stub(call_frame_t *frame, fop_mkdir_cbk_t fn, int32_t op_ret, + int32_t op_errno, inode_t *inode, struct iatt *buf, + struct iatt *preparent, struct iatt *postparent, + dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - - stub = stub_new (frame, 0, GF_FOP_MKNOD); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.mknod_cbk.fn = fn; - stub->args.mknod_cbk.op_ret = op_ret; - stub->args.mknod_cbk.op_errno = op_errno; - if (inode) - stub->args.mknod_cbk.inode = inode_ref (inode); - if (buf) - stub->args.mknod_cbk.buf = *buf; - if (preparent) - stub->args.mknod_cbk.preparent = *preparent; - if (postparent) - stub->args.mknod_cbk.postparent = *postparent; + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_MKDIR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + stub->fn_cbk.mkdir = fn; + args_mkdir_cbk_store(&stub->args_cbk, op_ret, op_errno, inode, buf, + preparent, postparent, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_mkdir_stub (call_frame_t *frame, - fop_mkdir_t fn, - loc_t *loc, - mode_t mode) +fop_unlink_stub(call_frame_t *frame, fop_unlink_t fn, loc_t *loc, int xflag, + dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; + + GF_VALIDATE_OR_GOTO("call-stub", loc, out); - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); + stub = stub_new(frame, 1, GF_FOP_UNLINK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 1, GF_FOP_MKDIR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub->fn.unlink = fn; + args_unlink_store(&stub->args, loc, xflag, xdata); - stub->args.mkdir.fn = fn; - loc_copy (&stub->args.mkdir.loc, loc); - stub->args.mkdir.mode = mode; out: - return stub; + return stub; } - call_stub_t * -fop_mkdir_cbk_stub (call_frame_t *frame, - fop_mkdir_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - inode_t *inode, - struct stat *buf, - struct stat *preparent, - struct stat *postparent) +fop_unlink_cbk_stub(call_frame_t *frame, fop_unlink_cbk_t fn, int32_t op_ret, + int32_t op_errno, struct iatt *preparent, + struct iatt *postparent, dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - - stub = stub_new (frame, 0, GF_FOP_MKDIR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.mkdir_cbk.fn = fn; - stub->args.mkdir_cbk.op_ret = op_ret; - stub->args.mkdir_cbk.op_errno = op_errno; - if (inode) - stub->args.mkdir_cbk.inode = inode_ref (inode); - if (buf) - stub->args.mkdir_cbk.buf = *buf; - if (preparent) - stub->args.mkdir_cbk.preparent = *preparent; - if (postparent) - stub->args.mkdir_cbk.postparent = *postparent; + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_UNLINK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + stub->fn_cbk.unlink = fn; + args_unlink_cbk_store(&stub->args_cbk, op_ret, op_errno, preparent, + postparent, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_unlink_stub (call_frame_t *frame, - fop_unlink_t fn, - loc_t *loc) +fop_rmdir_stub(call_frame_t *frame, fop_rmdir_t fn, loc_t *loc, int flags, + dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; + + GF_VALIDATE_OR_GOTO("call-stub", loc, out); - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); + stub = stub_new(frame, 1, GF_FOP_RMDIR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 1, GF_FOP_UNLINK); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub->fn.rmdir = fn; + args_rmdir_store(&stub->args, loc, flags, xdata); - stub->args.unlink.fn = fn; - loc_copy (&stub->args.unlink.loc, loc); out: - return stub; + return stub; } - call_stub_t * -fop_unlink_cbk_stub (call_frame_t *frame, - fop_unlink_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - struct stat *preparent, - struct stat *postparent) +fop_rmdir_cbk_stub(call_frame_t *frame, fop_rmdir_cbk_t fn, int32_t op_ret, + int32_t op_errno, struct iatt *preparent, + struct iatt *postparent, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + stub = stub_new(frame, 0, GF_FOP_RMDIR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 0, GF_FOP_UNLINK); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.unlink_cbk.fn = fn; - stub->args.unlink_cbk.op_ret = op_ret; - stub->args.unlink_cbk.op_errno = op_errno; - if (preparent) - stub->args.unlink_cbk.preparent = *preparent; - if (postparent) - stub->args.unlink_cbk.postparent = *postparent; + stub->fn_cbk.rmdir = fn; + args_rmdir_cbk_store(&stub->args_cbk, op_ret, op_errno, preparent, + postparent, xdata); out: - return stub; + return stub; } - - call_stub_t * -fop_rmdir_stub (call_frame_t *frame, - fop_rmdir_t fn, - loc_t *loc) +fop_symlink_stub(call_frame_t *frame, fop_symlink_t fn, const char *linkname, + loc_t *loc, mode_t umask, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); + GF_VALIDATE_OR_GOTO("call-stub", loc, out); + GF_VALIDATE_OR_GOTO("call-stub", linkname, out); - stub = stub_new (frame, 1, GF_FOP_RMDIR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_SYMLINK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.rmdir.fn = fn; - loc_copy (&stub->args.rmdir.loc, loc); + stub->fn.symlink = fn; + args_symlink_store(&stub->args, linkname, loc, umask, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_rmdir_cbk_stub (call_frame_t *frame, - fop_rmdir_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - struct stat *preparent, - struct stat *postparent) +fop_symlink_cbk_stub(call_frame_t *frame, fop_symlink_cbk_t fn, int32_t op_ret, + int32_t op_errno, inode_t *inode, struct iatt *buf, + struct iatt *preparent, struct iatt *postparent, + dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + call_stub_t *stub = NULL; - stub = stub_new (frame, 0, GF_FOP_RMDIR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 0, GF_FOP_SYMLINK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.rmdir_cbk.fn = fn; - stub->args.rmdir_cbk.op_ret = op_ret; - stub->args.rmdir_cbk.op_errno = op_errno; - if (preparent) - stub->args.rmdir_cbk.preparent = *preparent; - if (postparent) - stub->args.rmdir_cbk.postparent = *postparent; + stub->fn_cbk.symlink = fn; + args_symlink_cbk_store(&stub->args_cbk, op_ret, op_errno, inode, buf, + preparent, postparent, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_symlink_stub (call_frame_t *frame, - fop_symlink_t fn, - const char *linkname, - loc_t *loc) +fop_rename_stub(call_frame_t *frame, fop_rename_t fn, loc_t *oldloc, + loc_t *newloc, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); - GF_VALIDATE_OR_GOTO ("call-stub", linkname, out); + GF_VALIDATE_OR_GOTO("call-stub", oldloc, out); + GF_VALIDATE_OR_GOTO("call-stub", newloc, out); - stub = stub_new (frame, 1, GF_FOP_SYMLINK); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_RENAME); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.symlink.fn = fn; - stub->args.symlink.linkname = strdup (linkname); - loc_copy (&stub->args.symlink.loc, loc); + stub->fn.rename = fn; + args_rename_store(&stub->args, oldloc, newloc, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_symlink_cbk_stub (call_frame_t *frame, - fop_symlink_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - inode_t *inode, - struct stat *buf, - struct stat *preparent, - struct stat *postparent) +fop_rename_cbk_stub(call_frame_t *frame, fop_rename_cbk_t fn, int32_t op_ret, + int32_t op_errno, struct iatt *buf, + struct iatt *preoldparent, struct iatt *postoldparent, + struct iatt *prenewparent, struct iatt *postnewparent, + dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - - stub = stub_new (frame, 0, GF_FOP_SYMLINK); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.symlink_cbk.fn = fn; - stub->args.symlink_cbk.op_ret = op_ret; - stub->args.symlink_cbk.op_errno = op_errno; - if (inode) - stub->args.symlink_cbk.inode = inode_ref (inode); - if (buf) - stub->args.symlink_cbk.buf = *buf; - if (preparent) - stub->args.symlink_cbk.preparent = *preparent; - if (postparent) - stub->args.symlink_cbk.postparent = *postparent; + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_RENAME); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + stub->fn_cbk.rename = fn; + args_rename_cbk_store(&stub->args_cbk, op_ret, op_errno, buf, preoldparent, + postoldparent, prenewparent, postnewparent, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_rename_stub (call_frame_t *frame, - fop_rename_t fn, - loc_t *oldloc, - loc_t *newloc) +fop_link_stub(call_frame_t *frame, fop_link_t fn, loc_t *oldloc, loc_t *newloc, + dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", oldloc, out); - GF_VALIDATE_OR_GOTO ("call-stub", newloc, out); + GF_VALIDATE_OR_GOTO("call-stub", oldloc, out); + GF_VALIDATE_OR_GOTO("call-stub", newloc, out); - stub = stub_new (frame, 1, GF_FOP_RENAME); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_LINK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.rename.fn = fn; - loc_copy (&stub->args.rename.old, oldloc); - loc_copy (&stub->args.rename.new, newloc); + stub->fn.link = fn; + args_link_store(&stub->args, oldloc, newloc, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_rename_cbk_stub (call_frame_t *frame, - fop_rename_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - struct stat *buf, - struct stat *preoldparent, - struct stat *postoldparent, - struct stat *prenewparent, - struct stat *postnewparent) +fop_link_cbk_stub(call_frame_t *frame, fop_link_cbk_t fn, int32_t op_ret, + int32_t op_errno, inode_t *inode, struct iatt *buf, + struct iatt *preparent, struct iatt *postparent, + dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - - stub = stub_new (frame, 0, GF_FOP_RENAME); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.rename_cbk.fn = fn; - stub->args.rename_cbk.op_ret = op_ret; - stub->args.rename_cbk.op_errno = op_errno; - if (buf) - stub->args.rename_cbk.buf = *buf; - if (preoldparent) - stub->args.rename_cbk.preoldparent = *preoldparent; - if (postoldparent) - stub->args.rename_cbk.postoldparent = *postoldparent; - if (prenewparent) - stub->args.rename_cbk.prenewparent = *prenewparent; - if (postnewparent) - stub->args.rename_cbk.postnewparent = *postnewparent; + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_LINK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + stub->fn_cbk.link = fn; + args_link_cbk_store(&stub->args_cbk, op_ret, op_errno, inode, buf, + preparent, postparent, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_link_stub (call_frame_t *frame, - fop_link_t fn, - loc_t *oldloc, - loc_t *newloc) +fop_create_stub(call_frame_t *frame, fop_create_t fn, loc_t *loc, int32_t flags, + mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", oldloc, out); - GF_VALIDATE_OR_GOTO ("call-stub", newloc, out); + call_stub_t *stub = NULL; - stub = stub_new (frame, 1, GF_FOP_LINK); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + GF_VALIDATE_OR_GOTO("call-stub", loc, out); - stub->args.link.fn = fn; - loc_copy (&stub->args.link.oldloc, oldloc); - loc_copy (&stub->args.link.newloc, newloc); + stub = stub_new(frame, 1, GF_FOP_CREATE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + stub->fn.create = fn; + args_create_store(&stub->args, loc, flags, mode, umask, fd, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_link_cbk_stub (call_frame_t *frame, - fop_link_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - inode_t *inode, - struct stat *buf, - struct stat *preparent, - struct stat *postparent) +fop_create_cbk_stub(call_frame_t *frame, fop_create_cbk_t fn, int32_t op_ret, + int32_t op_errno, fd_t *fd, inode_t *inode, + struct iatt *buf, struct iatt *preparent, + struct iatt *postparent, dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - - stub = stub_new (frame, 0, GF_FOP_LINK); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.link_cbk.fn = fn; - stub->args.link_cbk.op_ret = op_ret; - stub->args.link_cbk.op_errno = op_errno; - if (inode) - stub->args.link_cbk.inode = inode_ref (inode); - if (buf) - stub->args.link_cbk.buf = *buf; - if (preparent) - stub->args.link_cbk.preparent = *preparent; - if (postparent) - stub->args.link_cbk.postparent = *postparent; + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_CREATE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + stub->fn_cbk.create = fn; + args_create_cbk_store(&stub->args_cbk, op_ret, op_errno, fd, inode, buf, + preparent, postparent, xdata); out: - return stub; + return stub; } - 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) +fop_open_stub(call_frame_t *frame, fop_open_t fn, loc_t *loc, int32_t flags, + fd_t *fd, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); + GF_VALIDATE_OR_GOTO("call-stub", loc, out); - stub = stub_new (frame, 1, GF_FOP_CREATE); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_OPEN); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.create.fn = fn; - loc_copy (&stub->args.create.loc, loc); - stub->args.create.flags = flags; - stub->args.create.mode = mode; - if (fd) - stub->args.create.fd = fd_ref (fd); + stub->fn.open = fn; + args_open_store(&stub->args, loc, flags, fd, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_create_cbk_stub (call_frame_t *frame, - fop_create_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - fd_t *fd, - inode_t *inode, - struct stat *buf, - struct stat *preparent, - struct stat *postparent) +fop_open_cbk_stub(call_frame_t *frame, fop_open_cbk_t fn, int32_t op_ret, + int32_t op_errno, fd_t *fd, dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - - stub = stub_new (frame, 0, GF_FOP_CREATE); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.create_cbk.fn = fn; - stub->args.create_cbk.op_ret = op_ret; - stub->args.create_cbk.op_errno = op_errno; - if (fd) - stub->args.create_cbk.fd = fd_ref (fd); - if (inode) - stub->args.create_cbk.inode = inode_ref (inode); - if (buf) - stub->args.create_cbk.buf = *buf; - if (preparent) - stub->args.create_cbk.preparent = *preparent; - if (postparent) - stub->args.create_cbk.postparent = *postparent; + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_OPEN); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + stub->fn_cbk.open = fn; + args_open_cbk_store(&stub->args_cbk, op_ret, op_errno, fd, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_open_stub (call_frame_t *frame, - fop_open_t fn, - loc_t *loc, - int32_t flags, fd_t *fd, - int32_t wbflags) +fop_readv_stub(call_frame_t *frame, fop_readv_t fn, fd_t *fd, size_t size, + off_t off, uint32_t flags, dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); + call_stub_t *stub = NULL; - stub = stub_new (frame, 1, GF_FOP_OPEN); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_READ); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - 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); + stub->fn.readv = fn; + args_readv_store(&stub->args, fd, size, off, flags, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_open_cbk_stub (call_frame_t *frame, - fop_open_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - fd_t *fd) - +fop_readv_cbk_stub(call_frame_t *frame, fop_readv_cbk_t fn, int32_t op_ret, + int32_t op_errno, struct iovec *vector, int32_t count, + struct iatt *stbuf, struct iobref *iobref, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + stub = stub_new(frame, 0, GF_FOP_READ); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 0, GF_FOP_OPEN); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.open_cbk.fn = fn; - stub->args.open_cbk.op_ret = op_ret; - stub->args.open_cbk.op_errno = op_errno; - if (fd) - stub->args.open_cbk.fd = fd_ref (fd); + stub->fn_cbk.readv = fn; + args_readv_cbk_store(&stub->args_cbk, op_ret, op_errno, vector, count, + stbuf, iobref, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_readv_stub (call_frame_t *frame, - fop_readv_t fn, - fd_t *fd, - size_t size, - off_t off) +fop_writev_stub(call_frame_t *frame, fop_writev_t fn, fd_t *fd, + struct iovec *vector, int32_t count, off_t off, uint32_t flags, + struct iobref *iobref, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + GF_VALIDATE_OR_GOTO("call-stub", vector, out); - stub = stub_new (frame, 1, GF_FOP_READ); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_WRITE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.readv.fn = fn; - if (fd) - stub->args.readv.fd = fd_ref (fd); - stub->args.readv.size = size; - stub->args.readv.off = off; + stub->fn.writev = fn; + args_writev_store(&stub->args, fd, vector, count, off, flags, iobref, + xdata); out: - return stub; + return stub; } - call_stub_t * -fop_readv_cbk_stub (call_frame_t *frame, - fop_readv_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - struct iovec *vector, - int32_t count, - struct stat *stbuf, - struct iobref *iobref) - +fop_writev_cbk_stub(call_frame_t *frame, fop_writev_cbk_t fn, int32_t op_ret, + int32_t op_errno, struct iatt *prebuf, struct iatt *postbuf, + dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - - stub = stub_new (frame, 0, GF_FOP_READ); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.readv_cbk.fn = fn; - stub->args.readv_cbk.op_ret = op_ret; - stub->args.readv_cbk.op_errno = op_errno; - if (op_ret >= 0) { - stub->args.readv_cbk.vector = iov_dup (vector, count); - stub->args.readv_cbk.count = count; - stub->args.readv_cbk.stbuf = *stbuf; - stub->args.readv_cbk.iobref = iobref_ref (iobref); - } + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_WRITE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + stub->fn_cbk.writev = fn; + args_writev_cbk_store(&stub->args_cbk, op_ret, op_errno, prebuf, postbuf, + xdata); out: - return stub; + return stub; } - call_stub_t * -fop_writev_stub (call_frame_t *frame, - fop_writev_t fn, - fd_t *fd, - struct iovec *vector, - int32_t count, - off_t off, - struct iobref *iobref) +fop_flush_stub(call_frame_t *frame, fop_flush_t fn, fd_t *fd, dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", vector, out); + call_stub_t *stub = NULL; - stub = stub_new (frame, 1, GF_FOP_WRITE); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_FLUSH); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.writev.fn = fn; - if (fd) - stub->args.writev.fd = fd_ref (fd); - stub->args.writev.vector = iov_dup (vector, count); - stub->args.writev.count = count; - stub->args.writev.off = off; - stub->args.writev.iobref = iobref_ref (iobref); + stub->fn.flush = fn; + args_flush_store(&stub->args, fd, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_writev_cbk_stub (call_frame_t *frame, - fop_writev_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - struct stat *prebuf, - struct stat *postbuf) - +fop_flush_cbk_stub(call_frame_t *frame, fop_flush_cbk_t fn, int32_t op_ret, + int32_t op_errno, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + stub = stub_new(frame, 0, GF_FOP_FLUSH); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 0, GF_FOP_WRITE); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.writev_cbk.fn = fn; - stub->args.writev_cbk.op_ret = op_ret; - stub->args.writev_cbk.op_errno = op_errno; - if (op_ret >= 0) - stub->args.writev_cbk.postbuf = *postbuf; - if (prebuf) - stub->args.writev_cbk.prebuf = *prebuf; + stub->fn_cbk.flush = fn; + args_flush_cbk_store(&stub->args_cbk, op_ret, op_errno, xdata); out: - return stub; + return stub; } +call_stub_t * +fop_fsync_stub(call_frame_t *frame, fop_fsync_t fn, fd_t *fd, int32_t datasync, + dict_t *xdata) +{ + call_stub_t *stub = NULL; + stub = stub_new(frame, 1, GF_FOP_FSYNC); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + stub->fn.fsync = fn; + args_fsync_store(&stub->args, fd, datasync, xdata); +out: + return stub; +} call_stub_t * -fop_flush_stub (call_frame_t *frame, - fop_flush_t fn, - fd_t *fd) +fop_fsync_cbk_stub(call_frame_t *frame, fop_fsync_cbk_t fn, int32_t op_ret, + int32_t op_errno, struct iatt *prebuf, struct iatt *postbuf, + dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + call_stub_t *stub = NULL; - stub = stub_new (frame, 1, GF_FOP_FLUSH); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 0, GF_FOP_FSYNC); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.flush.fn = fn; - if (fd) - stub->args.flush.fd = fd_ref (fd); + stub->fn_cbk.fsync = fn; + args_fsync_cbk_store(&stub->args_cbk, op_ret, op_errno, prebuf, postbuf, + xdata); out: - return stub; + return stub; } - call_stub_t * -fop_flush_cbk_stub (call_frame_t *frame, - fop_flush_cbk_t fn, - int32_t op_ret, - int32_t op_errno) - +fop_opendir_stub(call_frame_t *frame, fop_opendir_t fn, loc_t *loc, fd_t *fd, + dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + GF_VALIDATE_OR_GOTO("call-stub", loc, out); - stub = stub_new (frame, 0, GF_FOP_FLUSH); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_OPENDIR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.flush_cbk.fn = fn; - stub->args.flush_cbk.op_ret = op_ret; - stub->args.flush_cbk.op_errno = op_errno; + stub->fn.opendir = fn; + args_opendir_store(&stub->args, loc, fd, xdata); out: - return stub; + return stub; } +call_stub_t * +fop_opendir_cbk_stub(call_frame_t *frame, fop_opendir_cbk_t fn, int32_t op_ret, + int32_t op_errno, fd_t *fd, dict_t *xdata) +{ + call_stub_t *stub = NULL; + stub = stub_new(frame, 0, GF_FOP_OPENDIR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + stub->fn_cbk.opendir = fn; + args_opendir_cbk_store(&stub->args_cbk, op_ret, op_errno, fd, xdata); +out: + return stub; +} call_stub_t * -fop_fsync_stub (call_frame_t *frame, - fop_fsync_t fn, - fd_t *fd, - int32_t datasync) +fop_fsyncdir_stub(call_frame_t *frame, fop_fsyncdir_t fn, fd_t *fd, + int32_t datasync, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + stub = stub_new(frame, 1, GF_FOP_FSYNCDIR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 1, GF_FOP_FSYNC); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.fsync.fn = fn; - if (fd) - stub->args.fsync.fd = fd_ref (fd); - stub->args.fsync.datasync = datasync; + stub->fn.fsyncdir = fn; + args_fsyncdir_store(&stub->args, fd, datasync, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_fsync_cbk_stub (call_frame_t *frame, - fop_fsync_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - struct stat *prebuf, - struct stat *postbuf) +fop_fsyncdir_cbk_stub(call_frame_t *frame, fop_fsyncdir_cbk_t fn, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + stub = stub_new(frame, 0, GF_FOP_FSYNCDIR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 0, GF_FOP_FSYNC); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.fsync_cbk.fn = fn; - stub->args.fsync_cbk.op_ret = op_ret; - stub->args.fsync_cbk.op_errno = op_errno; - if (prebuf) - stub->args.fsync_cbk.prebuf = *prebuf; - if (postbuf) - stub->args.fsync_cbk.postbuf = *postbuf; + stub->fn_cbk.fsyncdir = fn; + args_fsyncdir_cbk_store(&stub->args_cbk, op_ret, op_errno, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_opendir_stub (call_frame_t *frame, - fop_opendir_t fn, - loc_t *loc, fd_t *fd) +fop_statfs_stub(call_frame_t *frame, fop_statfs_t fn, loc_t *loc, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); + GF_VALIDATE_OR_GOTO("call-stub", loc, out); - stub = stub_new (frame, 1, GF_FOP_OPENDIR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_STATFS); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.opendir.fn = fn; - loc_copy (&stub->args.opendir.loc, loc); - if (fd) - stub->args.opendir.fd = fd_ref (fd); + stub->fn.statfs = fn; + args_statfs_store(&stub->args, loc, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_opendir_cbk_stub (call_frame_t *frame, - fop_opendir_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - fd_t *fd) - +fop_statfs_cbk_stub(call_frame_t *frame, fop_statfs_cbk_t fn, int32_t op_ret, + int32_t op_errno, struct statvfs *buf, dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + call_stub_t *stub = NULL; - stub = stub_new (frame, 0, GF_FOP_OPENDIR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 0, GF_FOP_STATFS); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.opendir_cbk.fn = fn; - stub->args.opendir_cbk.op_ret = op_ret; - stub->args.opendir_cbk.op_errno = op_errno; - - if (fd) - stub->args.opendir_cbk.fd = fd_ref (fd); + stub->fn_cbk.statfs = fn; + args_statfs_cbk_store(&stub->args_cbk, op_ret, op_errno, buf, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_getdents_stub (call_frame_t *frame, - fop_getdents_t fn, - fd_t *fd, - size_t size, - off_t off, - int32_t flag) +fop_setxattr_stub(call_frame_t *frame, fop_setxattr_t fn, loc_t *loc, + dict_t *dict, int32_t flags, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + GF_VALIDATE_OR_GOTO("call-stub", loc, out); - stub = stub_new (frame, 1, GF_FOP_GETDENTS); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_SETXATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.getdents.fn = fn; - stub->args.getdents.size = size; - stub->args.getdents.off = off; - if (fd) - stub->args.getdents.fd = fd_ref (fd); - stub->args.getdents.flag = flag; + stub->fn.setxattr = fn; + args_setxattr_store(&stub->args, loc, dict, flags, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_getdents_cbk_stub (call_frame_t *frame, - fop_getdents_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - dir_entry_t *entries, - int32_t count) - +fop_setxattr_cbk_stub(call_frame_t *frame, fop_setxattr_cbk_t fn, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + call_stub_t *stub = NULL; - stub = stub_new (frame, 0, GF_FOP_GETDENTS); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 0, GF_FOP_SETXATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.getdents_cbk.fn = fn; - stub->args.getdents_cbk.op_ret = op_ret; - stub->args.getdents_cbk.op_errno = op_errno; - if (op_ret >= 0) { - stub->args.getdents_cbk.entries.next = entries->next; - /* FIXME: are entries not needed in the caller after - * creating stub? */ - entries->next = NULL; - } - - stub->args.getdents_cbk.count = count; + stub->fn_cbk.setxattr = fn; + args_setxattr_cbk_store(&stub->args_cbk, op_ret, op_errno, xdata); out: - return stub; + return stub; } - - call_stub_t * -fop_fsyncdir_stub (call_frame_t *frame, - fop_fsyncdir_t fn, - fd_t *fd, - int32_t datasync) +fop_getxattr_stub(call_frame_t *frame, fop_getxattr_t fn, loc_t *loc, + const char *name, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + GF_VALIDATE_OR_GOTO("call-stub", loc, out); - stub = stub_new (frame, 1, GF_FOP_FSYNCDIR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_GETXATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.fsyncdir.fn = fn; - if (fd) - stub->args.fsyncdir.fd = fd_ref (fd); - stub->args.fsyncdir.datasync = datasync; + stub->fn.getxattr = fn; + args_getxattr_store(&stub->args, loc, name, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_fsyncdir_cbk_stub (call_frame_t *frame, - fop_fsyncdir_cbk_t fn, - int32_t op_ret, - int32_t op_errno) - +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 *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + call_stub_t *stub = NULL; - stub = stub_new (frame, 0, GF_FOP_FSYNCDIR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 0, GF_FOP_GETXATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.fsyncdir_cbk.fn = fn; - stub->args.fsyncdir_cbk.op_ret = op_ret; - stub->args.fsyncdir_cbk.op_errno = op_errno; + stub->fn_cbk.getxattr = fn; + args_getxattr_cbk_store(&stub->args_cbk, op_ret, op_errno, dict, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_statfs_stub (call_frame_t *frame, - fop_statfs_t fn, - loc_t *loc) +fop_fsetxattr_stub(call_frame_t *frame, fop_fsetxattr_t fn, fd_t *fd, + dict_t *dict, int32_t flags, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); + GF_VALIDATE_OR_GOTO("call-stub", fd, out); - stub = stub_new (frame, 1, GF_FOP_STATFS); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_FSETXATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.statfs.fn = fn; - loc_copy (&stub->args.statfs.loc, loc); + stub->fn.fsetxattr = fn; + args_fsetxattr_store(&stub->args, fd, dict, flags, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_statfs_cbk_stub (call_frame_t *frame, - fop_statfs_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - struct statvfs *buf) - +fop_fsetxattr_cbk_stub(call_frame_t *frame, fop_fsetxattr_cbk_t fn, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + stub = stub_new(frame, 0, GF_FOP_FSETXATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 0, GF_FOP_STATFS); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.statfs_cbk.fn = fn; - stub->args.statfs_cbk.op_ret = op_ret; - stub->args.statfs_cbk.op_errno = op_errno; - if (op_ret == 0) - stub->args.statfs_cbk.buf = *buf; + stub->fn_cbk.fsetxattr = fn; + args_fsetxattr_cbk_store(&stub->args_cbk, op_ret, op_errno, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_setxattr_stub (call_frame_t *frame, - fop_setxattr_t fn, - loc_t *loc, - dict_t *dict, - int32_t flags) +fop_fgetxattr_stub(call_frame_t *frame, fop_fgetxattr_t fn, fd_t *fd, + const char *name, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); + GF_VALIDATE_OR_GOTO("call-stub", fd, out); - stub = stub_new (frame, 1, GF_FOP_SETXATTR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_FGETXATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.setxattr.fn = fn; - loc_copy (&stub->args.setxattr.loc, loc); - /* TODO */ - if (dict) - stub->args.setxattr.dict = dict_ref (dict); - stub->args.setxattr.flags = flags; + stub->fn.fgetxattr = fn; + args_fgetxattr_store(&stub->args, fd, name, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_setxattr_cbk_stub (call_frame_t *frame, - fop_setxattr_cbk_t fn, - int32_t op_ret, - int32_t op_errno) +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 *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + stub = stub_new(frame, 0, GF_FOP_GETXATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 0, GF_FOP_SETXATTR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.setxattr_cbk.fn = fn; - stub->args.setxattr_cbk.op_ret = op_ret; - stub->args.setxattr_cbk.op_errno = op_errno; + stub->fn_cbk.fgetxattr = fn; + args_fgetxattr_cbk_store(&stub->args_cbk, op_ret, op_errno, dict, xdata); out: - return stub; + return stub; } call_stub_t * -fop_getxattr_stub (call_frame_t *frame, - fop_getxattr_t fn, - loc_t *loc, - const char *name) +fop_removexattr_stub(call_frame_t *frame, fop_removexattr_t fn, loc_t *loc, + const char *name, dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); + call_stub_t *stub = NULL; - stub = stub_new (frame, 1, GF_FOP_GETXATTR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + GF_VALIDATE_OR_GOTO("call-stub", loc, out); + GF_VALIDATE_OR_GOTO("call-stub", name, out); - stub->args.getxattr.fn = fn; - loc_copy (&stub->args.getxattr.loc, loc); + stub = stub_new(frame, 1, GF_FOP_REMOVEXATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - if (name) - stub->args.getxattr.name = strdup (name); + stub->fn.removexattr = fn; + args_removexattr_store(&stub->args, loc, name, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_getxattr_cbk_stub (call_frame_t *frame, - fop_getxattr_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - dict_t *dict) +fop_removexattr_cbk_stub(call_frame_t *frame, fop_removexattr_cbk_t fn, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + call_stub_t *stub = NULL; - stub = stub_new (frame, 0, GF_FOP_GETXATTR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 0, GF_FOP_REMOVEXATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.getxattr_cbk.fn = fn; - stub->args.getxattr_cbk.op_ret = op_ret; - stub->args.getxattr_cbk.op_errno = op_errno; - /* TODO */ - if (dict) - stub->args.getxattr_cbk.dict = dict_ref (dict); + stub->fn_cbk.removexattr = fn; + args_removexattr_cbk_store(&stub->args_cbk, op_ret, op_errno, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_fsetxattr_stub (call_frame_t *frame, - fop_fsetxattr_t fn, - fd_t *fd, - dict_t *dict, - int32_t flags) +fop_fremovexattr_stub(call_frame_t *frame, fop_fremovexattr_t fn, fd_t *fd, + const char *name, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", fd, out); + GF_VALIDATE_OR_GOTO("call-stub", fd, out); + GF_VALIDATE_OR_GOTO("call-stub", name, out); - stub = stub_new (frame, 1, GF_FOP_FSETXATTR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_FREMOVEXATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.fsetxattr.fn = fn; - stub->args.fsetxattr.fd = fd_ref (fd); - - /* TODO */ - if (dict) - stub->args.fsetxattr.dict = dict_ref (dict); - stub->args.fsetxattr.flags = flags; + stub->fn.fremovexattr = fn; + args_fremovexattr_store(&stub->args, fd, name, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_fsetxattr_cbk_stub (call_frame_t *frame, - fop_fsetxattr_cbk_t fn, - int32_t op_ret, - int32_t op_errno) +fop_fremovexattr_cbk_stub(call_frame_t *frame, fop_fremovexattr_cbk_t fn, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + stub = stub_new(frame, 0, GF_FOP_FREMOVEXATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 0, GF_FOP_FSETXATTR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.fsetxattr_cbk.fn = fn; - stub->args.fsetxattr_cbk.op_ret = op_ret; - stub->args.fsetxattr_cbk.op_errno = op_errno; + stub->fn_cbk.fremovexattr = fn; + args_fremovexattr_cbk_store(&stub->args_cbk, op_ret, op_errno, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_fgetxattr_stub (call_frame_t *frame, - fop_fgetxattr_t fn, - fd_t *fd, - const char *name) +fop_lk_stub(call_frame_t *frame, fop_lk_t fn, fd_t *fd, int32_t cmd, + struct gf_flock *lock, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", fd, out); + GF_VALIDATE_OR_GOTO("call-stub", lock, out); - stub = stub_new (frame, 1, GF_FOP_FGETXATTR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_LK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.fgetxattr.fn = fn; - stub->args.fgetxattr.fd = fd_ref (fd); - - if (name) - stub->args.fgetxattr.name = strdup (name); + stub->fn.lk = fn; + args_lk_store(&stub->args, fd, cmd, lock, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_fgetxattr_cbk_stub (call_frame_t *frame, - fop_fgetxattr_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - dict_t *dict) +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, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + stub = stub_new(frame, 0, GF_FOP_LK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 0, GF_FOP_GETXATTR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.fgetxattr_cbk.fn = fn; - stub->args.fgetxattr_cbk.op_ret = op_ret; - stub->args.fgetxattr_cbk.op_errno = op_errno; - - /* TODO */ - if (dict) - stub->args.fgetxattr_cbk.dict = dict_ref (dict); + stub->fn_cbk.lk = fn; + args_lk_cbk_store(&stub->args_cbk, op_ret, op_errno, lock, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_removexattr_stub (call_frame_t *frame, - fop_removexattr_t fn, - loc_t *loc, - const char *name) +fop_inodelk_stub(call_frame_t *frame, fop_inodelk_t fn, const char *volume, + loc_t *loc, int32_t cmd, struct gf_flock *lock, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); - GF_VALIDATE_OR_GOTO ("call-stub", name, out); + GF_VALIDATE_OR_GOTO("call-stub", lock, out); - stub = stub_new (frame, 1, GF_FOP_REMOVEXATTR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_INODELK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.removexattr.fn = fn; - loc_copy (&stub->args.removexattr.loc, loc); - stub->args.removexattr.name = strdup (name); + stub->fn.inodelk = fn; + args_inodelk_store(&stub->args, volume, loc, cmd, lock, xdata); out: - return stub; + 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, dict_t *xdata) +{ + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_INODELK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + stub->fn_cbk.inodelk = fn; + args_inodelk_cbk_store(&stub->args_cbk, op_ret, op_errno, xdata); +out: + return stub; +} call_stub_t * -fop_removexattr_cbk_stub (call_frame_t *frame, - fop_removexattr_cbk_t fn, - int32_t op_ret, - int32_t op_errno) +fop_finodelk_stub(call_frame_t *frame, fop_finodelk_t fn, const char *volume, + fd_t *fd, int32_t cmd, struct gf_flock *lock, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; + + GF_VALIDATE_OR_GOTO("call-stub", lock, out); - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + stub = stub_new(frame, 1, GF_FOP_FINODELK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 0, GF_FOP_REMOVEXATTR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub->fn.finodelk = fn; + args_finodelk_store(&stub->args, volume, fd, cmd, lock, xdata); - stub->args.removexattr_cbk.fn = fn; - stub->args.removexattr_cbk.op_ret = op_ret; - stub->args.removexattr_cbk.op_errno = op_errno; out: - return stub; + return stub; } - call_stub_t * -fop_lk_stub (call_frame_t *frame, - fop_lk_t fn, - fd_t *fd, - int32_t cmd, - struct flock *lock) +fop_finodelk_cbk_stub(call_frame_t *frame, fop_inodelk_cbk_t fn, int32_t op_ret, + int32_t op_errno, dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", lock, out); - - stub = stub_new (frame, 1, GF_FOP_LK); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.lk.fn = fn; - if (fd) - stub->args.lk.fd = fd_ref (fd); - stub->args.lk.cmd = cmd; - stub->args.lk.lock = *lock; + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_FINODELK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + stub->fn_cbk.finodelk = fn; + args_finodelk_cbk_store(&stub->args_cbk, op_ret, op_errno, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_lk_cbk_stub (call_frame_t *frame, - fop_lk_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - struct flock *lock) - +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, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + stub = stub_new(frame, 1, GF_FOP_ENTRYLK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 0, GF_FOP_LK); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub->fn.entrylk = fn; + args_entrylk_store(&stub->args, volume, loc, name, cmd, type, xdata); - stub->args.lk_cbk.fn = fn; - stub->args.lk_cbk.op_ret = op_ret; - stub->args.lk_cbk.op_errno = op_errno; - if (op_ret == 0) - stub->args.lk_cbk.lock = *lock; out: - return stub; + 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 flock *lock) +fop_entrylk_cbk_stub(call_frame_t *frame, fop_entrylk_cbk_t fn, int32_t op_ret, + int32_t op_errno, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - if (!frame || !lock) - return NULL; + stub = stub_new(frame, 0, GF_FOP_ENTRYLK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 1, GF_FOP_INODELK); - if (!stub) - return NULL; - - stub->args.inodelk.fn = fn; + stub->fn_cbk.entrylk = fn; + args_entrylk_cbk_store(&stub->args_cbk, op_ret, op_errno, xdata); +out: + return stub; +} - if (volume) - stub->args.inodelk.volume = strdup (volume); +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, dict_t *xdata) +{ + call_stub_t *stub = NULL; - loc_copy (&stub->args.inodelk.loc, loc); - stub->args.inodelk.cmd = cmd; - stub->args.inodelk.lock = *lock; + stub = stub_new(frame, 1, GF_FOP_FENTRYLK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - return stub; + stub->fn.fentrylk = fn; + args_fentrylk_store(&stub->args, volume, fd, name, cmd, type, 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) +fop_fentrylk_cbk_stub(call_frame_t *frame, fop_fentrylk_cbk_t fn, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_FENTRYLK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - if (!frame) - return NULL; + stub->fn_cbk.fentrylk = fn; + args_fentrylk_cbk_store(&stub->args_cbk, op_ret, op_errno, xdata); +out: + return stub; +} - stub = stub_new (frame, 0, GF_FOP_INODELK); - if (!stub) - return NULL; +call_stub_t * +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, + dict_t *xdata) +{ + call_stub_t *stub = NULL; - stub->args.inodelk_cbk.fn = fn; - stub->args.inodelk_cbk.op_ret = op_ret; - stub->args.inodelk_cbk.op_errno = op_errno; + stub = stub_new(frame, 0, GF_FOP_READDIRP); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - return stub; + stub->fn_cbk.readdirp = fn; + args_readdirp_cbk_store(&stub->args_cbk, op_ret, op_errno, entries, xdata); +out: + return stub; } - call_stub_t * -fop_finodelk_stub (call_frame_t *frame, fop_finodelk_t fn, - const char *volume, fd_t *fd, int32_t cmd, struct flock *lock) +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, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_READDIR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - if (!frame || !lock) - return NULL; + stub->fn_cbk.readdir = fn; + args_readdir_cbk_store(&stub->args_cbk, op_ret, op_errno, entries, xdata); +out: + return stub; +} - stub = stub_new (frame, 1, GF_FOP_FINODELK); - if (!stub) - return NULL; +call_stub_t * +fop_readdir_stub(call_frame_t *frame, fop_readdir_t fn, fd_t *fd, size_t size, + off_t off, dict_t *xdata) +{ + call_stub_t *stub = NULL; - stub->args.finodelk.fn = fn; + stub = stub_new(frame, 1, GF_FOP_READDIR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - if (fd) - stub->args.finodelk.fd = fd_ref (fd); + stub->fn.readdir = fn; + args_readdir_store(&stub->args, fd, size, off, xdata); +out: + return stub; +} - if (volume) - stub->args.finodelk.volume = strdup (volume); +call_stub_t * +fop_readdirp_stub(call_frame_t *frame, fop_readdirp_t fn, fd_t *fd, size_t size, + off_t off, dict_t *xdata) +{ + call_stub_t *stub = NULL; - stub->args.finodelk.cmd = cmd; - stub->args.finodelk.lock = *lock; + stub = stub_new(frame, 1, GF_FOP_READDIRP); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - return stub; + stub->fn.readdirp = fn; + args_readdirp_store(&stub->args, fd, size, off, xdata); +out: + return stub; } - call_stub_t * -fop_finodelk_cbk_stub (call_frame_t *frame, fop_inodelk_cbk_t fn, - int32_t op_ret, int32_t op_errno) +fop_rchecksum_stub(call_frame_t *frame, fop_rchecksum_t fn, fd_t *fd, + off_t offset, int32_t len, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - if (!frame) - return NULL; + GF_VALIDATE_OR_GOTO("call-stub", fd, out); - stub = stub_new (frame, 0, GF_FOP_FINODELK); - if (!stub) - return NULL; + stub = stub_new(frame, 1, GF_FOP_RCHECKSUM); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.finodelk_cbk.fn = fn; - stub->args.finodelk_cbk.op_ret = op_ret; - stub->args.finodelk_cbk.op_errno = op_errno; - - return stub; + stub->fn.rchecksum = fn; + args_rchecksum_store(&stub->args, fd, offset, len, xdata); +out: + return stub; } - 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) +fop_rchecksum_cbk_stub(call_frame_t *frame, fop_rchecksum_cbk_t fn, + int32_t op_ret, int32_t op_errno, uint32_t weak_checksum, + uint8_t *strong_checksum, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - if (!frame) - return NULL; + stub = stub_new(frame, 0, GF_FOP_RCHECKSUM); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 1, GF_FOP_ENTRYLK); - if (!stub) - return NULL; + stub->fn_cbk.rchecksum = fn; + args_rchecksum_cbk_store(&stub->args_cbk, op_ret, op_errno, weak_checksum, + strong_checksum, xdata); +out: + return stub; +} - stub->args.entrylk.fn = fn; +call_stub_t * +fop_xattrop_cbk_stub(call_frame_t *frame, fop_xattrop_cbk_t fn, int32_t op_ret, + int32_t op_errno, dict_t *xattr, dict_t *xdata) +{ + call_stub_t *stub = NULL; - if (volume) - stub->args.entrylk.volume = strdup (volume); + stub = stub_new(frame, 0, GF_FOP_XATTROP); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - loc_copy (&stub->args.entrylk.loc, loc); + stub->fn_cbk.xattrop = fn; + args_xattrop_cbk_store(&stub->args_cbk, op_ret, op_errno, xattr, xdata); +out: + return stub; +} - stub->args.entrylk.cmd = cmd; - stub->args.entrylk.type = type; - if (name) - stub->args.entrylk.name = strdup (name); +call_stub_t * +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 *xdata) +{ + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_FXATTROP); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - return stub; + stub->fn_cbk.fxattrop = fn; + args_xattrop_cbk_store(&stub->args_cbk, op_ret, op_errno, xattr, 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) +fop_xattrop_stub(call_frame_t *frame, fop_xattrop_t fn, loc_t *loc, + gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - if (!frame) - return NULL; + GF_VALIDATE_OR_GOTO("call-stub", xattr, out); - stub = stub_new (frame, 0, GF_FOP_ENTRYLK); - if (!stub) - return NULL; + stub = stub_new(frame, 1, GF_FOP_XATTROP); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.entrylk_cbk.fn = fn; - stub->args.entrylk_cbk.op_ret = op_ret; - stub->args.entrylk_cbk.op_errno = op_errno; - - return stub; + stub->fn.xattrop = fn; + args_xattrop_store(&stub->args, loc, optype, xattr, xdata); +out: + return stub; } - 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) +fop_fxattrop_stub(call_frame_t *frame, fop_fxattrop_t fn, fd_t *fd, + gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - if (!frame) - return NULL; + GF_VALIDATE_OR_GOTO("call-stub", xattr, out); - stub = stub_new (frame, 1, GF_FOP_FENTRYLK); - if (!stub) - return NULL; + stub = stub_new(frame, 1, GF_FOP_FXATTROP); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.fentrylk.fn = fn; + stub->fn.fxattrop = fn; + args_fxattrop_store(&stub->args, fd, optype, xattr, xdata); +out: + return stub; +} - if (volume) - stub->args.fentrylk.volume = strdup (volume); +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 iatt *statpre, + struct iatt *statpost, dict_t *xdata) +{ + call_stub_t *stub = NULL; - if (fd) - stub->args.fentrylk.fd = fd_ref (fd); - stub->args.fentrylk.cmd = cmd; - stub->args.fentrylk.type = type; - if (name) - stub->args.fentrylk.name = strdup (name); + stub = stub_new(frame, 0, GF_FOP_SETATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - return stub; + stub->fn_cbk.setattr = fn; + args_setattr_cbk_store(&stub->args_cbk, op_ret, op_errno, statpre, statpost, + 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) +fop_fsetattr_cbk_stub(call_frame_t *frame, fop_setattr_cbk_t fn, int32_t op_ret, + int32_t op_errno, struct iatt *statpre, + struct iatt *statpost, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - if (!frame) - return NULL; + stub = stub_new(frame, 0, GF_FOP_FSETATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 0, GF_FOP_FENTRYLK); - if (!stub) - return NULL; + stub->fn_cbk.fsetattr = fn; + args_fsetattr_cbk_store(&stub->args_cbk, op_ret, op_errno, statpre, + statpost, xdata); +out: + return stub; +} - stub->args.fentrylk_cbk.fn = fn; - stub->args.fentrylk_cbk.op_ret = op_ret; - stub->args.fentrylk_cbk.op_errno = op_errno; +call_stub_t * +fop_setattr_stub(call_frame_t *frame, fop_setattr_t fn, loc_t *loc, + struct iatt *stbuf, int32_t valid, dict_t *xdata) +{ + call_stub_t *stub = NULL; - return stub; -} + GF_VALIDATE_OR_GOTO("call-stub", fn, out); + stub = stub_new(frame, 1, GF_FOP_SETATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); -call_stub_t * -fop_setdents_stub (call_frame_t *frame, - fop_setdents_t fn, - fd_t *fd, - int32_t flags, - dir_entry_t *entries, - int32_t count) -{ - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - - stub = stub_new (frame, 1, GF_FOP_SETDENTS); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - if (fd) - stub->args.setdents.fd = fd_ref (fd); - stub->args.setdents.fn = fn; - stub->args.setdents.flags = flags; - stub->args.setdents.count = count; - if (entries) { - stub->args.setdents.entries.next = entries->next; - entries->next = NULL; - } + stub->fn.setattr = fn; + args_setattr_store(&stub->args, loc, stbuf, valid, xdata); out: - return stub; + return stub; } call_stub_t * -fop_setdents_cbk_stub (call_frame_t *frame, - fop_setdents_cbk_t fn, - int32_t op_ret, - int32_t op_errno) -{ - call_stub_t *stub = NULL; +fop_fsetattr_stub(call_frame_t *frame, fop_fsetattr_t fn, fd_t *fd, + struct iatt *stbuf, int32_t valid, dict_t *xdata) +{ + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + GF_VALIDATE_OR_GOTO("call-stub", fn, out); - stub = stub_new (frame, 0, GF_FOP_SETDENTS); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_FSETATTR); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.setdents_cbk.fn = fn; - stub->args.setdents_cbk.op_ret = op_ret; - stub->args.setdents_cbk.op_errno = op_errno; + stub->fn.fsetattr = fn; + args_fsetattr_store(&stub->args, fd, stbuf, valid, xdata); out: - return stub; - + return stub; } call_stub_t * -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) +fop_fallocate_cbk_stub(call_frame_t *frame, fop_fallocate_cbk_t fn, + int32_t op_ret, int32_t op_errno, struct iatt *statpre, + struct iatt *statpost, dict_t *xdata) { - call_stub_t *stub = NULL; - gf_dirent_t *stub_entry = NULL, *entry = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - - stub = stub_new (frame, 0, GF_FOP_READDIRP); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.readdirp_cbk.fn = fn; - stub->args.readdirp_cbk.op_ret = op_ret; - stub->args.readdirp_cbk.op_errno = op_errno; - INIT_LIST_HEAD (&stub->args.readdirp_cbk.entries.list); - - /* This check must come after the init of head above - * so we're sure the list is empty for list_empty. - */ - if (!entries) - goto out; - - if (op_ret > 0) { - list_for_each_entry (entry, &entries->list, list) { - stub_entry = gf_dirent_for_name (entry->d_name); - ERR_ABORT (stub_entry); - stub_entry->d_off = entry->d_off; - stub_entry->d_ino = entry->d_ino; - stub_entry->d_stat = entry->d_stat; - list_add_tail (&stub_entry->list, - &stub->args.readdirp_cbk.entries.list); - } - } -out: - return stub; -} + call_stub_t *stub = NULL; + stub = stub_new(frame, 0, GF_FOP_FALLOCATE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); -call_stub_t * -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) -{ - call_stub_t *stub = NULL; - gf_dirent_t *stub_entry = NULL, *entry = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - - stub = stub_new (frame, 0, GF_FOP_READDIR); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - stub->args.readdir_cbk.fn = fn; - stub->args.readdir_cbk.op_ret = op_ret; - stub->args.readdir_cbk.op_errno = op_errno; - INIT_LIST_HEAD (&stub->args.readdir_cbk.entries.list); - - /* This check must come after the init of head above - * so we're sure the list is empty for list_empty. - */ - if (!entries) - goto out; - - if (op_ret > 0) { - list_for_each_entry (entry, &entries->list, list) { - stub_entry = gf_dirent_for_name (entry->d_name); - ERR_ABORT (stub_entry); - stub_entry->d_off = entry->d_off; - stub_entry->d_ino = entry->d_ino; - - list_add_tail (&stub_entry->list, - &stub->args.readdir_cbk.entries.list); - } - } + stub->fn_cbk.fallocate = fn; + + args_fallocate_cbk_store(&stub->args_cbk, op_ret, op_errno, statpre, + statpost, xdata); out: - return stub; + return stub; } call_stub_t * -fop_readdir_stub (call_frame_t *frame, - fop_readdir_t fn, - fd_t *fd, - size_t size, - off_t off) +fop_fallocate_stub(call_frame_t *frame, fop_fallocate_t fn, fd_t *fd, + int32_t mode, off_t offset, size_t len, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; + + GF_VALIDATE_OR_GOTO("call-stub", fn, out); - stub = stub_new (frame, 1, GF_FOP_READDIR); - stub->args.readdir.fn = fn; - stub->args.readdir.fd = fd_ref (fd); - stub->args.readdir.size = size; - stub->args.readdir.off = off; + stub = stub_new(frame, 1, GF_FOP_FALLOCATE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - return stub; + stub->fn.fallocate = fn; + args_fallocate_store(&stub->args, fd, mode, offset, len, xdata); +out: + return stub; } call_stub_t * -fop_readdirp_stub (call_frame_t *frame, - fop_readdirp_t fn, - fd_t *fd, - size_t size, - off_t off) +fop_discard_cbk_stub(call_frame_t *frame, fop_discard_cbk_t fn, int32_t op_ret, + int32_t op_errno, struct iatt *statpre, + struct iatt *statpost, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_DISCARD); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 1, GF_FOP_READDIRP); - stub->args.readdirp.fn = fn; - stub->args.readdirp.fd = fd_ref (fd); - stub->args.readdirp.size = size; - stub->args.readdirp.off = off; + stub->fn_cbk.discard = fn; - return stub; + args_discard_cbk_store(&stub->args_cbk, op_ret, op_errno, statpre, statpost, + xdata); +out: + return stub; } call_stub_t * -fop_checksum_stub (call_frame_t *frame, - fop_checksum_t fn, - loc_t *loc, - int32_t flags) +fop_discard_stub(call_frame_t *frame, fop_discard_t fn, fd_t *fd, off_t offset, + size_t len, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", loc, out); + GF_VALIDATE_OR_GOTO("call-stub", fn, out); - stub = stub_new (frame, 1, GF_FOP_CHECKSUM); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_DISCARD); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.checksum.fn = fn; - loc_copy (&stub->args.checksum.loc, loc); - stub->args.checksum.flags = flags; + stub->fn.discard = fn; + args_discard_store(&stub->args, fd, offset, len, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_checksum_cbk_stub (call_frame_t *frame, - fop_checksum_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - uint8_t *file_checksum, - uint8_t *dir_checksum) +fop_zerofill_cbk_stub(call_frame_t *frame, fop_zerofill_cbk_t fn, + int32_t op_ret, int32_t op_errno, struct iatt *statpre, + struct iatt *statpost, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + stub = stub_new(frame, 0, GF_FOP_ZEROFILL); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 0, GF_FOP_CHECKSUM); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub->fn_cbk.zerofill = fn; - stub->args.checksum_cbk.fn = fn; - stub->args.checksum_cbk.op_ret = op_ret; - stub->args.checksum_cbk.op_errno = op_errno; - if (op_ret >= 0) - { - stub->args.checksum_cbk.file_checksum = - memdup (file_checksum, NAME_MAX); - - stub->args.checksum_cbk.dir_checksum = - memdup (dir_checksum, NAME_MAX); - } + args_zerofill_cbk_store(&stub->args_cbk, op_ret, op_errno, statpre, + statpost, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_rchecksum_stub (call_frame_t *frame, - fop_rchecksum_t fn, - fd_t *fd, off_t offset, - int32_t len) +fop_zerofill_stub(call_frame_t *frame, fop_zerofill_t fn, fd_t *fd, + off_t offset, off_t len, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - GF_VALIDATE_OR_GOTO ("call-stub", fd, out); + GF_VALIDATE_OR_GOTO("call-stub", fn, out); - stub = stub_new (frame, 1, GF_FOP_RCHECKSUM); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + stub = stub_new(frame, 1, GF_FOP_ZEROFILL); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.rchecksum.fn = fn; - stub->args.rchecksum.fd = fd_ref (fd); - stub->args.rchecksum.offset = offset; - stub->args.rchecksum.len = len; + stub->fn.zerofill = fn; + args_zerofill_store(&stub->args, fd, offset, len, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_rchecksum_cbk_stub (call_frame_t *frame, - fop_rchecksum_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - uint32_t weak_checksum, - uint8_t *strong_checksum) +fop_ipc_cbk_stub(call_frame_t *frame, fop_ipc_cbk_t fn, int32_t op_ret, + int32_t op_errno, dict_t *xdata) { - call_stub_t *stub = NULL; - - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - - stub = stub_new (frame, 0, GF_FOP_RCHECKSUM); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + call_stub_t *stub = NULL; - stub->args.rchecksum_cbk.fn = fn; - stub->args.rchecksum_cbk.op_ret = op_ret; - stub->args.rchecksum_cbk.op_errno = op_errno; + stub = stub_new(frame, 0, GF_FOP_IPC); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - if (op_ret >= 0) - { - stub->args.rchecksum_cbk.weak_checksum = - weak_checksum; + stub->fn_cbk.ipc = fn; - stub->args.rchecksum_cbk.strong_checksum = - memdup (strong_checksum, MD5_DIGEST_LEN); - } + args_ipc_cbk_store(&stub->args_cbk, op_ret, op_errno, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_xattrop_cbk_stub (call_frame_t *frame, - fop_xattrop_cbk_t fn, - int32_t op_ret, - int32_t op_errno) +fop_ipc_stub(call_frame_t *frame, fop_ipc_t fn, int32_t op, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); - - stub = stub_new (frame, 0, GF_FOP_XATTROP); - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + GF_VALIDATE_OR_GOTO("call-stub", fn, out); - stub->args.xattrop_cbk.fn = fn; - stub->args.xattrop_cbk.op_ret = op_ret; - stub->args.xattrop_cbk.op_errno = op_errno; + stub = stub_new(frame, 1, GF_FOP_IPC); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + stub->fn.ipc = fn; + args_ipc_store(&stub->args, op, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_fxattrop_cbk_stub (call_frame_t *frame, - fop_fxattrop_cbk_t fn, - int32_t op_ret, - int32_t op_errno, - dict_t *xattr) +fop_lease_cbk_stub(call_frame_t *frame, fop_lease_cbk_t fn, int32_t op_ret, + int32_t op_errno, struct gf_lease *lease, dict_t *xdata) { - call_stub_t *stub = NULL; - GF_VALIDATE_OR_GOTO ("call-stub", frame, out); + call_stub_t *stub = NULL; - stub = stub_new (frame, 0, GF_FOP_FXATTROP); - stub->args.fxattrop_cbk.fn = fn; - stub->args.fxattrop_cbk.op_ret = op_ret; - stub->args.fxattrop_cbk.op_errno = op_errno; - if (xattr) - stub->args.fxattrop_cbk.xattr = dict_ref (xattr); + stub = stub_new(frame, 0, GF_FOP_LEASE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + stub->fn_cbk.lease = fn; + args_lease_cbk_store(&stub->args_cbk, op_ret, op_errno, lease, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_xattrop_stub (call_frame_t *frame, - fop_xattrop_t fn, - loc_t *loc, - gf_xattrop_flags_t optype, - dict_t *xattr) +fop_lease_stub(call_frame_t *frame, fop_lease_t fn, loc_t *loc, + struct gf_lease *lease, dict_t *xdata) { - call_stub_t *stub = NULL; - - if (!frame || !xattr) - return NULL; - - stub = stub_new (frame, 1, GF_FOP_XATTROP); - if (!stub) - return NULL; + call_stub_t *stub = NULL; - stub->args.xattrop.fn = fn; - - loc_copy (&stub->args.xattrop.loc, loc); + GF_VALIDATE_OR_GOTO("call-stub", fn, out); + GF_VALIDATE_OR_GOTO("call-stub", lease, out); - stub->args.xattrop.optype = optype; - stub->args.xattrop.xattr = dict_ref (xattr); + stub = stub_new(frame, 1, GF_FOP_LEASE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - return stub; + stub->fn.lease = fn; + args_lease_store(&stub->args, loc, lease, xdata); +out: + return stub; } call_stub_t * -fop_fxattrop_stub (call_frame_t *frame, - fop_fxattrop_t fn, - fd_t *fd, - gf_xattrop_flags_t optype, - dict_t *xattr) +fop_seek_cbk_stub(call_frame_t *frame, fop_seek_cbk_t fn, int32_t op_ret, + int32_t op_errno, off_t offset, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - if (!frame || !xattr) - return NULL; + stub = stub_new(frame, 0, GF_FOP_SEEK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub = stub_new (frame, 1, GF_FOP_FXATTROP); - if (!stub) - return NULL; + stub->fn_cbk.seek = fn; - stub->args.fxattrop.fn = fn; - - stub->args.fxattrop.fd = fd_ref (fd); + args_seek_cbk_store(&stub->args_cbk, op_ret, op_errno, offset, xdata); +out: + return stub; +} - stub->args.fxattrop.optype = optype; - stub->args.fxattrop.xattr = dict_ref (xattr); +call_stub_t * +fop_seek_stub(call_frame_t *frame, fop_seek_t fn, fd_t *fd, off_t offset, + gf_seek_what_t what, dict_t *xdata) +{ + call_stub_t *stub = NULL; - return stub; -} + GF_VALIDATE_OR_GOTO("call-stub", fn, out); + + stub = stub_new(frame, 1, GF_FOP_SEEK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + stub->fn.seek = fn; + args_seek_store(&stub->args, fd, offset, what, xdata); +out: + return stub; +} 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) +fop_getactivelk_cbk_stub(call_frame_t *frame, fop_getactivelk_cbk_t fn, + int32_t op_ret, int32_t op_errno, + lock_migration_info_t *lmi, dict_t *xdata) { - call_stub_t *stub = NULL; + 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 = stub_new(frame, 0, GF_FOP_GETACTIVELK); + 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; + stub->fn_cbk.getactivelk = fn; + args_getactivelk_cbk_store(&stub->args_cbk, op_ret, op_errno, lmi, xdata); out: - return stub; + return stub; } - call_stub_t * -fop_lock_notify_stub (call_frame_t *frame, fop_lock_notify_t fn, - loc_t *loc, int32_t timeout) +fop_getactivelk_stub(call_frame_t *frame, fop_getactivelk_t fn, loc_t *loc, + dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - if (!frame) - return NULL; + GF_VALIDATE_OR_GOTO("call-stub", fn, out); - stub = stub_new (frame, 1, GF_FOP_LOCK_NOTIFY); - if (!stub) - return NULL; + stub = stub_new(frame, 1, GF_FOP_GETACTIVELK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.lock_notify.fn = fn; - - loc_copy (&stub->args.lock_notify.loc, loc); + stub->fn.getactivelk = fn; - stub->args.lock_notify.timeout = timeout; + loc_copy(&stub->args.loc, loc); - return stub; + if (xdata) + stub->args.xdata = dict_ref(xdata); +out: + 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) +fop_setactivelk_cbk_stub(call_frame_t *frame, fop_setactivelk_cbk_t fn, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - call_stub_t *stub = NULL; + 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 = stub_new(frame, 0, GF_FOP_SETACTIVELK); + 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; + stub->fn_cbk.setactivelk = fn; + stub->args_cbk.op_ret = op_ret; + stub->args_cbk.op_errno = op_errno; + + if (xdata) + stub->args.xdata = dict_ref(xdata); out: - return stub; + return stub; } - call_stub_t * -fop_lock_fnotify_stub (call_frame_t *frame, fop_lock_fnotify_t fn, - fd_t *fd, int32_t timeout) +fop_setactivelk_stub(call_frame_t *frame, fop_setactivelk_t fn, loc_t *loc, + lock_migration_info_t *locklist, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - if (!frame) - return NULL; + GF_VALIDATE_OR_GOTO("call-stub", fn, out); - stub = stub_new (frame, 1, GF_FOP_LOCK_FNOTIFY); - if (!stub) - return NULL; + stub = stub_new(frame, 1, GF_FOP_SETACTIVELK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.lock_fnotify.fn = fn; + stub->fn.setactivelk = fn; - stub->args.lock_fnotify.fd = fd_ref (fd); - stub->args.lock_fnotify.timeout = timeout; + args_setactivelk_store(&stub->args, loc, locklist, xdata); - return stub; +out: + 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) +fop_copy_file_range_stub(call_frame_t *frame, fop_copy_file_range_t fn, + fd_t *fd_in, off64_t off_in, fd_t *fd_out, + off64_t off_out, size_t len, uint32_t flags, + dict_t *xdata) { - call_stub_t *stub = NULL; - - if (frame == NULL) - goto out; + call_stub_t *stub = NULL; - stub = stub_new (frame, 0, GF_FOP_SETATTR); - if (stub == NULL) - goto out; + GF_VALIDATE_OR_GOTO("call-stub", fn, out); - stub->args.setattr_cbk.fn = fn; + stub = stub_new(frame, 1, GF_FOP_COPY_FILE_RANGE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - stub->args.setattr_cbk.op_ret = op_ret; - stub->args.setattr_cbk.op_errno = op_errno; + stub->fn.copy_file_range = fn; - if (statpre) - stub->args.setattr_cbk.statpre = *statpre; - if (statpost) - stub->args.setattr_cbk.statpost = *statpost; + args_copy_file_range_store(&stub->args, fd_in, off_in, fd_out, off_out, len, + flags, xdata); out: - return stub; + 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) +fop_copy_file_range_cbk_stub(call_frame_t *frame, fop_copy_file_range_cbk_t fn, + int32_t op_ret, int32_t op_errno, + struct iatt *stbuf, struct iatt *prebuf_dst, + struct iatt *postbuf_dst, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; + + GF_VALIDATE_OR_GOTO("call-stub", fn, out); + + stub = stub_new(frame, 0, GF_FOP_COPY_FILE_RANGE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + stub->fn_cbk.copy_file_range = fn; + args_copy_file_range_cbk_store(&stub->args_cbk, op_ret, op_errno, stbuf, + prebuf_dst, postbuf_dst, xdata); - if (frame == NULL) - goto out; +out: + return stub; +} - stub = stub_new (frame, 0, GF_FOP_FSETATTR); - if (stub == NULL) - goto out; +call_stub_t * +fop_put_stub(call_frame_t *frame, fop_put_t fn, loc_t *loc, mode_t mode, + mode_t umask, uint32_t flags, struct iovec *vector, int32_t count, + off_t offset, struct iobref *iobref, dict_t *xattr, dict_t *xdata) +{ + call_stub_t *stub = NULL; - stub->args.fsetattr_cbk.fn = fn; + GF_VALIDATE_OR_GOTO("call-stub", vector, out); - stub->args.fsetattr_cbk.op_ret = op_ret; - stub->args.fsetattr_cbk.op_errno = op_errno; + stub = stub_new(frame, 1, GF_FOP_PUT); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - if (statpre) - stub->args.setattr_cbk.statpre = *statpre; - if (statpost) - stub->args.fsetattr_cbk.statpost = *statpost; + stub->fn.put = fn; + args_put_store(&stub->args, loc, mode, umask, flags, vector, count, offset, + iobref, xattr, xdata); out: - return stub; + 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) +fop_put_cbk_stub(call_frame_t *frame, fop_put_cbk_t fn, int32_t op_ret, + int32_t op_errno, inode_t *inode, struct iatt *buf, + struct iatt *preparent, struct iatt *postparent, dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; - if (frame == NULL) - goto out; + stub = stub_new(frame, 0, GF_FOP_PUT); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - if (fn == NULL) - goto out; + stub->fn_cbk.put = fn; + args_put_cbk_store(&stub->args_cbk, op_ret, op_errno, inode, buf, preparent, + postparent, xdata); +out: + return stub; +} - stub = stub_new (frame, 1, GF_FOP_SETATTR); - if (stub == NULL) - goto out; +call_stub_t * +fop_icreate_stub(call_frame_t *frame, fop_icreate_t fn, loc_t *loc, mode_t mode, + dict_t *xdata) +{ + call_stub_t *stub = NULL; - stub->args.setattr.fn = fn; + GF_VALIDATE_OR_GOTO("call-stub", fn, out); - loc_copy (&stub->args.setattr.loc, loc); + stub = stub_new(frame, 1, GF_FOP_ICREATE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - if (stbuf) - stub->args.setattr.stbuf = *stbuf; + stub->fn.icreate = fn; - stub->args.setattr.valid = valid; + stub->args.mode = mode; + if (loc) + loc_copy(&stub->args.loc, loc); + if (xdata) + stub->args.xdata = dict_ref(xdata); out: - return stub; + return stub; +} + +static void +args_icreate_store_cbk(default_args_cbk_t *args, int32_t op_ret, + int32_t op_errno, inode_t *inode, struct iatt *buf, + dict_t *xdata) +{ + args->op_ret = op_ret; + args->op_errno = op_errno; + if (inode) + args->inode = inode_ref(inode); + if (buf) + args->stat = *buf; + if (xdata) + args->xdata = dict_ref(xdata); } call_stub_t * -fop_fsetattr_stub (call_frame_t *frame, - fop_fsetattr_t fn, - fd_t *fd, - struct stat *stbuf, - int32_t valid) +fop_icreate_cbk_stub(call_frame_t *frame, fop_icreate_cbk_t fn, int32_t op_ret, + int32_t op_errno, inode_t *inode, struct iatt *buf, + dict_t *xdata) { - call_stub_t *stub = NULL; + call_stub_t *stub = NULL; + + stub = stub_new(frame, 0, GF_FOP_ICREATE); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - if (frame == NULL) - goto out; + stub->fn_cbk.icreate = fn; + args_icreate_store_cbk(&stub->args_cbk, op_ret, op_errno, inode, buf, + xdata); - if (fn == NULL) - goto out; +out: + return stub; +} - stub = stub_new (frame, 1, GF_FOP_FSETATTR); - if (stub == NULL) - goto out; +call_stub_t * +fop_namelink_stub(call_frame_t *frame, fop_namelink_t fn, loc_t *loc, + dict_t *xdata) +{ + call_stub_t *stub = NULL; - stub->args.fsetattr.fn = fn; + GF_VALIDATE_OR_GOTO("call-stub", fn, out); - if (fd) - stub->args.fsetattr.fd = fd_ref (fd); + stub = stub_new(frame, 1, GF_FOP_NAMELINK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - if (stbuf) - stub->args.fsetattr.stbuf = *stbuf; + stub->fn.namelink = fn; - stub->args.fsetattr.valid = valid; + if (loc) + loc_copy(&stub->args.loc, loc); + if (xdata) + stub->args.xdata = dict_ref(xdata); out: - return stub; + return stub; } static void -call_resume_wind (call_stub_t *stub) +args_namelink_store_cbk(default_args_cbk_t *args, int32_t op_ret, + int32_t op_errno, struct iatt *prebuf, + struct iatt *postbuf, dict_t *xdata) { - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - switch (stub->fop) { - case GF_FOP_OPEN: - { - stub->args.open.fn (stub->frame, - stub->frame->this, - &stub->args.open.loc, - stub->args.open.flags, stub->args.open.fd, - stub->args.open.wbflags); - break; - } - case GF_FOP_CREATE: - { - stub->args.create.fn (stub->frame, - stub->frame->this, - &stub->args.create.loc, - stub->args.create.flags, - stub->args.create.mode, - stub->args.create.fd); - break; - } - case GF_FOP_STAT: - { - stub->args.stat.fn (stub->frame, - stub->frame->this, - &stub->args.stat.loc); - break; - } - case GF_FOP_READLINK: - { - stub->args.readlink.fn (stub->frame, - stub->frame->this, - &stub->args.readlink.loc, - stub->args.readlink.size); - break; - } - - case GF_FOP_MKNOD: - { - stub->args.mknod.fn (stub->frame, - stub->frame->this, - &stub->args.mknod.loc, - stub->args.mknod.mode, - stub->args.mknod.rdev); - } - break; - - case GF_FOP_MKDIR: - { - stub->args.mkdir.fn (stub->frame, - stub->frame->this, - &stub->args.mkdir.loc, - stub->args.mkdir.mode); - } - break; - - case GF_FOP_UNLINK: - { - stub->args.unlink.fn (stub->frame, - stub->frame->this, - &stub->args.unlink.loc); - } - break; - - case GF_FOP_RMDIR: - { - stub->args.rmdir.fn (stub->frame, - stub->frame->this, - &stub->args.rmdir.loc); - } - break; - - case GF_FOP_SYMLINK: - { - stub->args.symlink.fn (stub->frame, - stub->frame->this, - stub->args.symlink.linkname, - &stub->args.symlink.loc); - } - break; - - case GF_FOP_RENAME: - { - stub->args.rename.fn (stub->frame, - stub->frame->this, - &stub->args.rename.old, - &stub->args.rename.new); - } - break; - - case GF_FOP_LINK: - { - stub->args.link.fn (stub->frame, - stub->frame->this, - &stub->args.link.oldloc, - &stub->args.link.newloc); - } - break; - - case GF_FOP_TRUNCATE: - { - stub->args.truncate.fn (stub->frame, - stub->frame->this, - &stub->args.truncate.loc, - stub->args.truncate.off); - break; - } - - case GF_FOP_READ: - { - stub->args.readv.fn (stub->frame, - stub->frame->this, - stub->args.readv.fd, - stub->args.readv.size, - stub->args.readv.off); - break; - } - - case GF_FOP_WRITE: - { - stub->args.writev.fn (stub->frame, - stub->frame->this, - stub->args.writev.fd, - stub->args.writev.vector, - stub->args.writev.count, - stub->args.writev.off, - stub->args.writev.iobref); - break; - } - - case GF_FOP_STATFS: - { - stub->args.statfs.fn (stub->frame, - stub->frame->this, - &stub->args.statfs.loc); - break; - } - case GF_FOP_FLUSH: - { - stub->args.flush.fn (stub->frame, - stub->frame->this, - stub->args.flush.fd); - break; - } - - case GF_FOP_FSYNC: - { - stub->args.fsync.fn (stub->frame, - stub->frame->this, - stub->args.fsync.fd, - stub->args.fsync.datasync); - break; - } - - case GF_FOP_SETXATTR: - { - stub->args.setxattr.fn (stub->frame, - stub->frame->this, - &stub->args.setxattr.loc, - stub->args.setxattr.dict, - stub->args.setxattr.flags); - break; - } - - case GF_FOP_GETXATTR: - { - stub->args.getxattr.fn (stub->frame, - stub->frame->this, - &stub->args.getxattr.loc, - stub->args.getxattr.name); - break; - } - - case GF_FOP_FSETXATTR: - { - stub->args.fsetxattr.fn (stub->frame, - stub->frame->this, - stub->args.fsetxattr.fd, - stub->args.fsetxattr.dict, - stub->args.fsetxattr.flags); - break; - } - - case GF_FOP_FGETXATTR: - { - stub->args.fgetxattr.fn (stub->frame, - stub->frame->this, - stub->args.fgetxattr.fd, - stub->args.fgetxattr.name); - break; - } - - case GF_FOP_REMOVEXATTR: - { - stub->args.removexattr.fn (stub->frame, - stub->frame->this, - &stub->args.removexattr.loc, - stub->args.removexattr.name); - break; - } - - case GF_FOP_OPENDIR: - { - stub->args.opendir.fn (stub->frame, - stub->frame->this, - &stub->args.opendir.loc, - stub->args.opendir.fd); - break; - } - - case GF_FOP_GETDENTS: - { - stub->args.getdents.fn (stub->frame, - stub->frame->this, - stub->args.getdents.fd, - stub->args.getdents.size, - stub->args.getdents.off, - stub->args.getdents.flag); - break; - } - - case GF_FOP_FSYNCDIR: - { - stub->args.fsyncdir.fn (stub->frame, - stub->frame->this, - stub->args.fsyncdir.fd, - stub->args.fsyncdir.datasync); - break; - } - - case GF_FOP_ACCESS: - { - stub->args.access.fn (stub->frame, - stub->frame->this, - &stub->args.access.loc, - stub->args.access.mask); - break; - } - - case GF_FOP_FTRUNCATE: - { - stub->args.ftruncate.fn (stub->frame, - stub->frame->this, - stub->args.ftruncate.fd, - stub->args.ftruncate.off); - break; - } - - case GF_FOP_FSTAT: - { - stub->args.fstat.fn (stub->frame, - stub->frame->this, - stub->args.fstat.fd); - break; - } - - case GF_FOP_LK: - { - stub->args.lk.fn (stub->frame, - stub->frame->this, - stub->args.lk.fd, - stub->args.lk.cmd, - &stub->args.lk.lock); - break; - } - - case GF_FOP_INODELK: - { - stub->args.inodelk.fn (stub->frame, - stub->frame->this, - stub->args.inodelk.volume, - &stub->args.inodelk.loc, - stub->args.inodelk.cmd, - &stub->args.inodelk.lock); - break; - } - - case GF_FOP_FINODELK: - { - stub->args.finodelk.fn (stub->frame, - stub->frame->this, - stub->args.finodelk.volume, - stub->args.finodelk.fd, - stub->args.finodelk.cmd, - &stub->args.finodelk.lock); - break; - } - - case GF_FOP_ENTRYLK: - { - stub->args.entrylk.fn (stub->frame, - stub->frame->this, - stub->args.entrylk.volume, - &stub->args.entrylk.loc, - stub->args.entrylk.name, - stub->args.entrylk.cmd, - stub->args.entrylk.type); - break; - } - - case GF_FOP_FENTRYLK: - { - stub->args.fentrylk.fn (stub->frame, - stub->frame->this, - stub->args.fentrylk.volume, - stub->args.fentrylk.fd, - stub->args.fentrylk.name, - stub->args.fentrylk.cmd, - stub->args.fentrylk.type); - break; - } - - break; - - case GF_FOP_LOOKUP: - { - stub->args.lookup.fn (stub->frame, - stub->frame->this, - &stub->args.lookup.loc, - stub->args.lookup.xattr_req); - break; - } - - case GF_FOP_SETDENTS: - { - stub->args.setdents.fn (stub->frame, - stub->frame->this, - stub->args.setdents.fd, - stub->args.setdents.flags, - &stub->args.setdents.entries, - stub->args.setdents.count); - break; - } - - case GF_FOP_CHECKSUM: - { - stub->args.checksum.fn (stub->frame, - stub->frame->this, - &stub->args.checksum.loc, - stub->args.checksum.flags); - break; - } - - case GF_FOP_RCHECKSUM: - { - stub->args.rchecksum.fn (stub->frame, - stub->frame->this, - stub->args.rchecksum.fd, - stub->args.rchecksum.offset, - stub->args.rchecksum.len); - break; - } - - case GF_FOP_READDIR: - { - stub->args.readdir.fn (stub->frame, - stub->frame->this, - stub->args.readdir.fd, - stub->args.readdir.size, - stub->args.readdir.off); - break; - } + args->op_ret = op_ret; + args->op_errno = op_errno; - case GF_FOP_READDIRP: - { - stub->args.readdirp.fn (stub->frame, - stub->frame->this, - stub->args.readdirp.fd, - stub->args.readdirp.size, - stub->args.readdirp.off); - break; - } - - case GF_FOP_XATTROP: - { - stub->args.xattrop.fn (stub->frame, - stub->frame->this, - &stub->args.xattrop.loc, - stub->args.xattrop.optype, - stub->args.xattrop.xattr); - - break; - } - case GF_FOP_FXATTROP: - { - stub->args.fxattrop.fn (stub->frame, - stub->frame->this, - stub->args.fxattrop.fd, - stub->args.fxattrop.optype, - stub->args.fxattrop.xattr); - - 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; - } - 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", - GF_LOG_DEBUG, - "Invalid value of FOP"); - } - break; - } -out: - return; + if (prebuf) + args->prestat = *prebuf; + if (postbuf) + args->poststat = *postbuf; + if (xdata) + args->xdata = dict_ref(xdata); } +call_stub_t * +fop_namelink_cbk_stub(call_frame_t *frame, fop_namelink_cbk_t fn, + int32_t op_ret, int32_t op_errno, struct iatt *prebuf, + struct iatt *postbuf, dict_t *xdata) +{ + call_stub_t *stub = NULL; + stub = stub_new(frame, 0, GF_FOP_NAMELINK); + GF_VALIDATE_OR_GOTO("call-stub", stub, out); -static void -call_resume_unwind (call_stub_t *stub) -{ - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - switch (stub->fop) { - case GF_FOP_OPEN: - { - if (!stub->args.open_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.open_cbk.op_ret, - stub->args.open_cbk.op_errno, - stub->args.open_cbk.fd); - 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); - break; - } - - case GF_FOP_CREATE: - { - if (!stub->args.create_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.create_cbk.op_ret, - stub->args.create_cbk.op_errno, - stub->args.create_cbk.fd, - stub->args.create_cbk.inode, - &stub->args.create_cbk.buf, - &stub->args.create_cbk.preparent, - &stub->args.create_cbk.postparent); - else - stub->args.create_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.create_cbk.op_ret, - stub->args.create_cbk.op_errno, - stub->args.create_cbk.fd, - stub->args.create_cbk.inode, - &stub->args.create_cbk.buf, - &stub->args.create_cbk.preparent, - &stub->args.create_cbk.postparent); - - break; - } - - case GF_FOP_STAT: - { - if (!stub->args.stat_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.stat_cbk.op_ret, - stub->args.stat_cbk.op_errno, - &stub->args.stat_cbk.buf); - 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); - - break; - } - - case GF_FOP_READLINK: - { - if (!stub->args.readlink_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.readlink_cbk.op_ret, - stub->args.readlink_cbk.op_errno, - stub->args.readlink_cbk.buf, - &stub->args.readlink_cbk.sbuf); - else - stub->args.readlink_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.readlink_cbk.op_ret, - stub->args.readlink_cbk.op_errno, - stub->args.readlink_cbk.buf, - &stub->args.readlink_cbk.sbuf); - - break; - } - - case GF_FOP_MKNOD: - { - if (!stub->args.mknod_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.mknod_cbk.op_ret, - stub->args.mknod_cbk.op_errno, - stub->args.mknod_cbk.inode, - &stub->args.mknod_cbk.buf, - &stub->args.mknod_cbk.preparent, - &stub->args.mknod_cbk.postparent); - else - stub->args.mknod_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.mknod_cbk.op_ret, - stub->args.mknod_cbk.op_errno, - stub->args.mknod_cbk.inode, - &stub->args.mknod_cbk.buf, - &stub->args.mknod_cbk.preparent, - &stub->args.mknod_cbk.postparent); - break; - } - - case GF_FOP_MKDIR: - { - if (!stub->args.mkdir_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.mkdir_cbk.op_ret, - stub->args.mkdir_cbk.op_errno, - stub->args.mkdir_cbk.inode, - &stub->args.mkdir_cbk.buf, - &stub->args.mkdir_cbk.preparent, - &stub->args.mkdir_cbk.postparent); - else - stub->args.mkdir_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.mkdir_cbk.op_ret, - stub->args.mkdir_cbk.op_errno, - stub->args.mkdir_cbk.inode, - &stub->args.mkdir_cbk.buf, - &stub->args.mkdir_cbk.preparent, - &stub->args.mkdir_cbk.postparent); - - if (stub->args.mkdir_cbk.inode) - inode_unref (stub->args.mkdir_cbk.inode); - - break; - } - - case GF_FOP_UNLINK: - { - if (!stub->args.unlink_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.unlink_cbk.op_ret, - stub->args.unlink_cbk.op_errno, - &stub->args.unlink_cbk.preparent, - &stub->args.unlink_cbk.postparent); - else - stub->args.unlink_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.unlink_cbk.op_ret, - stub->args.unlink_cbk.op_errno, - &stub->args.unlink_cbk.preparent, - &stub->args.unlink_cbk.postparent); - break; - } - - case GF_FOP_RMDIR: - { - if (!stub->args.rmdir_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.rmdir_cbk.op_ret, - stub->args.rmdir_cbk.op_errno, - &stub->args.rmdir_cbk.preparent, - &stub->args.rmdir_cbk.postparent); - else - stub->args.unlink_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.rmdir_cbk.op_ret, - stub->args.rmdir_cbk.op_errno, - &stub->args.rmdir_cbk.preparent, - &stub->args.rmdir_cbk.postparent); - break; - } - - case GF_FOP_SYMLINK: - { - if (!stub->args.symlink_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.symlink_cbk.op_ret, - stub->args.symlink_cbk.op_errno, - stub->args.symlink_cbk.inode, - &stub->args.symlink_cbk.buf, - &stub->args.symlink_cbk.preparent, - &stub->args.symlink_cbk.postparent); - else - stub->args.symlink_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.symlink_cbk.op_ret, - stub->args.symlink_cbk.op_errno, - stub->args.symlink_cbk.inode, - &stub->args.symlink_cbk.buf, - &stub->args.symlink_cbk.preparent, - &stub->args.symlink_cbk.postparent); - } - break; - - case GF_FOP_RENAME: - { -#if 0 - if (!stub->args.rename_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.rename_cbk.op_ret, - stub->args.rename_cbk.op_errno, - &stub->args.rename_cbk.buf, - &stub->args.rename_cbk.preoldparent, - &stub->args.rename_cbk.postoldparent, - &stub->args.rename_cbk.prenewparent, - &stub->args.rename_cbk.postnewparent); - else - stub->args.rename_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.rename_cbk.op_ret, - stub->args.rename_cbk.op_errno, - &stub->args.rename_cbk.buf, - &stub->args.rename_cbk.preoldparent, - &stub->args.rename_cbk.postoldparent, - &stub->args.rename_cbk.prenewparent, - &stub->args.rename_cbk.postnewparent); -#endif - break; - } - - case GF_FOP_LINK: - { - if (!stub->args.link_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.link_cbk.op_ret, - stub->args.link_cbk.op_errno, - stub->args.link_cbk.inode, - &stub->args.link_cbk.buf); - else - stub->args.link_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - 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.preparent, - &stub->args.link_cbk.postparent); - break; - } - - case GF_FOP_TRUNCATE: - { - if (!stub->args.truncate_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.truncate_cbk.op_ret, - stub->args.truncate_cbk.op_errno, - &stub->args.truncate_cbk.prebuf, - &stub->args.truncate_cbk.postbuf); - else - stub->args.truncate_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.truncate_cbk.op_ret, - stub->args.truncate_cbk.op_errno, - &stub->args.truncate_cbk.prebuf, - &stub->args.truncate_cbk.postbuf); - break; - } - - case GF_FOP_READ: - { - if (!stub->args.readv_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.readv_cbk.op_ret, - stub->args.readv_cbk.op_errno, - stub->args.readv_cbk.vector, - stub->args.readv_cbk.count, - &stub->args.readv_cbk.stbuf, - stub->args.readv_cbk.iobref); - else - stub->args.readv_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.readv_cbk.op_ret, - stub->args.readv_cbk.op_errno, - stub->args.readv_cbk.vector, - stub->args.readv_cbk.count, - &stub->args.readv_cbk.stbuf, - stub->args.readv_cbk.iobref); - } - break; - - case GF_FOP_WRITE: - { - if (!stub->args.writev_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.writev_cbk.op_ret, - stub->args.writev_cbk.op_errno, - &stub->args.writev_cbk.prebuf, - &stub->args.writev_cbk.postbuf); - else - stub->args.writev_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.writev_cbk.op_ret, - stub->args.writev_cbk.op_errno, - &stub->args.writev_cbk.prebuf, - &stub->args.writev_cbk.postbuf); - break; - } - - case GF_FOP_STATFS: - { - if (!stub->args.statfs_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.statfs_cbk.op_ret, - stub->args.statfs_cbk.op_errno, - &(stub->args.statfs_cbk.buf)); - 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)); - } - break; - - case GF_FOP_FLUSH: - { - if (!stub->args.flush_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.flush_cbk.op_ret, - stub->args.flush_cbk.op_errno); - 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); - - break; - } - - case GF_FOP_FSYNC: - { - if (!stub->args.fsync_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.fsync_cbk.op_ret, - stub->args.fsync_cbk.op_errno, - &stub->args.fsync_cbk.prebuf, - &stub->args.fsync_cbk.postbuf); - else - stub->args.fsync_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.fsync_cbk.op_ret, - stub->args.fsync_cbk.op_errno, - &stub->args.fsync_cbk.prebuf, - &stub->args.fsync_cbk.postbuf); - break; - } - - case GF_FOP_SETXATTR: - { - if (!stub->args.setxattr_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.setxattr_cbk.op_ret, - stub->args.setxattr_cbk.op_errno); - - 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); - - break; - } - - case GF_FOP_GETXATTR: - { - if (!stub->args.getxattr_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.getxattr_cbk.op_ret, - stub->args.getxattr_cbk.op_errno, - stub->args.getxattr_cbk.dict); - 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); - break; - } - - case GF_FOP_FSETXATTR: - { - if (!stub->args.fsetxattr_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.fsetxattr_cbk.op_ret, - stub->args.fsetxattr_cbk.op_errno); - - 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); - - break; - } - - case GF_FOP_FGETXATTR: - { - if (!stub->args.fgetxattr_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.fgetxattr_cbk.op_ret, - stub->args.fgetxattr_cbk.op_errno, - stub->args.fgetxattr_cbk.dict); - 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); - break; - } - - case GF_FOP_REMOVEXATTR: - { - if (!stub->args.removexattr_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.removexattr_cbk.op_ret, - stub->args.removexattr_cbk.op_errno); - 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); - - break; - } - - case GF_FOP_OPENDIR: - { - if (!stub->args.opendir_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.opendir_cbk.op_ret, - stub->args.opendir_cbk.op_errno, - stub->args.opendir_cbk.fd); - 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); - break; - } - - case GF_FOP_GETDENTS: - { - if (!stub->args.getdents_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.getdents_cbk.op_ret, - stub->args.getdents_cbk.op_errno, - &stub->args.getdents_cbk.entries, - stub->args.getdents_cbk.count); - else - stub->args.getdents_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.getdents_cbk.op_ret, - stub->args.getdents_cbk.op_errno, - &stub->args.getdents_cbk.entries, - stub->args.getdents_cbk.count); - break; - } - - case GF_FOP_FSYNCDIR: - { - if (!stub->args.fsyncdir_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.fsyncdir_cbk.op_ret, - stub->args.fsyncdir_cbk.op_errno); - 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); - break; - } - - case GF_FOP_ACCESS: - { - if (!stub->args.access_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.access_cbk.op_ret, - stub->args.access_cbk.op_errno); - 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); - - break; - } - - case GF_FOP_FTRUNCATE: - { - if (!stub->args.ftruncate_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.ftruncate_cbk.op_ret, - stub->args.ftruncate_cbk.op_errno, - &stub->args.ftruncate_cbk.prebuf, - &stub->args.ftruncate_cbk.postbuf); - else - stub->args.ftruncate_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.ftruncate_cbk.op_ret, - stub->args.ftruncate_cbk.op_errno, - &stub->args.ftruncate_cbk.prebuf, - &stub->args.ftruncate_cbk.postbuf); - break; - } - - case GF_FOP_FSTAT: - { - if (!stub->args.fstat_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.fstat_cbk.op_ret, - stub->args.fstat_cbk.op_errno, - &stub->args.fstat_cbk.buf); - 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); - - break; - } - - case GF_FOP_LK: - { - if (!stub->args.lk_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.lk_cbk.op_ret, - stub->args.lk_cbk.op_errno, - &stub->args.lk_cbk.lock); - 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); - break; - } - - case GF_FOP_INODELK: - { - if (!stub->args.inodelk_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.inodelk_cbk.op_ret, - stub->args.inodelk_cbk.op_errno); - - 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); - break; - } - - case GF_FOP_FINODELK: - { - if (!stub->args.finodelk_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.finodelk_cbk.op_ret, - stub->args.finodelk_cbk.op_errno); - - 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); - break; - } - - case GF_FOP_ENTRYLK: - { - if (!stub->args.entrylk_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.entrylk_cbk.op_ret, - stub->args.entrylk_cbk.op_errno); - - 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); - break; - } - - case GF_FOP_FENTRYLK: - { - if (!stub->args.fentrylk_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.fentrylk_cbk.op_ret, - stub->args.fentrylk_cbk.op_errno); - - 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); - break; - } - - case GF_FOP_LOOKUP: - { - if (!stub->args.lookup_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.lookup_cbk.op_ret, - stub->args.lookup_cbk.op_errno, - stub->args.lookup_cbk.inode, - &stub->args.lookup_cbk.buf, - stub->args.lookup_cbk.dict, - &stub->args.lookup_cbk.postparent); - else - stub->args.lookup_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.lookup_cbk.op_ret, - stub->args.lookup_cbk.op_errno, - stub->args.lookup_cbk.inode, - &stub->args.lookup_cbk.buf, - stub->args.lookup_cbk.dict, - &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); - - break; - } - case GF_FOP_SETDENTS: - { - if (!stub->args.setdents_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.setdents_cbk.op_ret, - stub->args.setdents_cbk.op_errno); - else - stub->args.setdents_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.setdents_cbk.op_ret, - stub->args.setdents_cbk.op_errno); - break; - } - - case GF_FOP_CHECKSUM: - { - if (!stub->args.checksum_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.checksum_cbk.op_ret, - stub->args.checksum_cbk.op_errno, - stub->args.checksum_cbk.file_checksum, - stub->args.checksum_cbk.dir_checksum); - else - stub->args.checksum_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.checksum_cbk.op_ret, - stub->args.checksum_cbk.op_errno, - stub->args.checksum_cbk.file_checksum, - stub->args.checksum_cbk.dir_checksum); - if (stub->args.checksum_cbk.op_ret >= 0) - { - FREE (stub->args.checksum_cbk.file_checksum); - FREE (stub->args.checksum_cbk.dir_checksum); - } - - break; - } - - case GF_FOP_RCHECKSUM: - { - if (!stub->args.rchecksum_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.rchecksum_cbk.op_ret, - stub->args.rchecksum_cbk.op_errno, - stub->args.rchecksum_cbk.weak_checksum, - stub->args.rchecksum_cbk.strong_checksum); - else - stub->args.rchecksum_cbk.fn (stub->frame, - stub->frame->cookie, - stub->frame->this, - stub->args.rchecksum_cbk.op_ret, - stub->args.rchecksum_cbk.op_errno, - stub->args.rchecksum_cbk.weak_checksum, - stub->args.rchecksum_cbk.strong_checksum); - if (stub->args.rchecksum_cbk.op_ret >= 0) - { - FREE (stub->args.rchecksum_cbk.strong_checksum); - } - - break; - } - - case GF_FOP_READDIR: - { - if (!stub->args.readdir_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.readdir_cbk.op_ret, - stub->args.readdir_cbk.op_errno, - &stub->args.readdir_cbk.entries); - 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); - - if (stub->args.readdir_cbk.op_ret > 0) - gf_dirent_free (&stub->args.readdir_cbk.entries); - - break; - } + stub->fn_cbk.namelink = fn; + args_namelink_store_cbk(&stub->args_cbk, op_ret, op_errno, prebuf, postbuf, + xdata); - case GF_FOP_READDIRP: - { - if (!stub->args.readdirp_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.readdirp_cbk.op_ret, - stub->args.readdirp_cbk.op_errno, - &stub->args.readdirp_cbk.entries); - 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); - - if (stub->args.readdirp_cbk.op_ret > 0) - gf_dirent_free (&stub->args.readdirp_cbk.entries); - - break; - } - - case GF_FOP_XATTROP: - { - if (!stub->args.xattrop_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.xattrop_cbk.op_ret, - stub->args.xattrop_cbk.op_errno); - 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); - - if (stub->args.xattrop_cbk.xattr) - dict_unref (stub->args.xattrop_cbk.xattr); - - break; - } - case GF_FOP_FXATTROP: - { - if (!stub->args.fxattrop_cbk.fn) - STACK_UNWIND (stub->frame, - stub->args.fxattrop_cbk.op_ret, - stub->args.fxattrop_cbk.op_errno); - 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); - - if (stub->args.fxattrop_cbk.xattr) - dict_unref (stub->args.fxattrop_cbk.xattr); - - 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_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", - GF_LOG_DEBUG, - "Invalid value of FOP"); - } - break; - } out: - return; + return stub; } +void +call_resume_wind(call_stub_t *stub) +{ + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + switch (stub->fop) { + case GF_FOP_OPEN: + stub->fn.open(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.flags, stub->args.fd, stub->args.xdata); + break; + case GF_FOP_CREATE: + stub->fn.create(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.flags, stub->args.mode, stub->args.umask, + stub->args.fd, stub->args.xdata); + break; + case GF_FOP_STAT: + stub->fn.stat(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.xdata); + break; + case GF_FOP_READLINK: + stub->fn.readlink(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.size, stub->args.xdata); + break; + case GF_FOP_MKNOD: + stub->fn.mknod(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.mode, stub->args.rdev, stub->args.umask, + stub->args.xdata); + break; + case GF_FOP_MKDIR: + stub->fn.mkdir(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.mode, stub->args.umask, stub->args.xdata); + break; + case GF_FOP_UNLINK: + stub->fn.unlink(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.xflag, stub->args.xdata); + break; + case GF_FOP_RMDIR: + stub->fn.rmdir(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.flags, stub->args.xdata); + break; + case GF_FOP_SYMLINK: + stub->fn.symlink(stub->frame, stub->frame->this, + stub->args.linkname, &stub->args.loc, + stub->args.umask, stub->args.xdata); + break; + case GF_FOP_RENAME: + stub->fn.rename(stub->frame, stub->frame->this, &stub->args.loc, + &stub->args.loc2, stub->args.xdata); + break; + case GF_FOP_LINK: + stub->fn.link(stub->frame, stub->frame->this, &stub->args.loc, + &stub->args.loc2, stub->args.xdata); + break; + case GF_FOP_TRUNCATE: + stub->fn.truncate(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.offset, stub->args.xdata); + break; + case GF_FOP_READ: + stub->fn.readv(stub->frame, stub->frame->this, stub->args.fd, + stub->args.size, stub->args.offset, stub->args.flags, + stub->args.xdata); + break; + case GF_FOP_WRITE: + stub->fn.writev(stub->frame, stub->frame->this, stub->args.fd, + stub->args.vector, stub->args.count, + stub->args.offset, stub->args.flags, + stub->args.iobref, stub->args.xdata); + break; + case GF_FOP_STATFS: + stub->fn.statfs(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.xdata); + break; + case GF_FOP_FLUSH: + stub->fn.flush(stub->frame, stub->frame->this, stub->args.fd, + stub->args.xdata); + break; + case GF_FOP_FSYNC: + stub->fn.fsync(stub->frame, stub->frame->this, stub->args.fd, + stub->args.datasync, stub->args.xdata); + break; + case GF_FOP_SETXATTR: + stub->fn.setxattr(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.xattr, stub->args.flags, + stub->args.xdata); + break; + case GF_FOP_GETXATTR: + stub->fn.getxattr(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.name, stub->args.xdata); + break; + case GF_FOP_FSETXATTR: + stub->fn.fsetxattr(stub->frame, stub->frame->this, stub->args.fd, + stub->args.xattr, stub->args.flags, + stub->args.xdata); + break; + case GF_FOP_FGETXATTR: + stub->fn.fgetxattr(stub->frame, stub->frame->this, stub->args.fd, + stub->args.name, stub->args.xdata); + break; + case GF_FOP_REMOVEXATTR: + stub->fn.removexattr(stub->frame, stub->frame->this, + &stub->args.loc, stub->args.name, + stub->args.xdata); + break; + case GF_FOP_FREMOVEXATTR: + stub->fn.fremovexattr(stub->frame, stub->frame->this, stub->args.fd, + stub->args.name, stub->args.xdata); + break; + case GF_FOP_OPENDIR: + stub->fn.opendir(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.fd, stub->args.xdata); + break; + case GF_FOP_FSYNCDIR: + stub->fn.fsyncdir(stub->frame, stub->frame->this, stub->args.fd, + stub->args.datasync, stub->args.xdata); + break; + case GF_FOP_ACCESS: + stub->fn.access(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.mask, stub->args.xdata); + break; + + case GF_FOP_FTRUNCATE: + stub->fn.ftruncate(stub->frame, stub->frame->this, stub->args.fd, + stub->args.offset, stub->args.xdata); + break; + case GF_FOP_FSTAT: + stub->fn.fstat(stub->frame, stub->frame->this, stub->args.fd, + stub->args.xdata); + break; + case GF_FOP_LK: + stub->fn.lk(stub->frame, stub->frame->this, stub->args.fd, + stub->args.cmd, &stub->args.lock, stub->args.xdata); + break; + case GF_FOP_INODELK: + stub->fn.inodelk(stub->frame, stub->frame->this, stub->args.volume, + &stub->args.loc, stub->args.cmd, &stub->args.lock, + stub->args.xdata); + break; + case GF_FOP_FINODELK: + stub->fn.finodelk(stub->frame, stub->frame->this, stub->args.volume, + stub->args.fd, stub->args.cmd, &stub->args.lock, + stub->args.xdata); + break; + case GF_FOP_ENTRYLK: + stub->fn.entrylk(stub->frame, stub->frame->this, stub->args.volume, + &stub->args.loc, stub->args.name, + stub->args.entrylkcmd, stub->args.entrylktype, + stub->args.xdata); + break; + case GF_FOP_FENTRYLK: + stub->fn.fentrylk(stub->frame, stub->frame->this, stub->args.volume, + stub->args.fd, stub->args.name, + stub->args.entrylkcmd, stub->args.entrylktype, + stub->args.xdata); + break; + case GF_FOP_LOOKUP: + stub->fn.lookup(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.xdata); + break; + case GF_FOP_RCHECKSUM: + stub->fn.rchecksum(stub->frame, stub->frame->this, stub->args.fd, + stub->args.offset, stub->args.size, + stub->args.xdata); + break; + case GF_FOP_READDIR: + stub->fn.readdir(stub->frame, stub->frame->this, stub->args.fd, + stub->args.size, stub->args.offset, + stub->args.xdata); + break; + case GF_FOP_READDIRP: + stub->fn.readdirp(stub->frame, stub->frame->this, stub->args.fd, + stub->args.size, stub->args.offset, + stub->args.xdata); + break; + case GF_FOP_XATTROP: + stub->fn.xattrop(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.optype, stub->args.xattr, + stub->args.xdata); + break; + case GF_FOP_FXATTROP: + stub->fn.fxattrop(stub->frame, stub->frame->this, stub->args.fd, + stub->args.optype, stub->args.xattr, + stub->args.xdata); + break; + case GF_FOP_SETATTR: + stub->fn.setattr(stub->frame, stub->frame->this, &stub->args.loc, + &stub->args.stat, stub->args.valid, + stub->args.xdata); + break; + case GF_FOP_FSETATTR: + stub->fn.fsetattr(stub->frame, stub->frame->this, stub->args.fd, + &stub->args.stat, stub->args.valid, + stub->args.xdata); + break; + case GF_FOP_FALLOCATE: + stub->fn.fallocate(stub->frame, stub->frame->this, stub->args.fd, + stub->args.flags, stub->args.offset, + stub->args.size, stub->args.xdata); + break; + case GF_FOP_DISCARD: + stub->fn.discard(stub->frame, stub->frame->this, stub->args.fd, + stub->args.offset, stub->args.size, + stub->args.xdata); + break; + case GF_FOP_ZEROFILL: + stub->fn.zerofill(stub->frame, stub->frame->this, stub->args.fd, + stub->args.offset, stub->args.size, + stub->args.xdata); + break; + case GF_FOP_IPC: + stub->fn.ipc(stub->frame, stub->frame->this, stub->args.cmd, + stub->args.xdata); + break; + case GF_FOP_SEEK: + stub->fn.seek(stub->frame, stub->frame->this, stub->args.fd, + stub->args.offset, stub->args.what, stub->args.xdata); + break; + case GF_FOP_LEASE: + stub->fn.lease(stub->frame, stub->frame->this, &stub->args.loc, + &stub->args.lease, stub->args.xdata); + break; + + case GF_FOP_GETACTIVELK: + stub->fn.getactivelk(stub->frame, stub->frame->this, + &stub->args.loc, stub->args.xdata); + break; + + case GF_FOP_SETACTIVELK: + stub->fn.setactivelk(stub->frame, stub->frame->this, + &stub->args.loc, &stub->args.locklist, + stub->args.xdata); + break; + + case GF_FOP_PUT: + stub->fn.put(stub->frame, stub->frame->this, &stub->args.loc, + stub->args.mode, stub->args.umask, stub->args.flags, + stub->args.vector, stub->args.count, stub->args.offset, + stub->args.iobref, stub->args.xattr, stub->args.xdata); + break; + + case GF_FOP_COPY_FILE_RANGE: + stub->fn.copy_file_range( + stub->frame, stub->frame->this, stub->args.fd, + stub->args.off_in, stub->args.fd_dst, stub->args.off_out, + stub->args.size, stub->args.flags, stub->args.xdata); + break; + + default: + gf_msg_callingfn("call-stub", GF_LOG_ERROR, EINVAL, + LG_MSG_INVALID_ENTRY, + "Invalid value of FOP" + " (%d)", + stub->fop); + break; + } +out: + return; +} + +#define STUB_UNWIND(stb, fop, args...) \ + do { \ + if (stb->fn_cbk.fop) \ + stb->fn_cbk.fop(stb->frame, stb->frame->cookie, stb->frame->this, \ + stb->args_cbk.op_ret, stb->args_cbk.op_errno, \ + args); \ + else \ + STACK_UNWIND_STRICT(fop, stb->frame, stb->args_cbk.op_ret, \ + stb->args_cbk.op_errno, args); \ + } while (0) static void -call_stub_destroy_wind (call_stub_t *stub) -{ - switch (stub->fop) { - case GF_FOP_OPEN: - { - loc_wipe (&stub->args.open.loc); - if (stub->args.open.fd) - fd_unref (stub->args.open.fd); - break; - } - case GF_FOP_CREATE: - { - loc_wipe (&stub->args.create.loc); - if (stub->args.create.fd) - fd_unref (stub->args.create.fd); - break; - } - case GF_FOP_STAT: - { - loc_wipe (&stub->args.stat.loc); - break; - } - case GF_FOP_READLINK: - { - loc_wipe (&stub->args.readlink.loc); - break; - } - - case GF_FOP_MKNOD: - { - loc_wipe (&stub->args.mknod.loc); - } - break; - - case GF_FOP_MKDIR: - { - loc_wipe (&stub->args.mkdir.loc); - } - break; - - case GF_FOP_UNLINK: - { - loc_wipe (&stub->args.unlink.loc); - } - break; - - case GF_FOP_RMDIR: - { - loc_wipe (&stub->args.rmdir.loc); - } - break; - - case GF_FOP_SYMLINK: - { - FREE (stub->args.symlink.linkname); - loc_wipe (&stub->args.symlink.loc); - } - break; - - case GF_FOP_RENAME: - { - loc_wipe (&stub->args.rename.old); - loc_wipe (&stub->args.rename.new); - } - break; - - case GF_FOP_LINK: - { - loc_wipe (&stub->args.link.oldloc); - loc_wipe (&stub->args.link.newloc); - } - break; - - case GF_FOP_TRUNCATE: - { - loc_wipe (&stub->args.truncate.loc); - break; - } - - case GF_FOP_READ: - { - if (stub->args.readv.fd) - fd_unref (stub->args.readv.fd); - break; - } - - case GF_FOP_WRITE: - { - struct iobref *iobref = stub->args.writev.iobref; - if (stub->args.writev.fd) - fd_unref (stub->args.writev.fd); - FREE (stub->args.writev.vector); - if (iobref) - iobref_unref (iobref); - break; - } - - case GF_FOP_STATFS: - { - loc_wipe (&stub->args.statfs.loc); - break; - } - case GF_FOP_FLUSH: - { - if (stub->args.flush.fd) - fd_unref (stub->args.flush.fd); - break; - } - - case GF_FOP_FSYNC: - { - if (stub->args.fsync.fd) - fd_unref (stub->args.fsync.fd); - break; - } - - case GF_FOP_SETXATTR: - { - loc_wipe (&stub->args.setxattr.loc); - if (stub->args.setxattr.dict) - dict_unref (stub->args.setxattr.dict); - break; - } - - case GF_FOP_GETXATTR: - { - if (stub->args.getxattr.name) - FREE (stub->args.getxattr.name); - loc_wipe (&stub->args.getxattr.loc); - break; - } - - case GF_FOP_FSETXATTR: - { - fd_unref (stub->args.fsetxattr.fd); - if (stub->args.fsetxattr.dict) - dict_unref (stub->args.fsetxattr.dict); - break; - } - - case GF_FOP_FGETXATTR: - { - if (stub->args.fgetxattr.name) - FREE (stub->args.fgetxattr.name); - fd_unref (stub->args.fgetxattr.fd); - break; - } - - case GF_FOP_REMOVEXATTR: - { - loc_wipe (&stub->args.removexattr.loc); - FREE (stub->args.removexattr.name); - break; - } - - case GF_FOP_OPENDIR: - { - loc_wipe (&stub->args.opendir.loc); - if (stub->args.opendir.fd) - fd_unref (stub->args.opendir.fd); - break; - } - - case GF_FOP_GETDENTS: - { - if (stub->args.getdents.fd) - fd_unref (stub->args.getdents.fd); - break; - } - - case GF_FOP_FSYNCDIR: - { - if (stub->args.fsyncdir.fd) - fd_unref (stub->args.fsyncdir.fd); - break; - } - - case GF_FOP_ACCESS: - { - loc_wipe (&stub->args.access.loc); - break; - } - - case GF_FOP_FTRUNCATE: - { - if (stub->args.ftruncate.fd) - fd_unref (stub->args.ftruncate.fd); - break; - } - - case GF_FOP_FSTAT: - { - if (stub->args.fstat.fd) - fd_unref (stub->args.fstat.fd); - break; - } - - case GF_FOP_LK: - { - if (stub->args.lk.fd) - fd_unref (stub->args.lk.fd); - break; - } - - case GF_FOP_INODELK: - { - if (stub->args.inodelk.volume) - FREE (stub->args.inodelk.volume); - - loc_wipe (&stub->args.inodelk.loc); - break; - } - case GF_FOP_FINODELK: - { - if (stub->args.finodelk.volume) - FREE (stub->args.finodelk.volume); - - if (stub->args.finodelk.fd) - fd_unref (stub->args.finodelk.fd); - break; - } - case GF_FOP_ENTRYLK: - { - if (stub->args.entrylk.volume) - FREE (stub->args.entrylk.volume); - - if (stub->args.entrylk.name) - FREE (stub->args.entrylk.name); - loc_wipe (&stub->args.entrylk.loc); - break; - } - case GF_FOP_FENTRYLK: - { - if (stub->args.fentrylk.volume) - FREE (stub->args.fentrylk.volume); - - if (stub->args.fentrylk.name) - FREE (stub->args.fentrylk.name); - - if (stub->args.fentrylk.fd) - fd_unref (stub->args.fentrylk.fd); - break; - } - - case GF_FOP_LOOKUP: - { - loc_wipe (&stub->args.lookup.loc); - if (stub->args.lookup.xattr_req) - dict_unref (stub->args.lookup.xattr_req); - break; - } - - case GF_FOP_SETDENTS: - { - dir_entry_t *entry, *next; - if (stub->args.setdents.fd) - fd_unref (stub->args.setdents.fd); - entry = stub->args.setdents.entries.next; - while (entry) { - next = entry->next; - FREE (entry->name); - FREE (entry); - entry = next; - } - break; - } - - case GF_FOP_CHECKSUM: - { - loc_wipe (&stub->args.checksum.loc); - break; - } - - case GF_FOP_RCHECKSUM: - { - if (stub->args.rchecksum.fd) - fd_unref (stub->args.rchecksum.fd); - break; - } - - case GF_FOP_READDIR: - { - if (stub->args.readdir.fd) - fd_unref (stub->args.readdir.fd); - break; - } - +call_resume_unwind(call_stub_t *stub) +{ + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + switch (stub->fop) { + case GF_FOP_OPEN: + STUB_UNWIND(stub, open, stub->args_cbk.fd, stub->args_cbk.xdata); + break; + case GF_FOP_CREATE: + STUB_UNWIND(stub, create, stub->args_cbk.fd, stub->args_cbk.inode, + &stub->args_cbk.stat, &stub->args_cbk.preparent, + &stub->args_cbk.postparent, stub->args_cbk.xdata); + break; + case GF_FOP_STAT: + STUB_UNWIND(stub, stat, &stub->args_cbk.stat, stub->args_cbk.xdata); + break; + case GF_FOP_READLINK: + STUB_UNWIND(stub, readlink, stub->args_cbk.buf, + &stub->args_cbk.stat, stub->args.xdata); + break; + case GF_FOP_MKNOD: + STUB_UNWIND(stub, mknod, stub->args_cbk.inode, &stub->args_cbk.stat, + &stub->args_cbk.preparent, &stub->args_cbk.postparent, + stub->args_cbk.xdata); + break; + case GF_FOP_MKDIR: + STUB_UNWIND(stub, mkdir, stub->args_cbk.inode, &stub->args_cbk.stat, + &stub->args_cbk.preparent, &stub->args_cbk.postparent, + stub->args_cbk.xdata); + break; + case GF_FOP_UNLINK: + STUB_UNWIND(stub, unlink, &stub->args_cbk.preparent, + &stub->args_cbk.postparent, stub->args_cbk.xdata); + break; + case GF_FOP_RMDIR: + STUB_UNWIND(stub, rmdir, &stub->args_cbk.preparent, + &stub->args_cbk.postparent, stub->args_cbk.xdata); + break; + case GF_FOP_SYMLINK: + STUB_UNWIND(stub, symlink, stub->args_cbk.inode, + &stub->args_cbk.stat, &stub->args_cbk.preparent, + &stub->args_cbk.postparent, stub->args_cbk.xdata); + break; + case GF_FOP_RENAME: + STUB_UNWIND(stub, rename, &stub->args_cbk.stat, + &stub->args_cbk.preparent, &stub->args_cbk.postparent, + &stub->args_cbk.preparent2, &stub->args_cbk.postparent2, + stub->args_cbk.xdata); + break; + case GF_FOP_LINK: + STUB_UNWIND(stub, link, stub->args_cbk.inode, &stub->args_cbk.stat, + &stub->args_cbk.preparent, &stub->args_cbk.postparent, + stub->args_cbk.xdata); + break; + case GF_FOP_TRUNCATE: + STUB_UNWIND(stub, truncate, &stub->args_cbk.prestat, + &stub->args_cbk.poststat, stub->args_cbk.xdata); + break; + case GF_FOP_READ: + STUB_UNWIND(stub, readv, stub->args_cbk.vector, + stub->args_cbk.count, &stub->args_cbk.stat, + stub->args_cbk.iobref, stub->args_cbk.xdata); + break; + case GF_FOP_WRITE: + STUB_UNWIND(stub, writev, &stub->args_cbk.prestat, + &stub->args_cbk.poststat, stub->args_cbk.xdata); + break; + case GF_FOP_STATFS: + STUB_UNWIND(stub, statfs, &stub->args_cbk.statvfs, + stub->args_cbk.xdata); + break; + case GF_FOP_FLUSH: + STUB_UNWIND(stub, flush, stub->args_cbk.xdata); + break; + case GF_FOP_FSYNC: + STUB_UNWIND(stub, fsync, &stub->args_cbk.prestat, + &stub->args_cbk.poststat, stub->args_cbk.xdata); + break; + case GF_FOP_SETXATTR: + STUB_UNWIND(stub, setxattr, stub->args_cbk.xdata); + break; + case GF_FOP_GETXATTR: + STUB_UNWIND(stub, getxattr, stub->args_cbk.xattr, + stub->args_cbk.xdata); + break; + case GF_FOP_FSETXATTR: + STUB_UNWIND(stub, fsetxattr, stub->args_cbk.xdata); + break; + case GF_FOP_FGETXATTR: + STUB_UNWIND(stub, fgetxattr, stub->args_cbk.xattr, + stub->args_cbk.xdata); + break; + case GF_FOP_REMOVEXATTR: + STUB_UNWIND(stub, removexattr, stub->args_cbk.xdata); + break; + case GF_FOP_FREMOVEXATTR: + STUB_UNWIND(stub, fremovexattr, stub->args_cbk.xdata); + break; + case GF_FOP_OPENDIR: + STUB_UNWIND(stub, opendir, stub->args_cbk.fd, stub->args_cbk.xdata); + break; + case GF_FOP_FSYNCDIR: + STUB_UNWIND(stub, fsyncdir, stub->args_cbk.xdata); + break; + case GF_FOP_ACCESS: + STUB_UNWIND(stub, access, stub->args_cbk.xdata); + break; + case GF_FOP_FTRUNCATE: + STUB_UNWIND(stub, ftruncate, &stub->args_cbk.prestat, + &stub->args_cbk.poststat, stub->args_cbk.xdata); + break; + case GF_FOP_FSTAT: + STUB_UNWIND(stub, fstat, &stub->args_cbk.stat, + stub->args_cbk.xdata); + break; + case GF_FOP_LK: + STUB_UNWIND(stub, lk, &stub->args_cbk.lock, stub->args_cbk.xdata); + break; + case GF_FOP_INODELK: + STUB_UNWIND(stub, inodelk, stub->args_cbk.xdata); + break; + case GF_FOP_FINODELK: + STUB_UNWIND(stub, finodelk, stub->args_cbk.xdata); + break; + case GF_FOP_ENTRYLK: + STUB_UNWIND(stub, entrylk, stub->args_cbk.xdata); + break; + case GF_FOP_FENTRYLK: + STUB_UNWIND(stub, fentrylk, stub->args_cbk.xdata); + break; + case GF_FOP_LOOKUP: + STUB_UNWIND(stub, lookup, stub->args_cbk.inode, + &stub->args_cbk.stat, stub->args_cbk.xdata, + &stub->args_cbk.postparent); + break; + case GF_FOP_RCHECKSUM: + STUB_UNWIND(stub, rchecksum, stub->args_cbk.weak_checksum, + stub->args_cbk.strong_checksum, stub->args_cbk.xdata); + break; + case GF_FOP_READDIR: + STUB_UNWIND(stub, readdir, &stub->args_cbk.entries, + stub->args_cbk.xdata); + break; case GF_FOP_READDIRP: - { - if (stub->args.readdirp.fd) - fd_unref (stub->args.readdirp.fd); - break; - } - - case GF_FOP_XATTROP: - { - loc_wipe (&stub->args.xattrop.loc); - dict_unref (stub->args.xattrop.xattr); - break; - } - case GF_FOP_FXATTROP: - { - if (stub->args.fxattrop.fd) - fd_unref (stub->args.fxattrop.fd); - dict_unref (stub->args.fxattrop.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; - } + STUB_UNWIND(stub, readdir, &stub->args_cbk.entries, + stub->args_cbk.xdata); + break; + case GF_FOP_XATTROP: + STUB_UNWIND(stub, xattrop, stub->args_cbk.xattr, + stub->args_cbk.xdata); + break; + case GF_FOP_FXATTROP: + STUB_UNWIND(stub, fxattrop, stub->args_cbk.xattr, + stub->args_cbk.xdata); + break; case GF_FOP_SETATTR: - { - loc_wipe (&stub->args.setattr.loc); - break; - } + STUB_UNWIND(stub, setattr, &stub->args_cbk.prestat, + &stub->args_cbk.poststat, stub->args_cbk.xdata); + 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", - GF_LOG_DEBUG, - "Invalid value of FOP"); - } - break; - default: - break; - } + STUB_UNWIND(stub, fsetattr, &stub->args_cbk.prestat, + &stub->args_cbk.poststat, stub->args_cbk.xdata); + break; + case GF_FOP_FALLOCATE: + STUB_UNWIND(stub, fallocate, &stub->args_cbk.prestat, + &stub->args_cbk.poststat, stub->args_cbk.xdata); + break; + case GF_FOP_DISCARD: + STUB_UNWIND(stub, discard, &stub->args_cbk.prestat, + &stub->args_cbk.poststat, stub->args_cbk.xdata); + break; + case GF_FOP_ZEROFILL: + STUB_UNWIND(stub, zerofill, &stub->args_cbk.prestat, + &stub->args_cbk.poststat, stub->args_cbk.xdata); + break; + case GF_FOP_IPC: + STUB_UNWIND(stub, ipc, stub->args_cbk.xdata); + break; + case GF_FOP_SEEK: + STUB_UNWIND(stub, seek, stub->args_cbk.offset, + stub->args_cbk.xdata); + break; + case GF_FOP_LEASE: + STUB_UNWIND(stub, lease, &stub->args_cbk.lease, + stub->args_cbk.xdata); + break; + + case GF_FOP_GETACTIVELK: + STUB_UNWIND(stub, getactivelk, &stub->args_cbk.locklist, + stub->args_cbk.xdata); + break; + + case GF_FOP_SETACTIVELK: + STUB_UNWIND(stub, setactivelk, stub->args_cbk.xdata); + break; + + case GF_FOP_PUT: + STUB_UNWIND(stub, put, stub->args_cbk.inode, &stub->args_cbk.stat, + &stub->args_cbk.preparent, &stub->args_cbk.postparent, + stub->args_cbk.xdata); + break; + + case GF_FOP_COPY_FILE_RANGE: + STUB_UNWIND(stub, copy_file_range, &stub->args_cbk.stat, + &stub->args_cbk.prestat, &stub->args_cbk.poststat, + stub->args_cbk.xdata); + break; + + default: + gf_msg_callingfn("call-stub", GF_LOG_ERROR, EINVAL, + LG_MSG_INVALID_ENTRY, + "Invalid value of FOP" + " (%d)", + stub->fop); + break; + } +out: + return; } +static void +call_stub_wipe_args(call_stub_t *stub) +{ + args_wipe(&stub->args); +} static void -call_stub_destroy_unwind (call_stub_t *stub) +call_stub_wipe_args_cbk(call_stub_t *stub) { - switch (stub->fop) { - case GF_FOP_OPEN: - { - if (stub->args.open_cbk.fd) - fd_unref (stub->args.open_cbk.fd); - } - break; - - case GF_FOP_CREATE: - { - if (stub->args.create_cbk.fd) - fd_unref (stub->args.create_cbk.fd); - - if (stub->args.create_cbk.inode) - inode_unref (stub->args.create_cbk.inode); - } - break; - - case GF_FOP_STAT: - break; - - case GF_FOP_READLINK: - { - if (stub->args.readlink_cbk.buf) - FREE (stub->args.readlink_cbk.buf); - } - break; - - case GF_FOP_MKNOD: - { - if (stub->args.mknod_cbk.inode) - inode_unref (stub->args.mknod_cbk.inode); - } - break; - - case GF_FOP_MKDIR: - { - if (stub->args.mkdir_cbk.inode) - inode_unref (stub->args.mkdir_cbk.inode); - } - break; - - case GF_FOP_UNLINK: - break; - - case GF_FOP_RMDIR: - break; - - case GF_FOP_SYMLINK: - { - if (stub->args.symlink_cbk.inode) - inode_unref (stub->args.symlink_cbk.inode); - } - break; - - case GF_FOP_RENAME: - break; - - case GF_FOP_LINK: - { - if (stub->args.link_cbk.inode) - inode_unref (stub->args.link_cbk.inode); - } - break; - - case GF_FOP_TRUNCATE: - break; - - case GF_FOP_READ: - { - if (stub->args.readv_cbk.op_ret >= 0) { - struct iobref *iobref = stub->args.readv_cbk.iobref; - FREE (stub->args.readv_cbk.vector); - - if (iobref) { - iobref_unref (iobref); - } - } - } - break; - - case GF_FOP_WRITE: - break; - - case GF_FOP_STATFS: - break; - - case GF_FOP_FLUSH: - break; - - case GF_FOP_FSYNC: - break; - - case GF_FOP_SETXATTR: - break; - - case GF_FOP_GETXATTR: - { - if (stub->args.getxattr_cbk.dict) - dict_unref (stub->args.getxattr_cbk.dict); - } - break; - - case GF_FOP_FSETXATTR: - break; - - case GF_FOP_FGETXATTR: - { - if (stub->args.fgetxattr_cbk.dict) - dict_unref (stub->args.fgetxattr_cbk.dict); - } - break; - - case GF_FOP_REMOVEXATTR: - break; - - case GF_FOP_OPENDIR: - { - if (stub->args.opendir_cbk.fd) - fd_unref (stub->args.opendir_cbk.fd); - } - break; - - case GF_FOP_GETDENTS: - { - dir_entry_t *tmp = NULL, *entries = NULL; - - entries = &stub->args.getdents_cbk.entries; - if (stub->args.getdents_cbk.op_ret >= 0) { - while (entries->next) { - tmp = entries->next; - entries->next = entries->next->next; - FREE (tmp->name); - FREE (tmp); - } - } - } - break; - - case GF_FOP_FSYNCDIR: - break; - - case GF_FOP_ACCESS: - break; - - case GF_FOP_FTRUNCATE: - break; - - case GF_FOP_FSTAT: - break; - - case GF_FOP_LK: - break; - - case GF_FOP_INODELK: - break; - - case GF_FOP_FINODELK: - break; - - case GF_FOP_ENTRYLK: - break; - - case GF_FOP_FENTRYLK: - break; - - case GF_FOP_LOOKUP: - { - 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; - - case GF_FOP_SETDENTS: - break; - - case GF_FOP_CHECKSUM: - { - if (stub->args.checksum_cbk.op_ret >= 0) { - FREE (stub->args.checksum_cbk.file_checksum); - FREE (stub->args.checksum_cbk.dir_checksum); - } - } - break; - - case GF_FOP_RCHECKSUM: - { - if (stub->args.rchecksum_cbk.op_ret >= 0) { - FREE (stub->args.rchecksum_cbk.strong_checksum); - } - } - break; - - case GF_FOP_READDIR: - { - if (stub->args.readdir_cbk.op_ret > 0) { - gf_dirent_free (&stub->args.readdir_cbk.entries); - } - } - break; + args_cbk_wipe(&stub->args_cbk); +} - case GF_FOP_READDIRP: - { - if (stub->args.readdirp_cbk.op_ret > 0) { - gf_dirent_free (&stub->args.readdirp_cbk.entries); - } - } - break; - - case GF_FOP_XATTROP: - { - if (stub->args.xattrop_cbk.xattr) - dict_unref (stub->args.xattrop_cbk.xattr); - } - break; - - case GF_FOP_FXATTROP: - { - if (stub->args.fxattrop_cbk.xattr) - dict_unref (stub->args.fxattrop_cbk.xattr); - } - break; - - case GF_FOP_SETATTR: - { - break; - } +void +call_stub_destroy(call_stub_t *stub) +{ + GF_VALIDATE_OR_GOTO("call-stub", stub, out); - case GF_FOP_FSETATTR: - { - break; - } - - case GF_FOP_MAXVALUE: - { - gf_log ("call-stub", - GF_LOG_DEBUG, - "Invalid value of FOP"); - } - break; - - default: - break; - } + if (stub->wind) + call_stub_wipe_args(stub); + else + call_stub_wipe_args_cbk(stub); + + stub->stub_mem_pool = NULL; + + mem_put(stub); +out: + return; } - void -call_stub_destroy (call_stub_t *stub) +call_resume(call_stub_t *stub) { - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); - - if (stub->wind) { - call_stub_destroy_wind (stub); - } else { - call_stub_destroy_unwind (stub); - } - - FREE (stub); + xlator_t *old_THIS = NULL; + + errno = EINVAL; + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + list_del_init(&stub->list); + + old_THIS = THIS; + THIS = stub->frame->this; + { + if (stub->wind) + call_resume_wind(stub); + else + call_resume_unwind(stub); + } + THIS = old_THIS; + + call_stub_destroy(stub); out: - return; + return; } void -call_resume (call_stub_t *stub) +call_unwind_error(call_stub_t *stub, int op_ret, int op_errno) { - xlator_t *old_THIS = NULL; + xlator_t *old_THIS = NULL; - errno = EINVAL; - GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + list_del_init(&stub->list); - list_del_init (&stub->list); + old_THIS = THIS; + THIS = stub->frame->this; + { + stub->args_cbk.op_ret = op_ret; + stub->args_cbk.op_errno = op_errno; + call_resume_unwind(stub); + } + THIS = old_THIS; - old_THIS = THIS; - THIS = stub->frame->this; - { - if (stub->wind) - call_resume_wind (stub); - else - call_resume_unwind (stub); - } - THIS = old_THIS; + call_stub_destroy(stub); - call_stub_destroy (stub); -out: - return; + return; } +void +call_unwind_error_keep_stub(call_stub_t *stub, int op_ret, int op_errno) +{ + xlator_t *old_THIS = NULL; + + list_del_init(&stub->list); + + old_THIS = THIS; + THIS = stub->frame->this; + { + stub->args_cbk.op_ret = op_ret; + stub->args_cbk.op_errno = op_errno; + call_resume_unwind(stub); + } + + THIS = old_THIS; + + return; +} +void +call_resume_keep_stub(call_stub_t *stub) +{ + xlator_t *old_THIS = NULL; + + errno = EINVAL; + GF_VALIDATE_OR_GOTO("call-stub", stub, out); + + list_del_init(&stub->list); + + old_THIS = THIS; + THIS = stub->frame->this; + { + if (stub->wind) + call_resume_wind(stub); + else + call_resume_unwind(stub); + } + + THIS = old_THIS; + +out: + return; +} |
