summaryrefslogtreecommitdiffstats
path: root/libglusterfs/src/default-args.c
diff options
context:
space:
mode:
Diffstat (limited to 'libglusterfs/src/default-args.c')
-rw-r--r--libglusterfs/src/default-args.c825
1 files changed, 825 insertions, 0 deletions
diff --git a/libglusterfs/src/default-args.c b/libglusterfs/src/default-args.c
new file mode 100644
index 00000000000..216e2b6c9a3
--- /dev/null
+++ b/libglusterfs/src/default-args.c
@@ -0,0 +1,825 @@
+/*
+ Copyright (c) 2008-2015 Red Hat, Inc. <http://www.redhat.com>
+ This file is part of GlusterFS.
+
+ 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 "xlator.h"
+#include "defaults.h"
+
+int
+args_lookup_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ inode_t *inode, struct iatt *buf,
+ dict_t *xdata, struct iatt *postparent)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (inode)
+ args->inode = inode_ref (inode);
+ if (buf)
+ args->stat = *buf;
+ if (postparent)
+ args->postparent = *postparent;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+
+int
+args_stat_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ struct iatt *buf, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (op_ret == 0)
+ args->stat = *buf;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_fstat_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ struct iatt *buf, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (buf)
+ args->stat = *buf;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_truncate_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno, struct iatt *prebuf,
+ struct iatt *postbuf, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (prebuf)
+ args->prestat = *prebuf;
+ if (postbuf)
+ args->poststat = *postbuf;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+
+int
+args_ftruncate_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno, struct iatt *prebuf,
+ struct iatt *postbuf, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (prebuf)
+ args->prestat = *prebuf;
+ if (postbuf)
+ args->poststat = *postbuf;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+
+int
+args_access_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+
+int
+args_readlink_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ const char *path, struct iatt *stbuf, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (path)
+ args->buf = gf_strdup (path);
+ if (stbuf)
+ args->stat = *stbuf;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_mknod_cbk_store (default_args_cbk_t *args, int op_ret,
+ int32_t op_errno, inode_t *inode, struct iatt *buf,
+ struct iatt *preparent, struct iatt *postparent,
+ 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 (preparent)
+ args->preparent = *preparent;
+ if (postparent)
+ args->postparent = *postparent;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_mkdir_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno, inode_t *inode,
+ struct iatt *buf, struct iatt *preparent,
+ struct iatt *postparent, 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 (preparent)
+ args->preparent = *preparent;
+ if (postparent)
+ args->postparent = *postparent;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_unlink_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ struct iatt *preparent, struct iatt *postparent,
+ dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (preparent)
+ args->preparent = *preparent;
+ if (postparent)
+ args->postparent = *postparent;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_rmdir_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ struct iatt *preparent, struct iatt *postparent,
+ dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (preparent)
+ args->preparent = *preparent;
+ if (postparent)
+ args->postparent = *postparent;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_symlink_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ inode_t *inode, struct iatt *buf,
+ struct iatt *preparent, struct iatt *postparent,
+ 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 (preparent)
+ args->preparent = *preparent;
+ if (postparent)
+ args->postparent = *postparent;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+
+int
+args_rename_cbk_store (default_args_cbk_t *args,
+ 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)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (buf)
+ args->stat = *buf;
+ if (preoldparent)
+ args->preparent = *preoldparent;
+ if (postoldparent)
+ args->postparent = *postoldparent;
+ if (prenewparent)
+ args->preparent2 = *prenewparent;
+ if (postnewparent)
+ args->postparent2 = *postnewparent;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_link_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ inode_t *inode, struct iatt *buf,
+ struct iatt *preparent, struct iatt *postparent,
+ 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 (preparent)
+ args->preparent = *preparent;
+ if (postparent)
+ args->postparent = *postparent;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_create_cbk_store (default_args_cbk_t *args,
+ 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)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (fd)
+ args->fd = fd_ref (fd);
+ if (inode)
+ args->inode = inode_ref (inode);
+ if (buf)
+ args->stat = *buf;
+ if (preparent)
+ args->preparent = *preparent;
+ if (postparent)
+ args->postparent = *postparent;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_open_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ fd_t *fd, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (fd)
+ args->fd = fd_ref (fd);
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_readv_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno, struct iovec *vector,
+ int32_t count, struct iatt *stbuf,
+ struct iobref *iobref, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (op_ret >= 0) {
+ args->vector = iov_dup (vector, count);
+ args->count = count;
+ args->stat = *stbuf;
+ args->iobref = iobref_ref (iobref);
+ }
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_writev_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (op_ret >= 0)
+ args->poststat = *postbuf;
+ if (prebuf)
+ args->prestat = *prebuf;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+
+int
+args_flush_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+
+int
+args_fsync_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (prebuf)
+ args->prestat = *prebuf;
+ if (postbuf)
+ args->poststat = *postbuf;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_opendir_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ fd_t *fd, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (fd)
+ args->fd = fd_ref (fd);
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_fsyncdir_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_statfs_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ struct statvfs *buf, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (op_ret == 0)
+ args->statvfs = *buf;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_setxattr_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret,
+ int32_t op_errno, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_getxattr_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ dict_t *dict, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (dict)
+ args->xattr = dict_ref (dict);
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_fsetxattr_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_fgetxattr_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ dict_t *dict, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (dict)
+ args->xattr = dict_ref (dict);
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_removexattr_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_fremovexattr_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_lk_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ struct gf_flock *lock, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (op_ret == 0)
+ args->lock = *lock;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+
+int
+args_inodelk_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_finodelk_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_entrylk_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_fentrylk_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+
+int
+args_readdirp_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ gf_dirent_t *entries, dict_t *xdata)
+{
+ gf_dirent_t *stub_entry = NULL, *entry = NULL;
+
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (op_ret > 0) {
+ list_for_each_entry (entry, &entries->list, list) {
+ stub_entry = gf_dirent_for_name (entry->d_name);
+ if (!stub_entry)
+ goto out;
+ stub_entry->d_off = entry->d_off;
+ stub_entry->d_ino = entry->d_ino;
+ stub_entry->d_stat = entry->d_stat;
+ stub_entry->d_type = entry->d_type;
+ if (entry->inode)
+ stub_entry->inode = inode_ref (entry->inode);
+ if (entry->dict)
+ stub_entry->dict = dict_ref (entry->dict);
+ list_add_tail (&stub_entry->list,
+ &args->entries.list);
+ }
+ }
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+out:
+ return 0;
+}
+
+
+int
+args_readdir_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ gf_dirent_t *entries, dict_t *xdata)
+{
+ gf_dirent_t *stub_entry = NULL, *entry = NULL;
+
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (op_ret > 0) {
+ list_for_each_entry (entry, &entries->list, list) {
+ stub_entry = gf_dirent_for_name (entry->d_name);
+ if (!stub_entry)
+ goto out;
+ stub_entry->d_off = entry->d_off;
+ stub_entry->d_ino = entry->d_ino;
+ stub_entry->d_type = entry->d_type;
+ list_add_tail (&stub_entry->list,
+ &args->entries.list);
+ }
+ }
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+out:
+ return 0;
+}
+
+
+int
+args_rchecksum_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ uint32_t weak_checksum, uint8_t *strong_checksum,
+ dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (op_ret >= 0) {
+ args->weak_checksum =
+ weak_checksum;
+ args->strong_checksum =
+ memdup (strong_checksum, MD5_DIGEST_LENGTH);
+ }
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+
+int
+args_xattrop_cbk_store (default_args_cbk_t *args, int32_t op_ret,
+ int32_t op_errno, dict_t *xattr, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (xattr)
+ args->xattr = dict_ref (xattr);
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+
+int
+args_fxattrop_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ dict_t *xattr, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (xattr)
+ args->xattr = dict_ref (xattr);
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_setattr_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ struct iatt *statpre, struct iatt *statpost,
+ dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (statpre)
+ args->prestat = *statpre;
+ if (statpost)
+ args->poststat = *statpost;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+
+int
+args_fsetattr_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ struct iatt *statpre, struct iatt *statpost,
+ dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (statpre)
+ args->prestat = *statpre;
+ if (statpost)
+ args->poststat = *statpost;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_fallocate_cbk_store(default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ struct iatt *statpre, struct iatt *statpost,
+ dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (statpre)
+ args->prestat = *statpre;
+ if (statpost)
+ args->poststat = *statpost;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_discard_cbk_store(default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ struct iatt *statpre, struct iatt *statpost,
+ dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (statpre)
+ args->prestat = *statpre;
+ if (statpost)
+ args->poststat = *statpost;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_zerofill_cbk_store(default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno,
+ struct iatt *statpre, struct iatt *statpost,
+ dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (statpre)
+ args->prestat = *statpre;
+ if (statpost)
+ args->poststat = *statpost;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+int
+args_ipc_cbk_store (default_args_cbk_t *args,
+ int32_t op_ret, int32_t op_errno, dict_t *xdata)
+{
+ args->op_ret = op_ret;
+ args->op_errno = op_errno;
+ if (xdata)
+ args->xdata = dict_ref (xdata);
+
+ return 0;
+}
+
+void
+args_cbk_wipe (default_args_cbk_t *args_cbk)
+{
+ if (!args_cbk)
+ return;
+ if (args_cbk->inode)
+ inode_unref (args_cbk->inode);
+
+ GF_FREE ((char *)args_cbk->buf);
+
+ GF_FREE (args_cbk->vector);
+
+ if (args_cbk->iobref)
+ iobref_unref (args_cbk->iobref);
+
+ if (args_cbk->fd)
+ fd_unref (args_cbk->fd);
+
+ if (args_cbk->xattr)
+ dict_unref (args_cbk->xattr);
+
+ GF_FREE (args_cbk->strong_checksum);
+
+ if (args_cbk->xdata)
+ dict_unref (args_cbk->xdata);
+
+ if (!list_empty (&args_cbk->entries.list))
+ gf_dirent_free (&args_cbk->entries);
+}