/* Copyright (c) 2008-2015 Red Hat, Inc. 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 "glusterfs/defaults.h" int args_lookup_store(default_args_t *args, loc_t *loc, dict_t *xdata) { loc_copy(&args->loc, loc); if (xdata) args->xdata = dict_ref(xdata); return 0; } 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_store(default_args_t *args, loc_t *loc, dict_t *xdata) { loc_copy(&args->loc, loc); 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_store(default_args_t *args, fd_t *fd, dict_t *xdata) { if (fd) args->fd = fd_ref(fd); 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_store(default_args_t *args, loc_t *loc, off_t off, dict_t *xdata) { loc_copy(&args->loc, loc); args->offset = off; 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_store(default_args_t *args, fd_t *fd, off_t off, dict_t *xdata) { if (fd) args->fd = fd_ref(fd); args->offset = off; 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_store(default_args_t *args, loc_t *loc, int32_t mask, dict_t *xdata) { loc_copy(&args->loc, loc); args->mask = mask; 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_store(default_args_t *args, loc_t *loc, size_t size, dict_t *xdata) { loc_copy(&args->loc, loc); args->size = size; 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_store(default_args_t *args, loc_t *loc, mode_t mode, dev_t rdev, mode_t umask, dict_t *xdata) { loc_copy(&args->loc, loc); args->mode = mode; args->rdev = rdev; args->umask = umask; 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_store(default_args_t *args, loc_t *loc, mode_t mode, mode_t umask, dict_t *xdata) { loc_copy(&args->loc, loc); args->mode = mode; args->umask = umask; 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_store(default_args_t *args, loc_t *loc, int xflag, dict_t *xdata) { loc_copy(&args->loc, loc); args->xflag = xflag; 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_store(default_args_t *args, loc_t *loc, int flags, dict_t *xdata) { loc_copy(&args->loc, loc); args->flags = flags; 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_store(default_args_t *args, const char *linkname, loc_t *loc, mode_t umask, dict_t *xdata) { args->linkname = gf_strdup(linkname); args->umask = umask; loc_copy(&args->loc, loc); 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_store(default_args_t *args, loc_t *oldloc, loc_t *newloc, dict_t *xdata) { loc_copy(&args->loc, oldloc); loc_copy(&args->loc2, newloc); 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_store(default_args_t *args, loc_t *oldloc, loc_t *newloc, dict_t *xdata) { loc_copy(&args->loc, oldloc); loc_copy(&args->loc2, newloc); 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_store(default_args_t *args, loc_t *loc, int32_t flags, mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata) { loc_copy(&args->loc, loc); args->flags = flags; args->mode = mode; args->umask = umask; if (fd) args->fd = fd_ref(fd); 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_store(default_args_t *args, loc_t *loc, int32_t flags, fd_t *fd, dict_t *xdata) { loc_copy(&args->loc, loc); args->flags = flags; if (fd) args->fd = fd_ref(fd); 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_store(default_args_t *args, fd_t *fd, size_t size, off_t off, uint32_t flags, dict_t *xdata) { if (fd) args->fd = fd_ref(fd); args->size = size; args->offset = off; args->flags = flags; 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_store(default_args_t *args, fd_t *fd, struct iovec *vector, int32_t count, off_t off, uint32_t flags, struct iobref *iobref, dict_t *xdata) { if (fd) args->fd = fd_ref(fd); args->vector = iov_dup(vector, count); args->count = count; args->offset = off; args->flags = flags; 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_put_store(default_args_t *args, loc_t *loc, mode_t mode, mode_t umask, uint32_t flags, struct iovec *vector, int32_t count, off_t off, struct iobref *iobref, dict_t *xattr, dict_t *xdata) { loc_copy(&args->loc, loc); args->mode = mode; args->umask = umask; args->flags = flags; args->vector = iov_dup(vector, count); args->count = count; args->offset = off; args->iobref = iobref_ref(iobref); if (xattr) args->xattr = dict_ref(xattr); if (xdata) args->xdata = dict_ref(xdata); return 0; } int args_put_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 (op_ret >= 0) args->stat = *buf; if (inode) args->inode = inode_ref(inode); if (preparent) args->preparent = *preparent; if (postparent) args->postparent = *postparent; if (xdata) args->xdata = dict_ref(xdata); return 0; } int args_flush_store(default_args_t *args, fd_t *fd, dict_t *xdata) { if (fd) args->fd = fd_ref(fd); 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_store(default_args_t *args, fd_t *fd, int32_t datasync, dict_t *xdata) { if (fd) args->fd = fd_ref(fd); args->datasync = datasync; 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_store(default_args_t *args, loc_t *loc, fd_t *fd, dict_t *xdata) { loc_copy(&args->loc, loc); if (fd) args->fd = fd_ref(fd); 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_store(default_args_t *args, fd_t *fd, int32_t datasync, dict_t *xdata) { if (fd) args->fd = fd_ref(fd); args->datasync = datasync; 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_store(default_args_t *args, loc_t *loc, dict_t *xdata) { loc_copy(&args->loc, loc); 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_store(default_args_t *args, loc_t *loc, dict_t *dict, int32_t flags, dict_t *xdata) { loc_copy(&args->loc, loc); /* TODO */ if (dict) args->xattr = dict_ref(dict); args->flags = flags; 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_store(default_args_t *args, loc_t *loc, const char *name, dict_t *xdata) { loc_copy(&args->loc, loc); if (name) args->name = gf_strdup(name); 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_store(default_args_t *args, fd_t *fd, dict_t *dict, int32_t flags, dict_t *xdata) { args->fd = fd_ref(fd); if (dict) args->xattr = dict_ref(dict); args->flags = flags; 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_store(default_args_t *args, fd_t *fd, const char *name, dict_t *xdata) { args->fd = fd_ref(fd); if (name) args->name = gf_strdup(name); 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_store(default_args_t *args, loc_t *loc, const char *name, dict_t *xdata) { loc_copy(&args->loc, loc); args->name = gf_strdup(name); 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_store(default_args_t *args, fd_t *fd, const char *name, dict_t *xdata) { args->fd = fd_ref(fd); args->name = gf_strdup(name); 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_store(default_args_t *args, fd_t *fd, int32_t cmd, struct gf_flock *lock, dict_t *xdata) { if (fd) args->fd = fd_ref(fd); args->cmd = cmd; args->lock = *lock; 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_store(default_args_t *args, const char *volume, loc_t *loc, int32_t cmd, struct gf_flock *lock, dict_t *xdata) { if (volume) args->volume = gf_strdup(volume); loc_copy(&args->loc, loc); args->cmd = cmd; 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_store(default_args_t *args, const char *volume, fd_t *fd, int32_t cmd, struct gf_flock *lock, dict_t *xdata) { if (fd) args->fd = fd_ref(fd); if (volume) args->volume = gf_strdup(volume); args->cmd = cmd; args->lock = *lock; 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_store(default_args_t *args, const char *volume, loc_t *loc, const char *name, entrylk_cmd cmd, entrylk_type type, dict_t *xdata) { if (volume) args->volume = gf_strdup(volume); loc_copy(&args->loc, loc); args->entrylkcmd = cmd; args->entrylktype = type; if (name) args->name = gf_strdup(name); 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_store(default_args_t *args, const char *volume, fd_t *fd, const char *name, entrylk_cmd cmd, entrylk_type type, dict_t *xdata) { if (volume) args->volume = gf_strdup(volume); if (fd) args->fd = fd_ref(fd); args->entrylkcmd = cmd; args->entrylktype = type; if (name) args->name = gf_strdup(name); 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_store(default_args_t *args, fd_t *fd, size_t size, off_t off, dict_t *xdata) { args->fd = fd_ref(fd); args->size = size; args->offset = off; 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_store(default_args_t *args, fd_t *fd, size_t size, off_t off, dict_t *xdata) { args->fd = fd_ref(fd); args->size = size; args->offset = off; if (xdata) args->xdata = dict_ref(xdata); 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_store(default_args_t *args, fd_t *fd, off_t offset, int32_t len, dict_t *xdata) { args->fd = fd_ref(fd); args->offset = offset; args->size = len; if (xdata) args->xdata = dict_ref(xdata); 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 = gf_memdup(strong_checksum, SHA256_DIGEST_LENGTH); } if (xdata) args->xdata = dict_ref(xdata); return 0; } int args_xattrop_store(default_args_t *args, loc_t *loc, gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata) { loc_copy(&args->loc, loc); args->optype = optype; args->xattr = dict_ref(xattr); 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_store(default_args_t *args, fd_t *fd, gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata) { args->fd = fd_ref(fd); args->optype = optype; 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_store(default_args_t *args, loc_t *loc, struct iatt *stbuf, int32_t valid, dict_t *xdata) { loc_copy(&args->loc, loc); if (stbuf) args->stat = *stbuf; args->valid = valid; 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_store(default_args_t *args, fd_t *fd, struct iatt *stbuf, int32_t valid, dict_t *xdata) { if (fd) args->fd = fd_ref(fd); if (stbuf) args->stat = *stbuf; args->valid = valid; 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_store(default_args_t *args, fd_t *fd, int32_t mode, off_t offset, size_t len, dict_t *xdata) { if (fd) args->fd = fd_ref(fd); args->flags = mode; args->offset = offset; args->size = len; 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_store(default_args_t *args, fd_t *fd, off_t offset, size_t len, dict_t *xdata) { if (fd) args->fd = fd_ref(fd); args->offset = offset; args->size = len; 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_store(default_args_t *args, fd_t *fd, off_t offset, off_t len, dict_t *xdata) { if (fd) args->fd = fd_ref(fd); args->offset = offset; args->size = len; 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_store(default_args_t *args, int32_t op, dict_t *xdata) { args->cmd = op; 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; } int args_seek_store(default_args_t *args, fd_t *fd, off_t offset, gf_seek_what_t what, dict_t *xdata) { if (fd) args->fd = fd_ref(fd); args->offset = offset; args->what = what; if (xdata) args->xdata = dict_ref(xdata); return 0; } int args_seek_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno, off_t offset, dict_t *xdata) { args->op_ret = op_ret; args->op_errno = op_errno; args->offset = offset; if (xdata) args->xdata = dict_ref(xdata); return 0; } int args_getactivelk_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno, lock_migration_info_t *locklist, dict_t *xdata) { lock_migration_info_t *stub_entry = NULL, *entry = NULL; int ret = 0; args->op_ret = op_ret; args->op_errno = op_errno; /*op_ret needs to carry the number of locks present in the list*/ if (op_ret > 0) { list_for_each_entry(entry, &locklist->list, list) { stub_entry = GF_CALLOC(1, sizeof(*stub_entry), gf_common_mt_char); if (!stub_entry) { ret = -1; goto out; } INIT_LIST_HEAD(&stub_entry->list); stub_entry->flock = entry->flock; stub_entry->lk_flags = entry->lk_flags; stub_entry->client_uid = gf_strdup(entry->client_uid); if (!stub_entry->client_uid) { GF_FREE(stub_entry); ret = -1; goto out; } list_add_tail(&stub_entry->list, &args->locklist.list); } } if (xdata) args->xdata = dict_ref(xdata); out: return ret; } int args_setactivelk_store(default_args_t *args, loc_t *loc, lock_migration_info_t *locklist, dict_t *xdata) { lock_migration_info_t *stub_entry = NULL, *entry = NULL; int ret = 0; list_for_each_entry(entry, &locklist->list, list) { stub_entry = GF_CALLOC(1, sizeof(*stub_entry), gf_common_mt_lock_mig); if (!stub_entry) { ret = -1; goto out; } INIT_LIST_HEAD(&stub_entry->list); stub_entry->flock = entry->flock; stub_entry->lk_flags = entry->lk_flags; stub_entry->client_uid = gf_strdup(entry->client_uid); if (!stub_entry->client_uid) { GF_FREE(stub_entry); ret = -1; goto out; } list_add_tail(&stub_entry->list, &args->locklist.list); } loc_copy(&args->loc, loc); if (xdata) args->xdata = dict_ref(xdata); out: return ret; } void args_lease_store(default_args_t *args, loc_t *loc, struct gf_lease *lease, dict_t *xdata) { loc_copy(&args->loc, loc); args->lease = *lease; if (xdata) args->xdata = dict_ref(xdata); return; } void args_lease_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno, struct gf_lease *lease, dict_t *xdata) { args->op_ret = op_ret; args->op_errno = op_errno; if (op_ret == 0) args->lease = *lease; if (xdata) args->xdata = dict_ref(xdata); } int args_icreate_store(default_args_t *args, loc_t *loc, mode_t mode, dict_t *xdata) { loc_copy(&args->loc, loc); args->mode = mode; if (xdata) args->xdata = dict_ref(xdata); return 0; } int args_namelink_store(default_args_t *args, loc_t *loc, dict_t *xdata) { loc_copy(&args->loc, loc); if (xdata) args->xdata = dict_ref(xdata); return 0; } int args_copy_file_range_store(default_args_t *args, 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) { if (fd_in) args->fd = fd_ref(fd_in); if (fd_out) args->fd_dst = fd_ref(fd_out); args->size = len; args->off_in = off_in; args->off_out = off_out; args->flags = flags; if (xdata) args->xdata = dict_ref(xdata); return 0; } int args_copy_file_range_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno, struct iatt *stbuf, struct iatt *prebuf_dst, struct iatt *postbuf_dst, dict_t *xdata) { args->op_ret = op_ret; args->op_errno = op_errno; if (op_ret >= 0) { if (postbuf_dst) args->poststat = *postbuf_dst; if (prebuf_dst) args->prestat = *prebuf_dst; if (stbuf) args->stat = *stbuf; } 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); } void args_wipe(default_args_t *args) { if (!args) return; loc_wipe(&args->loc); loc_wipe(&args->loc2); if (args->fd) fd_unref(args->fd); GF_FREE((char *)args->linkname); GF_FREE(args->vector); if (args->iobref) iobref_unref(args->iobref); if (args->xattr) dict_unref(args->xattr); if (args->xdata) dict_unref(args->xdata); GF_FREE((char *)args->name); GF_FREE((char *)args->volume); } void args_cbk_init(default_args_cbk_t *args_cbk) { INIT_LIST_HEAD(&args_cbk->entries); }