summaryrefslogtreecommitdiffstats
path: root/xlators/protocol/server/src/server-helpers.c
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/protocol/server/src/server-helpers.c')
-rw-r--r--xlators/protocol/server/src/server-helpers.c4166
1 files changed, 0 insertions, 4166 deletions
diff --git a/xlators/protocol/server/src/server-helpers.c b/xlators/protocol/server/src/server-helpers.c
index 1a34239d8b9..f6edf3f5120 100644
--- a/xlators/protocol/server/src/server-helpers.c
+++ b/xlators/protocol/server/src/server-helpers.c
@@ -19,7 +19,6 @@
#include <fnmatch.h>
#include <pwd.h>
-#include <glusterfs/compound-fop-utils.h>
/* based on nfs_fix_aux_groups() */
int
@@ -210,8 +209,6 @@ free_state(server_state_t *state)
server_resolve_wipe(&state->resolve);
server_resolve_wipe(&state->resolve2);
- compound_args_cleanup(state->args);
-
/* Call rpc_trnasport_unref to avoid crashes at last after free
all resources because of server_rpc_notify (for transport destroy)
call's xlator_mem_cleanup if all xprt are destroyed that internally
@@ -1540,4166 +1537,3 @@ unserialize_req_locklist_v2(gfx_setactivelk_req *req,
out:
return ret;
}
-
-int
-server_populate_compound_request(gfs3_compound_req *req, call_frame_t *frame,
- default_args_t *this_args, int index)
-{
- int op_errno = 0;
- int ret = -1;
- dict_t *xdata = NULL;
- dict_t *xattr = NULL;
- struct iovec req_iovec[MAX_IOVEC] = {{
- 0,
- }};
- compound_req *this_req = NULL;
- server_state_t *state = CALL_STATE(frame);
-
- this_req = &req->compound_req_array.compound_req_array_val[index];
-
- switch (this_req->fop_enum) {
- case GF_FOP_STAT: {
- gfs3_stat_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_stat_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_stat_store(this_args, &state->loc, xdata);
- break;
- }
- case GF_FOP_READLINK: {
- gfs3_readlink_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_readlink_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_readlink_store(this_args, &state->loc, args->size, xdata);
- break;
- }
- case GF_FOP_MKNOD: {
- gfs3_mknod_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_mknod_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_mknod_store(this_args, &state->loc, args->mode, args->dev,
- args->umask, xdata);
- break;
- }
- case GF_FOP_MKDIR: {
- gfs3_mkdir_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_mkdir_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_mkdir_store(this_args, &state->loc, args->mode, args->umask,
- xdata);
- break;
- }
- case GF_FOP_UNLINK: {
- gfs3_unlink_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_unlink_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_unlink_store(this_args, &state->loc, args->xflags, xdata);
- break;
- }
- case GF_FOP_RMDIR: {
- gfs3_rmdir_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_rmdir_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_rmdir_store(this_args, &state->loc, args->xflags, xdata);
- break;
- }
- case GF_FOP_SYMLINK: {
- gfs3_symlink_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_symlink_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_symlink_store(this_args, args->linkname, &state->loc,
- args->umask, xdata);
-
- this_args->loc.inode = inode_new(state->itable);
-
- break;
- }
- case GF_FOP_RENAME: {
- gfs3_rename_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_rename_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
-
- args_rename_store(this_args, &state->loc, &state->loc2, xdata);
- break;
- }
- case GF_FOP_LINK: {
- gfs3_link_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_link_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_link_store(this_args, &state->loc, &state->loc2, xdata);
-
- this_args->loc2.inode = inode_ref(this_args->loc.inode);
-
- break;
- }
- case GF_FOP_TRUNCATE: {
- gfs3_truncate_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_truncate_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_truncate_store(this_args, &state->loc, args->offset, xdata);
- break;
- }
- case GF_FOP_OPEN: {
- gfs3_open_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_open_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_open_store(this_args, &state->loc, args->flags, state->fd,
- xdata);
-
- this_args->fd = fd_create(this_args->loc.inode, frame->root->pid);
- this_args->fd->flags = this_args->flags;
-
- break;
- }
- case GF_FOP_READ: {
- gfs3_read_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_read_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_readv_store(this_args, state->fd, args->size, args->offset,
- args->flag, xdata);
- break;
- }
- case GF_FOP_WRITE: {
- gfs3_write_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_write_req;
-
- /*TODO : What happens when payload count is more than one? */
- req_iovec[0].iov_base = state->payload_vector[0].iov_base +
- state->write_length;
- req_iovec[0].iov_len = args->size;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- /* The way writev fop works :
- * xdr args of write along with other args contains
- * write length not count. But when the call is wound to posix,
- * this length is not used. It is taken from the request
- * write vector that is passed down. Posix needs the vector
- * count to determine the amount of write to be done.
- * This count for writes that come as part of compound fops
- * will be 1. The vectors are merged into one under
- * GF_FOP_WRITE section of client_handle_fop_requirements()
- * in protocol client.
- */
- args_writev_store(this_args, state->fd, req_iovec, 1, args->offset,
- args->flag, state->iobref, xdata);
- state->write_length += req_iovec[0].iov_len;
- break;
- }
- case GF_FOP_STATFS: {
- gfs3_statfs_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_statfs_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_statfs_store(this_args, &state->loc, xdata);
- break;
- }
- case GF_FOP_FLUSH: {
- gfs3_flush_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_flush_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_flush_store(this_args, state->fd, xdata);
- break;
- }
- case GF_FOP_FSYNC: {
- gfs3_fsync_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_fsync_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_fsync_store(this_args, state->fd, args->data, xdata);
- break;
- }
- case GF_FOP_SETXATTR: {
- gfs3_setxattr_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_setxattr_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xattr, args->dict.dict_val,
- args->dict.dict_len, ret, op_errno, out);
- args_setxattr_store(this_args, &state->loc, xattr, args->flags,
- xdata);
- break;
- }
- case GF_FOP_GETXATTR: {
- gfs3_getxattr_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_getxattr_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- gf_server_check_getxattr_cmd(frame, args->name);
-
- args_getxattr_store(this_args, &state->loc, args->name, xdata);
- break;
- }
- case GF_FOP_REMOVEXATTR: {
- gfs3_removexattr_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_removexattr_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_removexattr_store(this_args, &state->loc, args->name, xdata);
- break;
- }
- case GF_FOP_OPENDIR: {
- gfs3_opendir_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_opendir_req;
-
- this_args->fd = fd_create(this_args->loc.inode, frame->root->pid);
- if (!this_args->fd) {
- gf_msg("server", GF_LOG_ERROR, 0, PS_MSG_FD_CREATE_FAILED,
- "could not create the fd");
- goto out;
- }
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_opendir_store(this_args, &state->loc, state->fd, xdata);
- break;
- }
- case GF_FOP_FSYNCDIR: {
- gfs3_fsyncdir_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_fsyncdir_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_fsyncdir_store(this_args, state->fd, args->data, xdata);
- break;
- }
- case GF_FOP_ACCESS: {
- gfs3_access_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_access_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_access_store(this_args, &state->loc, args->mask, xdata);
- break;
- }
- case GF_FOP_CREATE: {
- gfs3_create_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_create_req;
-
- state->loc.inode = inode_new(state->itable);
-
- state->fd = fd_create(state->loc.inode, frame->root->pid);
- if (!state->fd) {
- gf_msg("server", GF_LOG_ERROR, 0, PS_MSG_FD_CREATE_FAILED,
- "fd creation for the inode %s failed",
- state->loc.inode ? uuid_utoa(state->loc.inode->gfid)
- : NULL);
- goto out;
- }
- state->fd->flags = state->flags;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_create_store(this_args, &state->loc, args->flags, args->mode,
- args->umask, state->fd, xdata);
- break;
- }
- case GF_FOP_FTRUNCATE: {
- gfs3_ftruncate_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_ftruncate_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_ftruncate_store(this_args, state->fd, args->offset, xdata);
- break;
- }
- case GF_FOP_FSTAT: {
- gfs3_fstat_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_fstat_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_fstat_store(this_args, state->fd, xdata);
- break;
- }
- case GF_FOP_LK: {
- gfs3_lk_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_lk_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
-
- switch (args->cmd) {
- case GF_LK_GETLK:
- this_args->cmd = F_GETLK;
- break;
- case GF_LK_SETLK:
- this_args->cmd = F_SETLK;
- break;
- case GF_LK_SETLKW:
- this_args->cmd = F_SETLKW;
- break;
- case GF_LK_RESLK_LCK:
- this_args->cmd = F_RESLK_LCK;
- break;
- case GF_LK_RESLK_LCKW:
- this_args->cmd = F_RESLK_LCKW;
- break;
- case GF_LK_RESLK_UNLCK:
- this_args->cmd = F_RESLK_UNLCK;
- break;
- case GF_LK_GETLK_FD:
- this_args->cmd = F_GETLK_FD;
- break;
- }
-
- gf_proto_flock_to_flock(&args->flock, &this_args->lock);
-
- switch (args->type) {
- case GF_LK_F_RDLCK:
- this_args->lock.l_type = F_RDLCK;
- break;
- case GF_LK_F_WRLCK:
- this_args->lock.l_type = F_WRLCK;
- break;
- case GF_LK_F_UNLCK:
- this_args->lock.l_type = F_UNLCK;
- break;
- default:
- gf_msg(frame->root->client->bound_xl->name, GF_LOG_ERROR, 0,
- PS_MSG_LOCK_ERROR,
- "fd - %" PRId64
- " (%s):"
- " Unknown "
- "lock type: %" PRId32 "!",
- state->resolve.fd_no,
- uuid_utoa(state->fd->inode->gfid), args->type);
- break;
- }
- args_lk_store(this_args, state->fd, this_args->cmd,
- &this_args->lock, xdata);
- break;
- }
- case GF_FOP_LOOKUP: {
- gfs3_lookup_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_lookup_req;
-
- if (this_args->loc.inode)
- this_args->loc.inode = server_inode_new(state->itable,
- state->loc.gfid);
- else
- state->is_revalidate = 1;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_lookup_store(this_args, &state->loc, xdata);
- break;
- }
- case GF_FOP_READDIR: {
- gfs3_readdir_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_readdir_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_readdir_store(this_args, state->fd, args->size, args->offset,
- xdata);
- break;
- }
- case GF_FOP_INODELK: {
- gfs3_inodelk_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_inodelk_req;
-
- switch (args->cmd) {
- case GF_LK_GETLK:
- this_args->cmd = F_GETLK;
- break;
- case GF_LK_SETLK:
- this_args->cmd = F_SETLK;
- break;
- case GF_LK_SETLKW:
- this_args->cmd = F_SETLKW;
- break;
- }
-
- gf_proto_flock_to_flock(&args->flock, &this_args->lock);
-
- switch (args->type) {
- case GF_LK_F_RDLCK:
- this_args->lock.l_type = F_RDLCK;
- break;
- case GF_LK_F_WRLCK:
- this_args->lock.l_type = F_WRLCK;
- break;
- case GF_LK_F_UNLCK:
- this_args->lock.l_type = F_UNLCK;
- break;
- }
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_inodelk_store(this_args, args->volume, &state->loc,
- this_args->cmd, &this_args->lock, xdata);
- break;
- }
- case GF_FOP_FINODELK: {
- gfs3_finodelk_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_finodelk_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
-
- switch (args->cmd) {
- case GF_LK_GETLK:
- this_args->cmd = F_GETLK;
- break;
- case GF_LK_SETLK:
- this_args->cmd = F_SETLK;
- break;
- case GF_LK_SETLKW:
- this_args->cmd = F_SETLKW;
- break;
- }
-
- gf_proto_flock_to_flock(&args->flock, &this_args->lock);
-
- switch (args->type) {
- case GF_LK_F_RDLCK:
- this_args->lock.l_type = F_RDLCK;
- break;
- case GF_LK_F_WRLCK:
- this_args->lock.l_type = F_WRLCK;
- break;
- case GF_LK_F_UNLCK:
- this_args->lock.l_type = F_UNLCK;
- break;
- }
- args_finodelk_store(this_args, args->volume, state->fd,
- this_args->cmd, &this_args->lock, xdata);
- break;
- }
- case GF_FOP_ENTRYLK: {
- gfs3_entrylk_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_entrylk_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_entrylk_store(this_args, args->volume, &state->loc, args->name,
- args->cmd, args->type, xdata);
- break;
- }
- case GF_FOP_FENTRYLK: {
- gfs3_fentrylk_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_fentrylk_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_fentrylk_store(this_args, args->volume, state->fd, args->name,
- args->cmd, args->type, xdata);
- break;
- }
- case GF_FOP_XATTROP: {
- gfs3_xattrop_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_xattrop_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xattr, (args->dict.dict_val),
- (args->dict.dict_len), ret, op_errno, out);
- args_xattrop_store(this_args, &state->loc, args->flags, xattr,
- xdata);
- break;
- }
- case GF_FOP_FXATTROP: {
- gfs3_fxattrop_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_fxattrop_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xattr, (args->dict.dict_val),
- (args->dict.dict_len), ret, op_errno, out);
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
-
- args_fxattrop_store(this_args, state->fd, args->flags, xattr,
- xdata);
- break;
- }
- case GF_FOP_FGETXATTR: {
- gfs3_fgetxattr_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_fgetxattr_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
-
- args_fgetxattr_store(this_args, state->fd, args->name, xdata);
- break;
- }
- case GF_FOP_FSETXATTR: {
- gfs3_fsetxattr_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_fsetxattr_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xattr, (args->dict.dict_val),
- (args->dict.dict_len), ret, op_errno, out);
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
-
- args_fsetxattr_store(this_args, state->fd, xattr, args->flags,
- xdata);
- break;
- }
- case GF_FOP_RCHECKSUM: {
- gfs3_rchecksum_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_rchecksum_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
-
- args_rchecksum_store(this_args, state->fd, args->offset, args->len,
- xdata);
- break;
- }
- case GF_FOP_SETATTR: {
- gfs3_setattr_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_setattr_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
-
- gf_stat_to_iatt(&args->stbuf, &this_args->stat);
-
- args_setattr_store(this_args, &state->loc, &this_args->stat,
- args->valid, xdata);
- break;
- }
- case GF_FOP_FSETATTR: {
- gfs3_fsetattr_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_fsetattr_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
-
- gf_stat_to_iatt(&args->stbuf, &this_args->stat);
-
- args_fsetattr_store(this_args, state->fd, &this_args->stat,
- args->valid, xdata);
- break;
- }
- case GF_FOP_READDIRP: {
- gfs3_readdirp_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_readdirp_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xattr, (args->dict.dict_val),
- (args->dict.dict_len), ret, op_errno, out);
-
- args_readdirp_store(this_args, state->fd, args->size, args->offset,
- xattr);
- break;
- }
- case GF_FOP_FREMOVEXATTR: {
- gfs3_fremovexattr_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_fremovexattr_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
-
- args_fremovexattr_store(this_args, state->fd, args->name, xdata);
- break;
- }
- case GF_FOP_FALLOCATE: {
- gfs3_fallocate_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_fallocate_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_fallocate_store(this_args, state->fd, args->flags,
- args->offset, args->size, xdata);
- break;
- }
- case GF_FOP_DISCARD: {
- gfs3_discard_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_discard_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
-
- args_discard_store(this_args, state->fd, args->offset, args->size,
- xdata);
- break;
- }
- case GF_FOP_ZEROFILL: {
- gfs3_zerofill_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_zerofill_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_zerofill_store(this_args, state->fd, args->offset, args->size,
- xdata);
- break;
- }
- case GF_FOP_SEEK: {
- gfs3_seek_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_seek_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
- args_seek_store(this_args, state->fd, args->offset, args->what,
- xdata);
- break;
- }
- case GF_FOP_LEASE: {
- gfs3_lease_req *args = NULL;
-
- args = &this_req->compound_req_u.compound_lease_req;
-
- GF_PROTOCOL_DICT_UNSERIALIZE(
- frame->root->client->bound_xl, xdata, args->xdata.xdata_val,
- args->xdata.xdata_len, ret, op_errno, out);
-
- gf_proto_lease_to_lease(&args->lease, &state->lease);
-
- args_lease_store(this_args, &state->loc, &state->lease, xdata);
- break;
- }
- default:
- return ENOTSUP;
- }
-out:
- if (xattr)
- dict_unref(xattr);
- if (xdata)
- dict_unref(xdata);
- return op_errno;
-}
-
-int
-server_populate_compound_response(xlator_t *this, gfs3_compound_rsp *rsp,
- call_frame_t *frame,
- compound_args_cbk_t *args_cbk, int index)
-{
- int op_errno = EINVAL;
- default_args_cbk_t *this_args_cbk = NULL;
- compound_rsp *this_rsp = NULL;
- server_state_t *state = NULL;
- int ret = 0;
-
- state = CALL_STATE(frame);
- this_rsp = &rsp->compound_rsp_array.compound_rsp_array_val[index];
-
- this_args_cbk = &args_cbk->rsp_list[index];
- this_rsp->fop_enum = args_cbk->enum_list[index];
-
- switch (this_rsp->fop_enum) {
- case GF_FOP_STAT: {
- gfs3_stat_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_stat_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- if (!this_args_cbk->op_ret) {
- server_post_stat(state, rsp_args, &this_args_cbk->stat);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_READLINK: {
- gfs3_readlink_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_readlink_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- if (this_args_cbk->op_ret >= 0) {
- server_post_readlink(rsp_args, &this_args_cbk->stat,
- this_args_cbk->buf);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- if (!rsp_args->path)
- rsp_args->path = "";
- break;
- }
- case GF_FOP_MKNOD: {
- gfs3_mknod_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_mknod_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- if (!this_args_cbk->op_ret) {
- server_post_mknod(state, rsp_args, &this_args_cbk->stat,
- &this_args_cbk->preparent,
- &this_args_cbk->postparent,
- this_args_cbk->inode);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_MKDIR: {
- gfs3_mkdir_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_mkdir_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_mkdir(
- state, rsp_args, this_args_cbk->inode, &this_args_cbk->stat,
- &this_args_cbk->preparent, &this_args_cbk->postparent,
- this_args_cbk->xdata);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_UNLINK: {
- gfs3_unlink_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_unlink_rsp;
-
- if (gf_replace_old_iatt_in_dict(this_args_cbk->xdata)) {
- rsp_args->op_errno = errno;
- rsp_args->op_ret = -1;
- goto out;
- }
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- if (!this_args_cbk->op_ret) {
- server_post_unlink(state, rsp_args, &this_args_cbk->preparent,
- &this_args_cbk->postparent);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_RMDIR: {
- gfs3_rmdir_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_rmdir_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- if (!this_args_cbk->op_ret) {
- server_post_rmdir(state, rsp_args, &this_args_cbk->preparent,
- &this_args_cbk->postparent);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_SYMLINK: {
- gfs3_symlink_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_symlink_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_symlink(
- state, rsp_args, this_args_cbk->inode, &this_args_cbk->stat,
- &this_args_cbk->preparent, &this_args_cbk->postparent,
- this_args_cbk->xdata);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_RENAME: {
- gfs3_rename_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_rename_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_rename(
- frame, state, rsp_args, &this_args_cbk->stat,
- &this_args_cbk->preparent, &this_args_cbk->postparent,
- &this_args_cbk->preparent2, &this_args_cbk->postparent2);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_LINK: {
- gfs3_link_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_link_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_link(
- state, rsp_args, this_args_cbk->inode, &this_args_cbk->stat,
- &this_args_cbk->preparent, &this_args_cbk->postparent,
- this_args_cbk->xdata);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_TRUNCATE: {
- gfs3_truncate_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_truncate_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_truncate(rsp_args, &this_args_cbk->prestat,
- &this_args_cbk->poststat);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_OPEN: {
- gfs3_open_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_open_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_open(frame, this, rsp_args, this_args_cbk->fd);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_READ: {
- gfs3_read_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_read_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (this_args_cbk->op_ret >= 0) {
- server_post_readv(rsp_args, &this_args_cbk->stat,
- this_args_cbk->op_ret);
-
- if (!state->rsp_iobref) {
- state->rsp_iobref = this_args_cbk->iobref;
- state->rsp_count = 0;
- }
- iobref_merge(state->rsp_iobref, this_args_cbk->iobref);
- memcpy(&state->rsp_vector[state->rsp_count],
- this_args_cbk->vector,
- (this_args_cbk->count * sizeof(state->rsp_vector[0])));
- state->rsp_count += this_args_cbk->count;
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_WRITE: {
- gfs3_write_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_write_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (this_args_cbk->op_ret >= 0) {
- server_post_writev(rsp_args, &this_args_cbk->prestat,
- &this_args_cbk->poststat);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_STATFS: {
- gfs3_statfs_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_statfs_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- if (!this_args_cbk->op_ret) {
- server_post_statfs(rsp_args, &this_args_cbk->statvfs);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_FLUSH: {
- gf_common_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_flush_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_FSYNC: {
- gfs3_fsync_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_fsync_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_fsync(rsp_args, &this_args_cbk->prestat,
- &this_args_cbk->poststat);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_SETXATTR: {
- gf_common_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_setxattr_rsp;
-
- if (gf_replace_old_iatt_in_dict(this_args_cbk->xdata)) {
- rsp_args->op_errno = errno;
- rsp_args->op_ret = -1;
- goto out;
- }
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_GETXATTR: {
- gfs3_getxattr_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_getxattr_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (-1 != this_args_cbk->op_ret) {
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xattr, &rsp_args->dict.dict_val,
- rsp_args->dict.dict_len, rsp_args->op_errno, out);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_REMOVEXATTR: {
- gf_common_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_removexattr_rsp;
-
- if (gf_replace_old_iatt_in_dict(this_args_cbk->xdata)) {
- rsp_args->op_errno = errno;
- rsp_args->op_ret = -1;
- goto out;
- }
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_OPENDIR: {
- gfs3_opendir_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_opendir_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_opendir(frame, this, rsp_args, this_args_cbk->fd);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_FSYNCDIR: {
- gf_common_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_fsyncdir_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_ACCESS: {
- gf_common_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_access_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_CREATE: {
- gfs3_create_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_create_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
-
- if (!this_args_cbk->op_ret) {
- rsp_args->op_ret = server_post_create(
- frame, rsp_args, state, this, this_args_cbk->fd,
- this_args_cbk->inode, &this_args_cbk->stat,
- &this_args_cbk->preparent, &this_args_cbk->postparent);
- if (rsp_args->op_ret) {
- rsp_args->op_errno = -rsp_args->op_ret;
- rsp_args->op_ret = -1;
- }
- }
- break;
- }
- case GF_FOP_FTRUNCATE: {
- gfs3_ftruncate_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_ftruncate_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_ftruncate(rsp_args, &this_args_cbk->prestat,
- &this_args_cbk->poststat);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_FSTAT: {
- gfs3_fstat_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_fstat_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- if (!this_args_cbk->op_ret) {
- server_post_fstat(state, rsp_args, &this_args_cbk->stat);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_LK: {
- gfs3_lk_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_lk_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_lk(this, rsp_args, &this_args_cbk->lock);
- }
-
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_LOOKUP: {
- gfs3_lookup_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_lookup_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_lookup(rsp_args, frame, state, this_args_cbk->inode,
- &this_args_cbk->stat,
- &this_args_cbk->postparent);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_READDIR: {
- gfs3_readdir_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_readdir_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
-
- if (this_args_cbk->op_ret > 0) {
- ret = server_post_readdir(rsp_args, &this_args_cbk->entries);
- if (ret < 0) {
- rsp_args->op_ret = ret;
- rsp_args->op_errno = ENOMEM;
- }
- }
- break;
- }
- case GF_FOP_INODELK: {
- gf_common_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_inodelk_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_FINODELK: {
- gf_common_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_finodelk_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_ENTRYLK: {
- gf_common_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_entrylk_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_FENTRYLK: {
- gf_common_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_fentrylk_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_XATTROP: {
- gfs3_xattrop_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_xattrop_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xattr, &rsp_args->dict.dict_val,
- rsp_args->dict.dict_len, rsp_args->op_errno, out);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_FXATTROP: {
- gfs3_fxattrop_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_fxattrop_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xattr, &rsp_args->dict.dict_val,
- rsp_args->dict.dict_len, rsp_args->op_errno, out);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_FGETXATTR: {
- gfs3_fgetxattr_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_fgetxattr_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (-1 != this_args_cbk->op_ret) {
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xattr, &rsp_args->dict.dict_val,
- rsp_args->dict.dict_len, rsp_args->op_errno, out);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_FSETXATTR: {
- gf_common_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_setxattr_rsp;
-
- if (gf_replace_old_iatt_in_dict(this_args_cbk->xdata)) {
- rsp_args->op_errno = errno;
- rsp_args->op_ret = -1;
- goto out;
- }
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_RCHECKSUM: {
- gfs3_rchecksum_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_rchecksum_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_rchecksum(rsp_args, this_args_cbk->weak_checksum,
- this_args_cbk->strong_checksum);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_SETATTR: {
- gfs3_setattr_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_setattr_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_setattr(rsp_args, &this_args_cbk->prestat,
- &this_args_cbk->poststat);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_FSETATTR: {
- gfs3_fsetattr_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_fsetattr_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_fsetattr(rsp_args, &this_args_cbk->prestat,
- &this_args_cbk->poststat);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_READDIRP: {
- gfs3_readdirp_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_readdirp_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (this_args_cbk->op_ret > 0) {
- ret = server_post_readdirp(rsp_args, &this_args_cbk->entries);
- if (ret < 0) {
- rsp_args->op_ret = ret;
- rsp_args->op_errno = ENOMEM;
- goto out;
- }
- gf_link_inodes_from_dirent(this, state->fd->inode,
- &this_args_cbk->entries);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_FREMOVEXATTR: {
- gf_common_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_fremovexattr_rsp;
-
- if (gf_replace_old_iatt_in_dict(this_args_cbk->xdata)) {
- rsp_args->op_errno = errno;
- rsp_args->op_ret = -1;
- goto out;
- }
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_FALLOCATE: {
- gfs3_fallocate_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_fallocate_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_fallocate(rsp_args, &this_args_cbk->prestat,
- &this_args_cbk->poststat);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_DISCARD: {
- gfs3_discard_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_discard_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_discard(rsp_args, &this_args_cbk->prestat,
- &this_args_cbk->poststat);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_ZEROFILL: {
- gfs3_zerofill_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_zerofill_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_zerofill(rsp_args, &this_args_cbk->prestat,
- &this_args_cbk->poststat);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_SEEK: {
- gfs3_seek_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_seek_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_LEASE: {
- gfs3_lease_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_u.compound_lease_rsp;
-
- GF_PROTOCOL_DICT_SERIALIZE(
- this, this_args_cbk->xdata, &rsp_args->xdata.xdata_val,
- rsp_args->xdata.xdata_len, rsp_args->op_errno, out);
-
- if (!this_args_cbk->op_ret) {
- server_post_lease(rsp_args, &this_args_cbk->lease);
- }
-
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- default:
- return ENOTSUP;
- }
- op_errno = 0;
-out:
- return op_errno;
-}
-/* This works only when the compound fop acts on one loc/inode/gfid.
- * If compound fops on more than one inode is required, multiple
- * resolve and resumes will have to be done. This will have to change.
- * Right now, multiple unlinks, rmdirs etc is are not supported.
- * This can be added for future enhancements.
- */
-int
-server_get_compound_resolve(server_state_t *state, gfs3_compound_req *req)
-{
- int i = 0;
- compound_req *array = &req->compound_req_array.compound_req_array_val[i];
-
- switch (array->fop_enum) {
- case GF_FOP_STAT: {
- gfs3_stat_req this_req = array[i].compound_req_u.compound_stat_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_READLINK: {
- gfs3_readlink_req this_req =
- array[i].compound_req_u.compound_readlink_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_MKNOD: {
- gfs3_mknod_req this_req = array[i]
- .compound_req_u.compound_mknod_req;
-
- state->resolve.type = RESOLVE_NOT;
- memcpy(state->resolve.pargfid, this_req.pargfid, 16);
- state->resolve.bname = gf_strdup(this_req.bname);
- break;
- }
- case GF_FOP_MKDIR: {
- gfs3_mkdir_req this_req = array[i]
- .compound_req_u.compound_mkdir_req;
-
- state->resolve.type = RESOLVE_NOT;
- memcpy(state->resolve.pargfid, this_req.pargfid, 16);
- state->resolve.bname = gf_strdup(this_req.bname);
- break;
- }
- case GF_FOP_UNLINK: {
- gfs3_unlink_req this_req = array[i]
- .compound_req_u.compound_unlink_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.pargfid, this_req.pargfid, 16);
- state->resolve.bname = gf_strdup(this_req.bname);
- break;
- }
- case GF_FOP_RMDIR: {
- gfs3_rmdir_req this_req = array[i]
- .compound_req_u.compound_rmdir_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.pargfid, this_req.pargfid, 16);
- state->resolve.bname = gf_strdup(this_req.bname);
- break;
- }
- case GF_FOP_SYMLINK: {
- gfs3_symlink_req this_req =
- array[i].compound_req_u.compound_symlink_req;
-
- state->resolve.type = RESOLVE_NOT;
- memcpy(state->resolve.pargfid, this_req.pargfid, 16);
- state->resolve.bname = gf_strdup(this_req.bname);
- break;
- }
- case GF_FOP_RENAME: {
- gfs3_rename_req this_req = array[i]
- .compound_req_u.compound_rename_req;
-
- state->resolve.type = RESOLVE_MUST;
- state->resolve.bname = gf_strdup(this_req.oldbname);
- memcpy(state->resolve.pargfid, this_req.oldgfid, 16);
-
- state->resolve2.type = RESOLVE_MAY;
- state->resolve2.bname = gf_strdup(this_req.newbname);
- memcpy(state->resolve2.pargfid, this_req.newgfid, 16);
- break;
- }
- case GF_FOP_LINK: {
- gfs3_link_req this_req = array[i].compound_req_u.compound_link_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.oldgfid, 16);
-
- state->resolve2.type = RESOLVE_NOT;
- state->resolve2.bname = gf_strdup(this_req.newbname);
- memcpy(state->resolve2.pargfid, this_req.newgfid, 16);
- break;
- }
- case GF_FOP_TRUNCATE: {
- gfs3_truncate_req this_req =
- array[i].compound_req_u.compound_truncate_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_OPEN: {
- gfs3_open_req this_req = array[i].compound_req_u.compound_open_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_READ: {
- gfs3_read_req this_req = array[i].compound_req_u.compound_read_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_WRITE: {
- gfs3_write_req this_req = array[i]
- .compound_req_u.compound_write_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_STATFS: {
- gfs3_statfs_req this_req = array[i]
- .compound_req_u.compound_statfs_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_FLUSH: {
- gfs3_flush_req this_req = array[i]
- .compound_req_u.compound_flush_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_FSYNC: {
- gfs3_fsync_req this_req = array[i]
- .compound_req_u.compound_fsync_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_SETXATTR: {
- gfs3_setxattr_req this_req =
- array[i].compound_req_u.compound_setxattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_GETXATTR: {
- gfs3_getxattr_req this_req =
- array[i].compound_req_u.compound_getxattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_REMOVEXATTR: {
- gfs3_removexattr_req this_req =
- array[i].compound_req_u.compound_removexattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_OPENDIR: {
- gfs3_opendir_req this_req =
- array[i].compound_req_u.compound_opendir_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_FSYNCDIR: {
- gfs3_fsyncdir_req this_req =
- array[i].compound_req_u.compound_fsyncdir_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_ACCESS: {
- gfs3_access_req this_req = array[i]
- .compound_req_u.compound_access_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_CREATE: {
- gfs3_create_req this_req = array[i]
- .compound_req_u.compound_create_req;
-
- state->flags = gf_flags_to_flags(this_req.flags);
- if (state->flags & O_EXCL) {
- state->resolve.type = RESOLVE_NOT;
- } else {
- state->resolve.type = RESOLVE_DONTCARE;
- }
-
- memcpy(state->resolve.pargfid, this_req.pargfid, 16);
- state->resolve.bname = gf_strdup(this_req.bname);
- break;
- }
- case GF_FOP_FTRUNCATE: {
- gfs3_ftruncate_req this_req =
- array[i].compound_req_u.compound_ftruncate_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_FSTAT: {
- gfs3_fstat_req this_req = array[i]
- .compound_req_u.compound_fstat_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_LK: {
- gfs3_lk_req this_req = array[i].compound_req_u.compound_lk_req;
-
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_LOOKUP: {
- gfs3_lookup_req this_req = array[i]
- .compound_req_u.compound_lookup_req;
- state->resolve.type = RESOLVE_DONTCARE;
-
- if (this_req.bname && strcmp(this_req.bname, "")) {
- memcpy(state->resolve.pargfid, this_req.pargfid, 16);
- state->resolve.bname = gf_strdup(this_req.bname);
- } else {
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- }
- break;
- }
- case GF_FOP_READDIR: {
- gfs3_readdir_req this_req =
- array[i].compound_req_u.compound_readdir_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_INODELK: {
- gfs3_inodelk_req this_req =
- array[i].compound_req_u.compound_inodelk_req;
-
- state->resolve.type = RESOLVE_EXACT;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_FINODELK: {
- gfs3_finodelk_req this_req =
- array[i].compound_req_u.compound_finodelk_req;
-
- state->resolve.type = RESOLVE_EXACT;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_ENTRYLK: {
- gfs3_entrylk_req this_req =
- array[i].compound_req_u.compound_entrylk_req;
-
- state->resolve.type = RESOLVE_EXACT;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_FENTRYLK: {
- gfs3_fentrylk_req this_req =
- array[i].compound_req_u.compound_fentrylk_req;
-
- state->resolve.type = RESOLVE_EXACT;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_XATTROP: {
- gfs3_xattrop_req this_req =
- array[i].compound_req_u.compound_xattrop_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_FXATTROP: {
- gfs3_fxattrop_req this_req =
- array[i].compound_req_u.compound_fxattrop_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_FGETXATTR: {
- gfs3_fgetxattr_req this_req =
- array[i].compound_req_u.compound_fgetxattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_FSETXATTR: {
- gfs3_fsetxattr_req this_req =
- array[i].compound_req_u.compound_fsetxattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_RCHECKSUM: {
- gfs3_rchecksum_req this_req =
- array[i].compound_req_u.compound_rchecksum_req;
-
- state->resolve.type = RESOLVE_MAY;
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_SETATTR: {
- gfs3_setattr_req this_req =
- array[i].compound_req_u.compound_setattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_FSETATTR: {
- gfs3_fsetattr_req this_req =
- array[i].compound_req_u.compound_fsetattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_READDIRP: {
- gfs3_readdirp_req this_req =
- array[i].compound_req_u.compound_readdirp_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_FREMOVEXATTR: {
- gfs3_fremovexattr_req this_req =
- array[i].compound_req_u.compound_fremovexattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_FALLOCATE: {
- gfs3_fallocate_req this_req =
- array[i].compound_req_u.compound_fallocate_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_DISCARD: {
- gfs3_discard_req this_req =
- array[i].compound_req_u.compound_discard_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_ZEROFILL: {
- gfs3_zerofill_req this_req =
- array[i].compound_req_u.compound_zerofill_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_SEEK: {
- gfs3_seek_req this_req = array[i].compound_req_u.compound_seek_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_LEASE: {
- gfs3_lease_req this_req = array[i]
- .compound_req_u.compound_lease_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- default:
- return ENOTSUP;
- }
- return 0;
-}
-
-void
-server_compound_rsp_cleanup(gfs3_compound_rsp *rsp, compound_args_cbk_t *args)
-{
- int i, len = 0;
- compound_rsp *this_rsp = NULL;
-
- if (!rsp->compound_rsp_array.compound_rsp_array_val)
- return;
-
- len = rsp->compound_rsp_array.compound_rsp_array_len;
-
- for (i = 0; i < len; i++) {
- this_rsp = &rsp->compound_rsp_array.compound_rsp_array_val[i];
- switch (args->enum_list[i]) {
- case GF_FOP_STAT:
- SERVER_FOP_RSP_CLEANUP(rsp, stat, i);
- break;
- case GF_FOP_MKNOD:
- SERVER_FOP_RSP_CLEANUP(rsp, mknod, i);
- break;
- case GF_FOP_MKDIR:
- SERVER_FOP_RSP_CLEANUP(rsp, mkdir, i);
- break;
- case GF_FOP_UNLINK:
- SERVER_FOP_RSP_CLEANUP(rsp, unlink, i);
- break;
- case GF_FOP_RMDIR:
- SERVER_FOP_RSP_CLEANUP(rsp, rmdir, i);
- break;
- case GF_FOP_SYMLINK:
- SERVER_FOP_RSP_CLEANUP(rsp, symlink, i);
- break;
- case GF_FOP_RENAME:
- SERVER_FOP_RSP_CLEANUP(rsp, rename, i);
- break;
- case GF_FOP_LINK:
- SERVER_FOP_RSP_CLEANUP(rsp, link, i);
- break;
- case GF_FOP_TRUNCATE:
- SERVER_FOP_RSP_CLEANUP(rsp, truncate, i);
- break;
- case GF_FOP_OPEN:
- SERVER_FOP_RSP_CLEANUP(rsp, open, i);
- break;
- case GF_FOP_READ:
- SERVER_FOP_RSP_CLEANUP(rsp, read, i);
- break;
- case GF_FOP_WRITE:
- SERVER_FOP_RSP_CLEANUP(rsp, write, i);
- break;
- case GF_FOP_STATFS:
- SERVER_FOP_RSP_CLEANUP(rsp, statfs, i);
- break;
- case GF_FOP_FSYNC:
- SERVER_FOP_RSP_CLEANUP(rsp, fsync, i);
- break;
- case GF_FOP_OPENDIR:
- SERVER_FOP_RSP_CLEANUP(rsp, opendir, i);
- break;
- case GF_FOP_CREATE:
- SERVER_FOP_RSP_CLEANUP(rsp, create, i);
- break;
- case GF_FOP_FTRUNCATE:
- SERVER_FOP_RSP_CLEANUP(rsp, ftruncate, i);
- break;
- case GF_FOP_FSTAT:
- SERVER_FOP_RSP_CLEANUP(rsp, fstat, i);
- break;
- case GF_FOP_LK:
- SERVER_FOP_RSP_CLEANUP(rsp, lk, i);
- break;
- case GF_FOP_LOOKUP:
- SERVER_FOP_RSP_CLEANUP(rsp, lookup, i);
- break;
- case GF_FOP_SETATTR:
- SERVER_FOP_RSP_CLEANUP(rsp, setattr, i);
- break;
- case GF_FOP_FSETATTR:
- SERVER_FOP_RSP_CLEANUP(rsp, fsetattr, i);
- break;
- case GF_FOP_FALLOCATE:
- SERVER_FOP_RSP_CLEANUP(rsp, fallocate, i);
- break;
- case GF_FOP_DISCARD:
- SERVER_FOP_RSP_CLEANUP(rsp, discard, i);
- break;
- case GF_FOP_ZEROFILL:
- SERVER_FOP_RSP_CLEANUP(rsp, zerofill, i);
- break;
- case GF_FOP_IPC:
- SERVER_FOP_RSP_CLEANUP(rsp, ipc, i);
- break;
- case GF_FOP_SEEK:
- SERVER_FOP_RSP_CLEANUP(rsp, seek, i);
- break;
- case GF_FOP_LEASE:
- SERVER_FOP_RSP_CLEANUP(rsp, lease, i);
- break;
- /* fops that use gf_common_rsp */
- case GF_FOP_FLUSH:
- SERVER_COMMON_RSP_CLEANUP(rsp, flush, i);
- break;
- case GF_FOP_SETXATTR:
- SERVER_COMMON_RSP_CLEANUP(rsp, setxattr, i);
- break;
- case GF_FOP_REMOVEXATTR:
- SERVER_COMMON_RSP_CLEANUP(rsp, removexattr, i);
- break;
- case GF_FOP_FSETXATTR:
- SERVER_COMMON_RSP_CLEANUP(rsp, fsetxattr, i);
- break;
- case GF_FOP_FREMOVEXATTR:
- SERVER_COMMON_RSP_CLEANUP(rsp, fremovexattr, i);
- break;
- case GF_FOP_FSYNCDIR:
- SERVER_COMMON_RSP_CLEANUP(rsp, fsyncdir, i);
- break;
- case GF_FOP_ACCESS:
- SERVER_COMMON_RSP_CLEANUP(rsp, access, i);
- break;
- case GF_FOP_INODELK:
- SERVER_COMMON_RSP_CLEANUP(rsp, inodelk, i);
- break;
- case GF_FOP_FINODELK:
- SERVER_COMMON_RSP_CLEANUP(rsp, finodelk, i);
- break;
- case GF_FOP_ENTRYLK:
- SERVER_COMMON_RSP_CLEANUP(rsp, entrylk, i);
- break;
- case GF_FOP_FENTRYLK:
- SERVER_COMMON_RSP_CLEANUP(rsp, fentrylk, i);
- break;
- case GF_FOP_READLINK:
- SERVER_FOP_RSP_CLEANUP(rsp, readlink, i);
- break;
- case GF_FOP_RCHECKSUM:
- SERVER_FOP_RSP_CLEANUP(rsp, rchecksum, i);
- break;
- /* fops that need extra cleanup */
- case GF_FOP_XATTROP: {
- gfs3_xattrop_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, xattrop);
- SERVER_FOP_RSP_CLEANUP(rsp, xattrop, i);
- GF_FREE(tmp_rsp->dict.dict_val);
- break;
- }
- case GF_FOP_FXATTROP: {
- gfs3_fxattrop_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, fxattrop);
- SERVER_FOP_RSP_CLEANUP(rsp, fxattrop, i);
- GF_FREE(tmp_rsp->dict.dict_val);
- break;
- }
- case GF_FOP_READDIR: {
- gfs3_readdir_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, readdir);
- SERVER_FOP_RSP_CLEANUP(rsp, readdir, i);
- readdir_rsp_cleanup(tmp_rsp);
- break;
- }
- case GF_FOP_READDIRP: {
- gfs3_readdirp_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, readdirp);
- SERVER_FOP_RSP_CLEANUP(rsp, readdir, i);
- readdirp_rsp_cleanup(tmp_rsp);
- break;
- }
- case GF_FOP_GETXATTR: {
- gfs3_getxattr_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, getxattr);
- SERVER_FOP_RSP_CLEANUP(rsp, getxattr, i);
- GF_FREE(tmp_rsp->dict.dict_val);
- break;
- }
- case GF_FOP_FGETXATTR: {
- gfs3_fgetxattr_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp,
- fgetxattr);
- SERVER_FOP_RSP_CLEANUP(rsp, fgetxattr, i);
- GF_FREE(tmp_rsp->dict.dict_val);
- break;
- }
- default:
- break;
- }
- }
- GF_FREE(rsp->compound_rsp_array.compound_rsp_array_val);
- return;
-}
-
-void
-server_compound_req_cleanup(gfs3_compound_req *req, int len)
-{
- int i = 0;
- compound_req *curr_req = NULL;
-
- if (!req->compound_req_array.compound_req_array_val)
- return;
-
- for (i = 0; i < len; i++) {
- curr_req = &req->compound_req_array.compound_req_array_val[i];
-
- switch (curr_req->fop_enum) {
- case GF_FOP_STAT:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, stat);
- break;
- case GF_FOP_READLINK:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, readlink);
- break;
- case GF_FOP_MKNOD:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, mknod);
- break;
- case GF_FOP_MKDIR: {
- gfs3_mkdir_req *args = &CPD_REQ_FIELD(curr_req, mkdir);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, mkdir);
- free(args->bname);
- break;
- }
- case GF_FOP_UNLINK: {
- gfs3_unlink_req *args = &CPD_REQ_FIELD(curr_req, unlink);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, unlink);
- free(args->bname);
- break;
- }
- case GF_FOP_RMDIR: {
- gfs3_rmdir_req *args = &CPD_REQ_FIELD(curr_req, rmdir);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, rmdir);
- free(args->bname);
- break;
- }
- case GF_FOP_SYMLINK: {
- gfs3_symlink_req *args = &CPD_REQ_FIELD(curr_req, symlink);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, symlink);
- free(args->bname);
- free(args->linkname);
- break;
- }
- case GF_FOP_RENAME: {
- gfs3_rename_req *args = &CPD_REQ_FIELD(curr_req, rename);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, rename);
- free(args->oldbname);
- free(args->newbname);
- break;
- }
- case GF_FOP_LINK: {
- gfs3_link_req *args = &CPD_REQ_FIELD(curr_req, link);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, link);
- free(args->newbname);
- break;
- }
- case GF_FOP_TRUNCATE:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, truncate);
- break;
- case GF_FOP_OPEN:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, open);
- break;
- case GF_FOP_READ:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, read);
- break;
- case GF_FOP_WRITE:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, write);
- break;
- case GF_FOP_STATFS:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, statfs);
- break;
- case GF_FOP_FLUSH:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, flush);
- break;
- case GF_FOP_FSYNC:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, fsync);
- break;
- case GF_FOP_SETXATTR: {
- gfs3_setxattr_req *args = &CPD_REQ_FIELD(curr_req, setxattr);
-
- free(args->dict.dict_val);
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, setxattr);
- break;
- }
- case GF_FOP_GETXATTR: {
- gfs3_getxattr_req *args = &CPD_REQ_FIELD(curr_req, getxattr);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, getxattr);
- free(args->name);
- break;
- }
- case GF_FOP_REMOVEXATTR: {
- gfs3_removexattr_req *args = &CPD_REQ_FIELD(curr_req,
- removexattr);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, removexattr);
- free(args->name);
- break;
- }
- case GF_FOP_OPENDIR:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, opendir);
- break;
- case GF_FOP_FSYNCDIR:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, fsyncdir);
- break;
- case GF_FOP_ACCESS:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, access);
- break;
- case GF_FOP_CREATE: {
- gfs3_create_req *args = &CPD_REQ_FIELD(curr_req, create);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, create);
- free(args->bname);
- break;
- }
- case GF_FOP_FTRUNCATE:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, ftruncate);
- break;
- case GF_FOP_FSTAT:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, fstat);
- break;
- case GF_FOP_LK: {
- gfs3_lk_req *args = &CPD_REQ_FIELD(curr_req, lk);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, lk);
- free(args->flock.lk_owner.lk_owner_val);
- break;
- }
- case GF_FOP_LOOKUP: {
- gfs3_lookup_req *args = &CPD_REQ_FIELD(curr_req, lookup);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, lookup);
- free(args->bname);
- break;
- }
- case GF_FOP_READDIR:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, readdir);
- break;
- case GF_FOP_INODELK: {
- gfs3_inodelk_req *args = &CPD_REQ_FIELD(curr_req, inodelk);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, inodelk);
- free(args->volume);
- free(args->flock.lk_owner.lk_owner_val);
- break;
- }
- case GF_FOP_FINODELK: {
- gfs3_finodelk_req *args = &CPD_REQ_FIELD(curr_req, finodelk);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, finodelk);
- free(args->volume);
- free(args->flock.lk_owner.lk_owner_val);
- break;
- }
- case GF_FOP_ENTRYLK: {
- gfs3_entrylk_req *args = &CPD_REQ_FIELD(curr_req, entrylk);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, entrylk);
- free(args->volume);
- free(args->name);
- break;
- }
- case GF_FOP_FENTRYLK: {
- gfs3_fentrylk_req *args = &CPD_REQ_FIELD(curr_req, fentrylk);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, fentrylk);
- free(args->volume);
- free(args->name);
- break;
- }
- case GF_FOP_XATTROP: {
- gfs3_xattrop_req *args = &CPD_REQ_FIELD(curr_req, xattrop);
-
- free(args->dict.dict_val);
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, xattrop);
- break;
- }
- case GF_FOP_FXATTROP: {
- gfs3_fxattrop_req *args = &CPD_REQ_FIELD(curr_req, fxattrop);
-
- free(args->dict.dict_val);
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, fxattrop);
- break;
- }
- case GF_FOP_FGETXATTR: {
- gfs3_fgetxattr_req *args = &CPD_REQ_FIELD(curr_req, fgetxattr);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, fgetxattr);
- free(args->name);
- break;
- }
- case GF_FOP_FSETXATTR: {
- gfs3_fsetxattr_req *args = &CPD_REQ_FIELD(curr_req, fsetxattr);
-
- free(args->dict.dict_val);
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, fsetxattr);
- break;
- }
- case GF_FOP_RCHECKSUM:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, rchecksum);
- break;
- case GF_FOP_SETATTR:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, setattr);
- break;
- case GF_FOP_FSETATTR:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, fsetattr);
- break;
- case GF_FOP_READDIRP: {
- gfs3_readdirp_req *args = &CPD_REQ_FIELD(curr_req, readdirp);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, fremovexattr);
- free(args->dict.dict_val);
- break;
- }
- case GF_FOP_FREMOVEXATTR: {
- gfs3_fremovexattr_req *args = &CPD_REQ_FIELD(curr_req,
- fremovexattr);
-
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, fremovexattr);
- free(args->name);
- break;
- }
- case GF_FOP_FALLOCATE:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, fallocate);
- break;
- case GF_FOP_DISCARD:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, discard);
- break;
- case GF_FOP_ZEROFILL:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, zerofill);
- break;
- case GF_FOP_IPC:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, ipc);
- break;
- case GF_FOP_SEEK:
- SERVER_COMPOUND_FOP_CLEANUP(curr_req, seek);
- break;
- default:
- break;
- }
- }
-
- return;
-}
-
-/* compound v2 */
-int
-server_populate_compound_request_v2(gfx_compound_req *req, call_frame_t *frame,
- default_args_t *this_args, int index)
-{
- int op_errno = 0;
- dict_t *xdata = NULL;
- dict_t *xattr = NULL;
- struct iovec req_iovec[MAX_IOVEC] = {{
- 0,
- }};
- compound_req_v2 *this_req = NULL;
- server_state_t *state = CALL_STATE(frame);
-
- this_req = &req->compound_req_array.compound_req_array_val[index];
-
- switch (this_req->fop_enum) {
- case GF_FOP_STAT: {
- gfx_stat_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_stat_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_stat_store(this_args, &state->loc, xdata);
- break;
- }
- case GF_FOP_READLINK: {
- gfx_readlink_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_readlink_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_readlink_store(this_args, &state->loc, args->size, xdata);
- break;
- }
- case GF_FOP_MKNOD: {
- gfx_mknod_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_mknod_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_mknod_store(this_args, &state->loc, args->mode, args->dev,
- args->umask, xdata);
- break;
- }
- case GF_FOP_MKDIR: {
- gfx_mkdir_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_mkdir_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_mkdir_store(this_args, &state->loc, args->mode, args->umask,
- xdata);
- break;
- }
- case GF_FOP_UNLINK: {
- gfx_unlink_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_unlink_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_unlink_store(this_args, &state->loc, args->xflags, xdata);
- break;
- }
- case GF_FOP_RMDIR: {
- gfx_rmdir_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_rmdir_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_rmdir_store(this_args, &state->loc, args->xflags, xdata);
- break;
- }
- case GF_FOP_SYMLINK: {
- gfx_symlink_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_symlink_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_symlink_store(this_args, args->linkname, &state->loc,
- args->umask, xdata);
-
- this_args->loc.inode = inode_new(state->itable);
-
- break;
- }
- case GF_FOP_RENAME: {
- gfx_rename_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_rename_req;
-
- xdr_to_dict(&args->xdata, &xdata);
-
- args_rename_store(this_args, &state->loc, &state->loc2, xdata);
- break;
- }
- case GF_FOP_LINK: {
- gfx_link_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_link_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_link_store(this_args, &state->loc, &state->loc2, xdata);
-
- this_args->loc2.inode = inode_ref(this_args->loc.inode);
-
- break;
- }
- case GF_FOP_TRUNCATE: {
- gfx_truncate_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_truncate_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_truncate_store(this_args, &state->loc, args->offset, xdata);
- break;
- }
- case GF_FOP_OPEN: {
- gfx_open_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_open_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_open_store(this_args, &state->loc, args->flags, state->fd,
- xdata);
-
- this_args->fd = fd_create(this_args->loc.inode, frame->root->pid);
- this_args->fd->flags = this_args->flags;
-
- break;
- }
- case GF_FOP_READ: {
- gfx_read_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_read_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_readv_store(this_args, state->fd, args->size, args->offset,
- args->flag, xdata);
- break;
- }
- case GF_FOP_WRITE: {
- gfx_write_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_write_req;
-
- /*TODO : What happens when payload count is more than one? */
- req_iovec[0].iov_base = state->payload_vector[0].iov_base +
- state->write_length;
- req_iovec[0].iov_len = args->size;
-
- xdr_to_dict(&args->xdata, &xdata);
- /* The way writev fop works :
- * xdr args of write along with other args contains
- * write length not count. But when the call is wound to posix,
- * this length is not used. It is taken from the request
- * write vector that is passed down. Posix needs the vector
- * count to determine the amount of write to be done.
- * This count for writes that come as part of compound fops
- * will be 1. The vectors are merged into one under
- * GF_FOP_WRITE section of client_handle_fop_requirements()
- * in protocol client.
- */
- args_writev_store(this_args, state->fd, req_iovec, 1, args->offset,
- args->flag, state->iobref, xdata);
- state->write_length += req_iovec[0].iov_len;
- break;
- }
- case GF_FOP_STATFS: {
- gfx_statfs_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_statfs_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_statfs_store(this_args, &state->loc, xdata);
- break;
- }
- case GF_FOP_FLUSH: {
- gfx_flush_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_flush_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_flush_store(this_args, state->fd, xdata);
- break;
- }
- case GF_FOP_FSYNC: {
- gfx_fsync_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_fsync_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_fsync_store(this_args, state->fd, args->data, xdata);
- break;
- }
- case GF_FOP_SETXATTR: {
- gfx_setxattr_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_setxattr_req;
-
- xdr_to_dict(&args->dict, &xattr);
- xdr_to_dict(&args->xdata, &xdata);
- args_setxattr_store(this_args, &state->loc, xattr, args->flags,
- xdata);
- break;
- }
- case GF_FOP_GETXATTR: {
- gfx_getxattr_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_getxattr_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- gf_server_check_getxattr_cmd(frame, args->name);
-
- args_getxattr_store(this_args, &state->loc, args->name, xdata);
- break;
- }
- case GF_FOP_REMOVEXATTR: {
- gfx_removexattr_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_removexattr_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_removexattr_store(this_args, &state->loc, args->name, xdata);
- break;
- }
- case GF_FOP_OPENDIR: {
- gfx_opendir_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_opendir_req;
-
- this_args->fd = fd_create(this_args->loc.inode, frame->root->pid);
- if (!this_args->fd) {
- gf_msg("server", GF_LOG_ERROR, 0, PS_MSG_FD_CREATE_FAILED,
- "could not create the fd");
- goto out;
- }
- xdr_to_dict(&args->xdata, &xdata);
-
- args_opendir_store(this_args, &state->loc, state->fd, xdata);
- break;
- }
- case GF_FOP_FSYNCDIR: {
- gfx_fsyncdir_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_fsyncdir_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_fsyncdir_store(this_args, state->fd, args->data, xdata);
- break;
- }
- case GF_FOP_ACCESS: {
- gfx_access_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_access_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_access_store(this_args, &state->loc, args->mask, xdata);
- break;
- }
- case GF_FOP_CREATE: {
- gfx_create_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_create_req;
-
- state->loc.inode = inode_new(state->itable);
-
- state->fd = fd_create(state->loc.inode, frame->root->pid);
- if (!state->fd) {
- gf_msg("server", GF_LOG_ERROR, 0, PS_MSG_FD_CREATE_FAILED,
- "fd creation for the inode %s failed",
- state->loc.inode ? uuid_utoa(state->loc.inode->gfid)
- : NULL);
- goto out;
- }
- state->fd->flags = state->flags;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_create_store(this_args, &state->loc, args->flags, args->mode,
- args->umask, state->fd, xdata);
- break;
- }
- case GF_FOP_FTRUNCATE: {
- gfx_ftruncate_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_ftruncate_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_ftruncate_store(this_args, state->fd, args->offset, xdata);
- break;
- }
- case GF_FOP_FSTAT: {
- gfx_fstat_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_fstat_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_fstat_store(this_args, state->fd, xdata);
- break;
- }
- case GF_FOP_LK: {
- gfx_lk_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_lk_req;
-
- xdr_to_dict(&args->xdata, &xdata);
-
- switch (args->cmd) {
- case GF_LK_GETLK:
- this_args->cmd = F_GETLK;
- break;
- case GF_LK_SETLK:
- this_args->cmd = F_SETLK;
- break;
- case GF_LK_SETLKW:
- this_args->cmd = F_SETLKW;
- break;
- case GF_LK_RESLK_LCK:
- this_args->cmd = F_RESLK_LCK;
- break;
- case GF_LK_RESLK_LCKW:
- this_args->cmd = F_RESLK_LCKW;
- break;
- case GF_LK_RESLK_UNLCK:
- this_args->cmd = F_RESLK_UNLCK;
- break;
- case GF_LK_GETLK_FD:
- this_args->cmd = F_GETLK_FD;
- break;
- }
-
- gf_proto_flock_to_flock(&args->flock, &this_args->lock);
-
- switch (args->type) {
- case GF_LK_F_RDLCK:
- this_args->lock.l_type = F_RDLCK;
- break;
- case GF_LK_F_WRLCK:
- this_args->lock.l_type = F_WRLCK;
- break;
- case GF_LK_F_UNLCK:
- this_args->lock.l_type = F_UNLCK;
- break;
- default:
- gf_msg(frame->root->client->bound_xl->name, GF_LOG_ERROR, 0,
- PS_MSG_LOCK_ERROR,
- "fd - %" PRId64
- " (%s):"
- " Unknown "
- "lock type: %" PRId32 "!",
- state->resolve.fd_no,
- uuid_utoa(state->fd->inode->gfid), args->type);
- break;
- }
- args_lk_store(this_args, state->fd, this_args->cmd,
- &this_args->lock, xdata);
- break;
- }
- case GF_FOP_LOOKUP: {
- gfx_lookup_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_lookup_req;
-
- if (this_args->loc.inode)
- this_args->loc.inode = server_inode_new(state->itable,
- state->loc.gfid);
- else
- state->is_revalidate = 1;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_lookup_store(this_args, &state->loc, xdata);
- break;
- }
- case GF_FOP_READDIR: {
- gfx_readdir_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_readdir_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_readdir_store(this_args, state->fd, args->size, args->offset,
- xdata);
- break;
- }
- case GF_FOP_INODELK: {
- gfx_inodelk_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_inodelk_req;
-
- switch (args->cmd) {
- case GF_LK_GETLK:
- this_args->cmd = F_GETLK;
- break;
- case GF_LK_SETLK:
- this_args->cmd = F_SETLK;
- break;
- case GF_LK_SETLKW:
- this_args->cmd = F_SETLKW;
- break;
- }
-
- gf_proto_flock_to_flock(&args->flock, &this_args->lock);
-
- switch (args->type) {
- case GF_LK_F_RDLCK:
- this_args->lock.l_type = F_RDLCK;
- break;
- case GF_LK_F_WRLCK:
- this_args->lock.l_type = F_WRLCK;
- break;
- case GF_LK_F_UNLCK:
- this_args->lock.l_type = F_UNLCK;
- break;
- }
-
- xdr_to_dict(&args->xdata, &xdata);
- args_inodelk_store(this_args, args->volume, &state->loc,
- this_args->cmd, &this_args->lock, xdata);
- break;
- }
- case GF_FOP_FINODELK: {
- gfx_finodelk_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_finodelk_req;
-
- xdr_to_dict(&args->xdata, &xdata);
-
- switch (args->cmd) {
- case GF_LK_GETLK:
- this_args->cmd = F_GETLK;
- break;
- case GF_LK_SETLK:
- this_args->cmd = F_SETLK;
- break;
- case GF_LK_SETLKW:
- this_args->cmd = F_SETLKW;
- break;
- }
-
- gf_proto_flock_to_flock(&args->flock, &this_args->lock);
-
- switch (args->type) {
- case GF_LK_F_RDLCK:
- this_args->lock.l_type = F_RDLCK;
- break;
- case GF_LK_F_WRLCK:
- this_args->lock.l_type = F_WRLCK;
- break;
- case GF_LK_F_UNLCK:
- this_args->lock.l_type = F_UNLCK;
- break;
- }
- args_finodelk_store(this_args, args->volume, state->fd,
- this_args->cmd, &this_args->lock, xdata);
- break;
- }
- case GF_FOP_ENTRYLK: {
- gfx_entrylk_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_entrylk_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_entrylk_store(this_args, args->volume, &state->loc, args->name,
- args->cmd, args->type, xdata);
- break;
- }
- case GF_FOP_FENTRYLK: {
- gfx_fentrylk_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_fentrylk_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_fentrylk_store(this_args, args->volume, state->fd, args->name,
- args->cmd, args->type, xdata);
- break;
- }
- case GF_FOP_XATTROP: {
- gfx_xattrop_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_xattrop_req;
-
- xdr_to_dict(&args->dict, &xattr);
-
- xdr_to_dict(&args->xdata, &xdata);
- args_xattrop_store(this_args, &state->loc, args->flags, xattr,
- xdata);
- break;
- }
- case GF_FOP_FXATTROP: {
- gfx_fxattrop_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_fxattrop_req;
-
- xdr_to_dict(&args->dict, &xattr);
-
- xdr_to_dict(&args->xdata, &xdata);
-
- args_fxattrop_store(this_args, state->fd, args->flags, xattr,
- xdata);
- break;
- }
- case GF_FOP_FGETXATTR: {
- gfx_fgetxattr_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_fgetxattr_req;
-
- xdr_to_dict(&args->xdata, &xdata);
-
- args_fgetxattr_store(this_args, state->fd, args->name, xdata);
- break;
- }
- case GF_FOP_FSETXATTR: {
- gfx_fsetxattr_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_fsetxattr_req;
-
- xdr_to_dict(&args->dict, &xattr);
-
- xdr_to_dict(&args->xdata, &xdata);
-
- args_fsetxattr_store(this_args, state->fd, xattr, args->flags,
- xdata);
- break;
- }
- case GF_FOP_RCHECKSUM: {
- gfx_rchecksum_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_rchecksum_req;
-
- xdr_to_dict(&args->xdata, &xdata);
-
- args_rchecksum_store(this_args, state->fd, args->offset, args->len,
- xdata);
- break;
- }
- case GF_FOP_SETATTR: {
- gfx_setattr_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_setattr_req;
-
- xdr_to_dict(&args->xdata, &xdata);
-
- gfx_stat_to_iattx(&args->stbuf, &this_args->stat);
-
- args_setattr_store(this_args, &state->loc, &this_args->stat,
- args->valid, xdata);
- break;
- }
- case GF_FOP_FSETATTR: {
- gfx_fsetattr_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_fsetattr_req;
-
- xdr_to_dict(&args->xdata, &xdata);
-
- gfx_stat_to_iattx(&args->stbuf, &this_args->stat);
-
- args_fsetattr_store(this_args, state->fd, &this_args->stat,
- args->valid, xdata);
- break;
- }
- case GF_FOP_READDIRP: {
- gfx_readdirp_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_readdirp_req;
-
- xdr_to_dict(&args->xdata, &xdata);
-
- args_readdirp_store(this_args, state->fd, args->size, args->offset,
- xattr);
- break;
- }
- case GF_FOP_FREMOVEXATTR: {
- gfx_fremovexattr_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_fremovexattr_req;
-
- xdr_to_dict(&args->xdata, &xdata);
-
- args_fremovexattr_store(this_args, state->fd, args->name, xdata);
- break;
- }
- case GF_FOP_FALLOCATE: {
- gfx_fallocate_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_fallocate_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_fallocate_store(this_args, state->fd, args->flags,
- args->offset, args->size, xdata);
- break;
- }
- case GF_FOP_DISCARD: {
- gfx_discard_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_discard_req;
-
- xdr_to_dict(&args->xdata, &xdata);
-
- args_discard_store(this_args, state->fd, args->offset, args->size,
- xdata);
- break;
- }
- case GF_FOP_ZEROFILL: {
- gfx_zerofill_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_zerofill_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_zerofill_store(this_args, state->fd, args->offset, args->size,
- xdata);
- break;
- }
- case GF_FOP_SEEK: {
- gfx_seek_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_seek_req;
-
- xdr_to_dict(&args->xdata, &xdata);
- args_seek_store(this_args, state->fd, args->offset, args->what,
- xdata);
- break;
- }
- case GF_FOP_LEASE: {
- gfx_lease_req *args = NULL;
-
- args = &this_req->compound_req_v2_u.compound_lease_req;
-
- xdr_to_dict(&args->xdata, &xdata);
-
- gf_proto_lease_to_lease(&args->lease, &state->lease);
-
- args_lease_store(this_args, &state->loc, &state->lease, xdata);
- break;
- }
- default:
- return ENOTSUP;
- }
-out:
- if (xattr)
- dict_unref(xattr);
- if (xdata)
- dict_unref(xdata);
- return op_errno;
-}
-
-int
-server_populate_compound_response_v2(xlator_t *this, gfx_compound_rsp *rsp,
- call_frame_t *frame,
- compound_args_cbk_t *args_cbk, int index)
-{
- int op_errno = EINVAL;
- default_args_cbk_t *this_args_cbk = NULL;
- compound_rsp_v2 *this_rsp = NULL;
- server_state_t *state = NULL;
- int ret = 0;
-
- state = CALL_STATE(frame);
- this_rsp = &rsp->compound_rsp_array.compound_rsp_array_val[index];
-
- this_args_cbk = &args_cbk->rsp_list[index];
- this_rsp->fop_enum = args_cbk->enum_list[index];
-
- switch (this_rsp->fop_enum) {
- case GF_FOP_FSTAT:
- case GF_FOP_STAT: {
- gfx_common_iatt_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_stat_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
- if (!this_args_cbk->op_ret) {
- server4_post_common_iatt(state, rsp_args, &this_args_cbk->stat);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_READLINK: {
- gfx_readlink_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_readlink_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
- if (this_args_cbk->op_ret >= 0) {
- server4_post_readlink(rsp_args, &this_args_cbk->stat,
- this_args_cbk->buf);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- if (!rsp_args->path)
- rsp_args->path = "";
- break;
- }
- case GF_FOP_MKNOD:
- case GF_FOP_MKDIR:
- case GF_FOP_SYMLINK:
- case GF_FOP_LINK: {
- gfx_common_3iatt_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_mknod_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
- if (!this_args_cbk->op_ret) {
- server4_post_common_3iatt(
- state, rsp_args, this_args_cbk->inode, &this_args_cbk->stat,
- &this_args_cbk->preparent, &this_args_cbk->postparent);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_UNLINK:
- case GF_FOP_RMDIR: {
- gfx_common_2iatt_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_unlink_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
- if (!this_args_cbk->op_ret) {
- server4_post_entry_remove(state, rsp_args,
- &this_args_cbk->preparent,
- &this_args_cbk->postparent);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_RENAME: {
- gfx_rename_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_rename_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
-
- if (!this_args_cbk->op_ret) {
- server4_post_rename(
- frame, state, rsp_args, &this_args_cbk->stat,
- &this_args_cbk->preparent, &this_args_cbk->postparent,
- &this_args_cbk->preparent2, &this_args_cbk->postparent2);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_FALLOCATE:
- case GF_FOP_ZEROFILL:
- case GF_FOP_DISCARD:
- case GF_FOP_SETATTR:
- case GF_FOP_FSETATTR:
- case GF_FOP_FTRUNCATE:
- case GF_FOP_TRUNCATE:
- case GF_FOP_WRITE:
- case GF_FOP_FSYNC: {
- gfx_common_2iatt_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_truncate_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
-
- if (!this_args_cbk->op_ret) {
- server4_post_common_2iatt(rsp_args, &this_args_cbk->prestat,
- &this_args_cbk->poststat);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_OPEN:
- case GF_FOP_OPENDIR: {
- gfx_open_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_open_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
-
- if (!this_args_cbk->op_ret) {
- server4_post_open(frame, this, rsp_args, this_args_cbk->fd);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_READ: {
- gfx_read_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_read_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
-
- if (this_args_cbk->op_ret >= 0) {
- server4_post_readv(rsp_args, &this_args_cbk->stat,
- this_args_cbk->op_ret);
-
- if (!state->rsp_iobref) {
- state->rsp_iobref = this_args_cbk->iobref;
- state->rsp_count = 0;
- }
- iobref_merge(state->rsp_iobref, this_args_cbk->iobref);
- memcpy(&state->rsp_vector[state->rsp_count],
- this_args_cbk->vector,
- (this_args_cbk->count * sizeof(state->rsp_vector[0])));
- state->rsp_count += this_args_cbk->count;
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_STATFS: {
- gfx_statfs_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_statfs_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
- if (!this_args_cbk->op_ret) {
- server4_post_statfs(rsp_args, &this_args_cbk->statvfs);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_FLUSH:
- case GF_FOP_SETXATTR:
- case GF_FOP_FSETXATTR:
- case GF_FOP_REMOVEXATTR:
- case GF_FOP_FREMOVEXATTR:
- case GF_FOP_FSYNCDIR:
- case GF_FOP_ACCESS:
- case GF_FOP_INODELK:
- case GF_FOP_FINODELK:
- case GF_FOP_ENTRYLK:
- case GF_FOP_FENTRYLK: {
- gfx_common_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_flush_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_FGETXATTR:
- case GF_FOP_GETXATTR:
- case GF_FOP_XATTROP:
- case GF_FOP_FXATTROP: {
- gfx_common_dict_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_getxattr_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
-
- if (-1 != this_args_cbk->op_ret) {
- dict_to_xdr(this_args_cbk->xattr, &rsp_args->dict);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_CREATE: {
- gfx_create_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_create_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
-
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
-
- if (!this_args_cbk->op_ret) {
- rsp_args->op_ret = server4_post_create(
- frame, rsp_args, state, this, this_args_cbk->fd,
- this_args_cbk->inode, &this_args_cbk->stat,
- &this_args_cbk->preparent, &this_args_cbk->postparent);
- if (rsp_args->op_ret) {
- rsp_args->op_errno = -rsp_args->op_ret;
- rsp_args->op_ret = -1;
- }
- }
- break;
- }
- case GF_FOP_LK: {
- gfx_lk_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_lk_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
-
- if (!this_args_cbk->op_ret) {
- server4_post_lk(this, rsp_args, &this_args_cbk->lock);
- }
-
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_LOOKUP: {
- gfx_common_2iatt_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_lookup_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
- gfx_stat_from_iattx(&rsp_args->poststat,
- &this_args_cbk->postparent);
-
- if (!this_args_cbk->op_ret) {
- server4_post_lookup(rsp_args, frame, state,
- this_args_cbk->inode, &this_args_cbk->stat);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_READDIR: {
- gfx_readdir_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_readdir_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
-
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
-
- if (this_args_cbk->op_ret > 0) {
- ret = server4_post_readdir(rsp_args, &this_args_cbk->entries);
- if (ret < 0) {
- rsp_args->op_ret = ret;
- rsp_args->op_errno = ENOMEM;
- }
- }
- break;
- }
- case GF_FOP_RCHECKSUM: {
- gfx_rchecksum_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_rchecksum_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
-
- if (!this_args_cbk->op_ret) {
- server4_post_rchecksum(rsp_args, this_args_cbk->weak_checksum,
- this_args_cbk->strong_checksum);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_READDIRP: {
- gfx_readdirp_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_readdirp_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
-
- if (this_args_cbk->op_ret > 0) {
- ret = server4_post_readdirp(rsp_args, &this_args_cbk->entries);
- if (ret < 0) {
- rsp_args->op_ret = ret;
- rsp_args->op_errno = ENOMEM;
- goto out;
- }
- gf_link_inodes_from_dirent(this, state->fd->inode,
- &this_args_cbk->entries);
- }
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_SEEK: {
- gfx_seek_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_seek_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_LEASE: {
- gfx_lease_rsp *rsp_args = NULL;
-
- rsp_args = &this_rsp->compound_rsp_v2_u.compound_lease_rsp;
-
- dict_to_xdr(this_args_cbk->xdata, &rsp_args->xdata);
-
- if (!this_args_cbk->op_ret) {
- server4_post_lease(rsp_args, &this_args_cbk->lease);
- }
-
- rsp_args->op_ret = this_args_cbk->op_ret;
- rsp_args->op_errno = gf_errno_to_error(this_args_cbk->op_errno);
- break;
- }
- case GF_FOP_COPY_FILE_RANGE:
- /* Not handling this fop. */
- default:
- return ENOTSUP;
- }
- op_errno = 0;
-out:
- return op_errno;
-}
-/* This works only when the compound fop acts on one loc/inode/gfid.
- * If compound fops on more than one inode is required, multiple
- * resolve and resumes will have to be done. This will have to change.
- * Right now, multiple unlinks, rmdirs etc is are not supported.
- * This can be added for future enhancements.
- */
-int
-server_get_compound_resolve_v2(server_state_t *state, gfx_compound_req *req)
-{
- int i = 0;
- compound_req_v2 *array = NULL;
-
- array = &req->compound_req_array.compound_req_array_val[i];
-
- switch (array->fop_enum) {
- case GF_FOP_STAT: {
- gfx_stat_req this_req = array[i]
- .compound_req_v2_u.compound_stat_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_READLINK: {
- gfx_readlink_req this_req =
- array[i].compound_req_v2_u.compound_readlink_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_MKNOD: {
- gfx_mknod_req this_req = array[i]
- .compound_req_v2_u.compound_mknod_req;
-
- state->resolve.type = RESOLVE_NOT;
- memcpy(state->resolve.pargfid, this_req.pargfid, 16);
- state->resolve.bname = gf_strdup(this_req.bname);
- break;
- }
- case GF_FOP_MKDIR: {
- gfx_mkdir_req this_req = array[i]
- .compound_req_v2_u.compound_mkdir_req;
-
- state->resolve.type = RESOLVE_NOT;
- memcpy(state->resolve.pargfid, this_req.pargfid, 16);
- state->resolve.bname = gf_strdup(this_req.bname);
- break;
- }
- case GF_FOP_UNLINK: {
- gfx_unlink_req this_req =
- array[i].compound_req_v2_u.compound_unlink_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.pargfid, this_req.pargfid, 16);
- state->resolve.bname = gf_strdup(this_req.bname);
- break;
- }
- case GF_FOP_RMDIR: {
- gfx_rmdir_req this_req = array[i]
- .compound_req_v2_u.compound_rmdir_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.pargfid, this_req.pargfid, 16);
- state->resolve.bname = gf_strdup(this_req.bname);
- break;
- }
- case GF_FOP_SYMLINK: {
- gfx_symlink_req this_req =
- array[i].compound_req_v2_u.compound_symlink_req;
-
- state->resolve.type = RESOLVE_NOT;
- memcpy(state->resolve.pargfid, this_req.pargfid, 16);
- state->resolve.bname = gf_strdup(this_req.bname);
- break;
- }
- case GF_FOP_RENAME: {
- gfx_rename_req this_req =
- array[i].compound_req_v2_u.compound_rename_req;
-
- state->resolve.type = RESOLVE_MUST;
- state->resolve.bname = gf_strdup(this_req.oldbname);
- memcpy(state->resolve.pargfid, this_req.oldgfid, 16);
-
- state->resolve2.type = RESOLVE_MAY;
- state->resolve2.bname = gf_strdup(this_req.newbname);
- memcpy(state->resolve2.pargfid, this_req.newgfid, 16);
- break;
- }
- case GF_FOP_LINK: {
- gfx_link_req this_req = array[i]
- .compound_req_v2_u.compound_link_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.oldgfid, 16);
-
- state->resolve2.type = RESOLVE_NOT;
- state->resolve2.bname = gf_strdup(this_req.newbname);
- memcpy(state->resolve2.pargfid, this_req.newgfid, 16);
- break;
- }
- case GF_FOP_TRUNCATE: {
- gfx_truncate_req this_req =
- array[i].compound_req_v2_u.compound_truncate_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_OPEN: {
- gfx_open_req this_req = array[i]
- .compound_req_v2_u.compound_open_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_READ: {
- gfx_read_req this_req = array[i]
- .compound_req_v2_u.compound_read_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_WRITE: {
- gfx_write_req this_req = array[i]
- .compound_req_v2_u.compound_write_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_STATFS: {
- gfx_statfs_req this_req =
- array[i].compound_req_v2_u.compound_statfs_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_FLUSH: {
- gfx_flush_req this_req = array[i]
- .compound_req_v2_u.compound_flush_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_FSYNC: {
- gfx_fsync_req this_req = array[i]
- .compound_req_v2_u.compound_fsync_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_SETXATTR: {
- gfx_setxattr_req this_req =
- array[i].compound_req_v2_u.compound_setxattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_GETXATTR: {
- gfx_getxattr_req this_req =
- array[i].compound_req_v2_u.compound_getxattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_REMOVEXATTR: {
- gfx_removexattr_req this_req =
- array[i].compound_req_v2_u.compound_removexattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_OPENDIR: {
- gfx_opendir_req this_req =
- array[i].compound_req_v2_u.compound_opendir_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_FSYNCDIR: {
- gfx_fsyncdir_req this_req =
- array[i].compound_req_v2_u.compound_fsyncdir_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_ACCESS: {
- gfx_access_req this_req =
- array[i].compound_req_v2_u.compound_access_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_CREATE: {
- gfx_create_req this_req =
- array[i].compound_req_v2_u.compound_create_req;
-
- state->flags = gf_flags_to_flags(this_req.flags);
- if (state->flags & O_EXCL) {
- state->resolve.type = RESOLVE_NOT;
- } else {
- state->resolve.type = RESOLVE_DONTCARE;
- }
-
- memcpy(state->resolve.pargfid, this_req.pargfid, 16);
- state->resolve.bname = gf_strdup(this_req.bname);
- break;
- }
- case GF_FOP_FTRUNCATE: {
- gfx_ftruncate_req this_req =
- array[i].compound_req_v2_u.compound_ftruncate_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_FSTAT: {
- gfx_fstat_req this_req = array[i]
- .compound_req_v2_u.compound_fstat_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_LK: {
- gfx_lk_req this_req = array[i].compound_req_v2_u.compound_lk_req;
-
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_LOOKUP: {
- gfx_lookup_req this_req =
- array[i].compound_req_v2_u.compound_lookup_req;
- state->resolve.type = RESOLVE_DONTCARE;
-
- if (this_req.bname && strcmp(this_req.bname, "")) {
- memcpy(state->resolve.pargfid, this_req.pargfid, 16);
- state->resolve.bname = gf_strdup(this_req.bname);
- } else {
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- }
- break;
- }
- case GF_FOP_READDIR: {
- gfx_readdir_req this_req =
- array[i].compound_req_v2_u.compound_readdir_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_INODELK: {
- gfx_inodelk_req this_req =
- array[i].compound_req_v2_u.compound_inodelk_req;
-
- state->resolve.type = RESOLVE_EXACT;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_FINODELK: {
- gfx_finodelk_req this_req =
- array[i].compound_req_v2_u.compound_finodelk_req;
-
- state->resolve.type = RESOLVE_EXACT;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_ENTRYLK: {
- gfx_entrylk_req this_req =
- array[i].compound_req_v2_u.compound_entrylk_req;
-
- state->resolve.type = RESOLVE_EXACT;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_FENTRYLK: {
- gfx_fentrylk_req this_req =
- array[i].compound_req_v2_u.compound_fentrylk_req;
-
- state->resolve.type = RESOLVE_EXACT;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_XATTROP: {
- gfx_xattrop_req this_req =
- array[i].compound_req_v2_u.compound_xattrop_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_FXATTROP: {
- gfx_fxattrop_req this_req =
- array[i].compound_req_v2_u.compound_fxattrop_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_FGETXATTR: {
- gfx_fgetxattr_req this_req =
- array[i].compound_req_v2_u.compound_fgetxattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_FSETXATTR: {
- gfx_fsetxattr_req this_req =
- array[i].compound_req_v2_u.compound_fsetxattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_RCHECKSUM: {
- gfx_rchecksum_req this_req =
- array[i].compound_req_v2_u.compound_rchecksum_req;
-
- state->resolve.type = RESOLVE_MAY;
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_SETATTR: {
- gfx_setattr_req this_req =
- array[i].compound_req_v2_u.compound_setattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_FSETATTR: {
- gfx_fsetattr_req this_req =
- array[i].compound_req_v2_u.compound_fsetattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_READDIRP: {
- gfx_readdirp_req this_req =
- array[i].compound_req_v2_u.compound_readdirp_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_FREMOVEXATTR: {
- gfx_fremovexattr_req this_req =
- array[i].compound_req_v2_u.compound_fremovexattr_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_FALLOCATE: {
- gfx_fallocate_req this_req =
- array[i].compound_req_v2_u.compound_fallocate_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_DISCARD: {
- gfx_discard_req this_req =
- array[i].compound_req_v2_u.compound_discard_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_ZEROFILL: {
- gfx_zerofill_req this_req =
- array[i].compound_req_v2_u.compound_zerofill_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_SEEK: {
- gfx_seek_req this_req = array[i]
- .compound_req_v2_u.compound_seek_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- state->resolve.fd_no = this_req.fd;
- break;
- }
- case GF_FOP_LEASE: {
- gfx_lease_req this_req = array[i]
- .compound_req_v2_u.compound_lease_req;
-
- state->resolve.type = RESOLVE_MUST;
- memcpy(state->resolve.gfid, this_req.gfid, 16);
- break;
- }
- case GF_FOP_COPY_FILE_RANGE:
- /*
- * Compound operations is not being used anymore and
- * planned for subsequent removal. Hence not handling
- * this fop here.
- */
- default:
- return ENOTSUP;
- }
- return 0;
-}
-
-void
-server_compound_rsp_cleanup_v2(gfx_compound_rsp *rsp, compound_args_cbk_t *args)
-{
- int i, len = 0;
- compound_rsp_v2 *this_rsp = NULL;
-
- if (!rsp->compound_rsp_array.compound_rsp_array_val)
- return;
-
- len = rsp->compound_rsp_array.compound_rsp_array_len;
-
- for (i = 0; i < len; i++) {
- this_rsp = &rsp->compound_rsp_array.compound_rsp_array_val[i];
- switch (args->enum_list[i]) {
- case GF_FOP_STAT:
- SERVER4_FOP_RSP_CLEANUP(rsp, stat, i, common_iatt);
- break;
- case GF_FOP_MKNOD:
- SERVER4_FOP_RSP_CLEANUP(rsp, mknod, i, common_3iatt);
- break;
- case GF_FOP_MKDIR:
- SERVER4_FOP_RSP_CLEANUP(rsp, mkdir, i, common_3iatt);
- break;
- case GF_FOP_UNLINK:
- SERVER4_FOP_RSP_CLEANUP(rsp, unlink, i, common_2iatt);
- break;
- case GF_FOP_RMDIR:
- SERVER4_FOP_RSP_CLEANUP(rsp, rmdir, i, common_2iatt);
- break;
- case GF_FOP_SYMLINK:
- SERVER4_FOP_RSP_CLEANUP(rsp, symlink, i, common_3iatt);
- break;
- case GF_FOP_RENAME:
- SERVER4_FOP_RSP_CLEANUP(rsp, rename, i, rename);
- break;
- case GF_FOP_LINK:
- SERVER4_FOP_RSP_CLEANUP(rsp, link, i, common_3iatt);
- break;
- case GF_FOP_TRUNCATE:
- SERVER4_FOP_RSP_CLEANUP(rsp, truncate, i, common_2iatt);
- break;
- case GF_FOP_OPEN:
- SERVER4_FOP_RSP_CLEANUP(rsp, open, i, open);
- break;
- case GF_FOP_READ:
- SERVER4_FOP_RSP_CLEANUP(rsp, read, i, read);
- break;
- case GF_FOP_WRITE:
- SERVER4_FOP_RSP_CLEANUP(rsp, write, i, common_2iatt);
- break;
- case GF_FOP_STATFS:
- SERVER4_FOP_RSP_CLEANUP(rsp, statfs, i, statfs);
- break;
- case GF_FOP_FSYNC:
- SERVER4_FOP_RSP_CLEANUP(rsp, fsync, i, common_2iatt);
- break;
- case GF_FOP_OPENDIR:
- SERVER4_FOP_RSP_CLEANUP(rsp, opendir, i, open);
- break;
- case GF_FOP_CREATE:
- SERVER4_FOP_RSP_CLEANUP(rsp, create, i, create);
- break;
- case GF_FOP_FTRUNCATE:
- SERVER4_FOP_RSP_CLEANUP(rsp, ftruncate, i, common_2iatt);
- break;
- case GF_FOP_FSTAT:
- SERVER4_FOP_RSP_CLEANUP(rsp, fstat, i, common_iatt);
- break;
- case GF_FOP_LK:
- SERVER4_FOP_RSP_CLEANUP(rsp, lk, i, lk);
- break;
- case GF_FOP_LOOKUP:
- SERVER4_FOP_RSP_CLEANUP(rsp, lookup, i, common_2iatt);
- break;
- case GF_FOP_SETATTR:
- SERVER4_FOP_RSP_CLEANUP(rsp, setattr, i, common_2iatt);
- break;
- case GF_FOP_FSETATTR:
- SERVER4_FOP_RSP_CLEANUP(rsp, fsetattr, i, common_2iatt);
- break;
- case GF_FOP_FALLOCATE:
- SERVER4_FOP_RSP_CLEANUP(rsp, fallocate, i, common_2iatt);
- break;
- case GF_FOP_DISCARD:
- SERVER4_FOP_RSP_CLEANUP(rsp, discard, i, common_2iatt);
- break;
- case GF_FOP_ZEROFILL:
- SERVER4_FOP_RSP_CLEANUP(rsp, zerofill, i, common_2iatt);
- break;
- case GF_FOP_SEEK:
- SERVER4_FOP_RSP_CLEANUP(rsp, seek, i, seek);
- break;
- case GF_FOP_LEASE:
- SERVER4_FOP_RSP_CLEANUP(rsp, lease, i, lease);
- break;
- case GF_FOP_READLINK:
- SERVER4_FOP_RSP_CLEANUP(rsp, readlink, i, readlink);
- break;
- case GF_FOP_RCHECKSUM:
- SERVER4_FOP_RSP_CLEANUP(rsp, rchecksum, i, rchecksum);
- break;
- /* fops that use gfx_common_rsp */
- case GF_FOP_IPC:
- SERVER4_COMMON_RSP_CLEANUP(rsp, ipc, i);
- break;
- case GF_FOP_FLUSH:
- SERVER4_COMMON_RSP_CLEANUP(rsp, flush, i);
- break;
- case GF_FOP_SETXATTR:
- SERVER4_COMMON_RSP_CLEANUP(rsp, setxattr, i);
- break;
- case GF_FOP_REMOVEXATTR:
- SERVER4_COMMON_RSP_CLEANUP(rsp, removexattr, i);
- break;
- case GF_FOP_FSETXATTR:
- SERVER4_COMMON_RSP_CLEANUP(rsp, fsetxattr, i);
- break;
- case GF_FOP_FREMOVEXATTR:
- SERVER4_COMMON_RSP_CLEANUP(rsp, fremovexattr, i);
- break;
- case GF_FOP_FSYNCDIR:
- SERVER4_COMMON_RSP_CLEANUP(rsp, fsyncdir, i);
- break;
- case GF_FOP_ACCESS:
- SERVER4_COMMON_RSP_CLEANUP(rsp, access, i);
- break;
- case GF_FOP_INODELK:
- SERVER4_COMMON_RSP_CLEANUP(rsp, inodelk, i);
- break;
- case GF_FOP_FINODELK:
- SERVER4_COMMON_RSP_CLEANUP(rsp, finodelk, i);
- break;
- case GF_FOP_ENTRYLK:
- SERVER4_COMMON_RSP_CLEANUP(rsp, entrylk, i);
- break;
- case GF_FOP_FENTRYLK:
- SERVER4_COMMON_RSP_CLEANUP(rsp, fentrylk, i);
- break;
- /* fops that need extra cleanup */
- case GF_FOP_XATTROP: {
- gfx_common_dict_rsp *tmp_rsp = &CPD4_RSP_FIELD(this_rsp,
- xattrop);
- SERVER4_FOP_RSP_CLEANUP(rsp, xattrop, i, common_dict);
- GF_FREE(tmp_rsp->dict.pairs.pairs_val);
- break;
- }
- case GF_FOP_FXATTROP: {
- gfx_common_dict_rsp *tmp_rsp = &CPD4_RSP_FIELD(this_rsp,
- fxattrop);
- SERVER4_FOP_RSP_CLEANUP(rsp, fxattrop, i, common_dict);
- GF_FREE(tmp_rsp->dict.pairs.pairs_val);
- break;
- }
- case GF_FOP_READDIR: {
- gfx_readdir_rsp *tmp_rsp = &CPD4_RSP_FIELD(this_rsp, readdir);
- SERVER4_FOP_RSP_CLEANUP(rsp, readdir, i, readdir);
- readdir_rsp_cleanup_v2(tmp_rsp);
- break;
- }
- case GF_FOP_READDIRP: {
- gfx_readdirp_rsp *tmp_rsp = &CPD4_RSP_FIELD(this_rsp, readdirp);
- SERVER4_FOP_RSP_CLEANUP(rsp, readdirp, i, readdirp);
- readdirp_rsp_cleanup_v2(tmp_rsp);
- break;
- }
- case GF_FOP_GETXATTR: {
- gfx_common_dict_rsp *tmp_rsp = &CPD4_RSP_FIELD(this_rsp,
- getxattr);
- SERVER4_FOP_RSP_CLEANUP(rsp, getxattr, i, common_dict);
- GF_FREE(tmp_rsp->dict.pairs.pairs_val);
- break;
- }
- case GF_FOP_FGETXATTR: {
- gfx_common_dict_rsp *tmp_rsp = &CPD4_RSP_FIELD(this_rsp,
- fgetxattr);
- SERVER4_FOP_RSP_CLEANUP(rsp, fgetxattr, i, common_dict);
- GF_FREE(tmp_rsp->dict.pairs.pairs_val);
- break;
- }
- default:
- break;
- }
- }
- GF_FREE(rsp->compound_rsp_array.compound_rsp_array_val);
- return;
-}
-
-void
-server_compound_req_cleanup_v2(gfx_compound_req *req, int len)
-{
- int i = 0;
- compound_req_v2 *curr_req = NULL;
-
- if (!req->compound_req_array.compound_req_array_val)
- return;
-
- for (i = 0; i < len; i++) {
- curr_req = &req->compound_req_array.compound_req_array_val[i];
-
- switch (curr_req->fop_enum) {
- case GF_FOP_MKDIR: {
- gfx_mkdir_req *args = &CPD4_REQ_FIELD(curr_req, mkdir);
-
- free(args->bname);
- break;
- }
- case GF_FOP_UNLINK: {
- gfx_unlink_req *args = &CPD4_REQ_FIELD(curr_req, unlink);
- free(args->bname);
- break;
- }
- case GF_FOP_RMDIR: {
- gfx_rmdir_req *args = &CPD4_REQ_FIELD(curr_req, rmdir);
- free(args->bname);
- break;
- }
- case GF_FOP_SYMLINK: {
- gfx_symlink_req *args = &CPD4_REQ_FIELD(curr_req, symlink);
- free(args->bname);
- free(args->linkname);
- break;
- }
- case GF_FOP_RENAME: {
- gfx_rename_req *args = &CPD4_REQ_FIELD(curr_req, rename);
- free(args->oldbname);
- free(args->newbname);
- break;
- }
- case GF_FOP_LINK: {
- gfx_link_req *args = &CPD4_REQ_FIELD(curr_req, link);
- free(args->newbname);
- break;
- }
- case GF_FOP_GETXATTR: {
- gfx_getxattr_req *args = &CPD4_REQ_FIELD(curr_req, getxattr);
-
- free(args->name);
- break;
- }
- case GF_FOP_REMOVEXATTR: {
- gfx_removexattr_req *args = &CPD4_REQ_FIELD(curr_req,
- removexattr);
-
- free(args->name);
- break;
- }
- case GF_FOP_CREATE: {
- gfx_create_req *args = &CPD4_REQ_FIELD(curr_req, create);
-
- free(args->bname);
- break;
- }
- case GF_FOP_LK: {
- gfx_lk_req *args = &CPD4_REQ_FIELD(curr_req, lk);
- free(args->flock.lk_owner.lk_owner_val);
- break;
- }
- case GF_FOP_LOOKUP: {
- gfx_lookup_req *args = &CPD4_REQ_FIELD(curr_req, lookup);
- free(args->bname);
- break;
- }
- case GF_FOP_INODELK: {
- gfx_inodelk_req *args = &CPD4_REQ_FIELD(curr_req, inodelk);
-
- free(args->volume);
- free(args->flock.lk_owner.lk_owner_val);
- break;
- }
- case GF_FOP_FINODELK: {
- gfx_finodelk_req *args = &CPD4_REQ_FIELD(curr_req, finodelk);
-
- free(args->volume);
- free(args->flock.lk_owner.lk_owner_val);
- break;
- }
- case GF_FOP_ENTRYLK: {
- gfx_entrylk_req *args = &CPD4_REQ_FIELD(curr_req, entrylk);
-
- free(args->volume);
- free(args->name);
- break;
- }
- case GF_FOP_FENTRYLK: {
- gfx_fentrylk_req *args = &CPD4_REQ_FIELD(curr_req, fentrylk);
-
- free(args->volume);
- free(args->name);
- break;
- }
- case GF_FOP_FGETXATTR: {
- gfx_fgetxattr_req *args = &CPD4_REQ_FIELD(curr_req, fgetxattr);
-
- free(args->name);
- break;
- }
- case GF_FOP_FREMOVEXATTR: {
- gfx_fremovexattr_req *args = &CPD4_REQ_FIELD(curr_req,
- fremovexattr);
- free(args->name);
- break;
- }
- default:
- break;
- }
- }
-
- return;
-}