/*
* Copyright (c) 2012 Red Hat, Inc. <http://www.redhat.com>
* This file is part of GlusterFS.
*
* This file is licensed to you under your choice of the GNU Lesser
* General Public License, version 3 or any later version (LGPLv3 or
* later), or the GNU General Public License, version 2 (GPLv2), in all
* cases as published by the Free Software Foundation.
*/
#ifdef RPC_XDR
%#include "rpc-pragmas.h"
#endif
%#include <glusterfs/compat.h>
%#include "glusterfs-fops.h"
%#include "glusterfs3-xdr.h"
/* Need to consume iattx and new dict in all the fops */
struct gfx_iattx {
opaque ia_gfid[16];
unsigned hyper ia_flags;
unsigned hyper ia_ino; /* inode number */
unsigned hyper ia_dev; /* backing device ID */
unsigned hyper ia_rdev; /* device ID (if special file) */
unsigned hyper ia_size; /* file size in bytes */
unsigned hyper ia_blocks; /* number of 512B blocks allocated */
unsigned hyper ia_attributes; /* chattr related:compressed, immutable,
* append only, encrypted etc.*/
unsigned hyper ia_attributes_mask; /* Mask for the attributes */
hyper ia_atime; /* last access time */
hyper ia_mtime; /* last modification time */
hyper ia_ctime; /* last status change time */
hyper ia_btime; /* creation time. Fill using statx */
unsigned int ia_atime_nsec;
unsigned int ia_mtime_nsec;
unsigned int ia_ctime_nsec;
unsigned int ia_btime_nsec;
unsigned int ia_nlink; /* Link count */
unsigned int ia_uid; /* user ID of owner */
unsigned int ia_gid; /* group ID of owner */
unsigned int ia_blksize; /* blocksize for filesystem I/O */
unsigned int mode; /* type of file and rwx mode */
};
union gfx_value switch (gf_dict_data_type_t type) {
case GF_DATA_TYPE_INT:
hyper value_int;
case GF_DATA_TYPE_UINT:
unsigned hyper value_uint;
case GF_DATA_TYPE_DOUBLE:
double value_dbl;
case GF_DATA_TYPE_STR:
opaque val_string<>;
case GF_DATA_TYPE_IATT:
gfx_iattx iatt;
case GF_DATA_TYPE_GFUUID:
opaque uuid[16];
case GF_DATA_TYPE_PTR:
case GF_DATA_TYPE_STR_OLD:
opaque other<>;
};
/* AUTH */
/* This is used in the rpc header part itself, And not program payload.
Avoid sending large data load here. Allowed maximum is 400 bytes.
Ref: http://tools.ietf.org/html/rfc5531#section-8.2
this is also handled in xdr-common.h
*/
struct auth_glusterfs_params_v3 {
int pid;
unsigned int uid;
unsigned int gid;
/* flags */
/* Makes sense to use it for each bits */
/* 0x1 == IS_INTERNAL? */
/* Another 31 bits are reserved */
unsigned int flags;
/* birth time of the frame / call */
unsigned int ctime_nsec; /* good to have 32bit for this */
unsigned hyper ctime_sec;
unsigned int groups<>;
opaque lk_owner<>;
};
struct gfx_dict_pair {
opaque key<>;
gfx_value value;
};
struct gfx_dict {
unsigned int xdr_size;
int count;
gfx_dict_pair pairs<>;
};
/* FOPS */
struct gfx_common_rsp {
int op_ret;
int op_errno;
gfx_dict xdata; /* Extra data */
};
struct gfx_common_iatt_rsp {
int op_ret;
int op_errno;
gfx_dict xdata;
gfx_iattx stat;
};
struct gfx_common_2iatt_rsp {
int op_ret;
int op_errno;
gfx_dict xdata;
gfx_iattx prestat;
gfx_iattx poststat;
};
struct gfx_common_3iatt_rsp {
int op_ret;
int op_errno;
gfx_dict xdata; /* Extra data */
gfx_iattx stat;
gfx_iattx preparent;
gfx_iattx postparent;
};
struct gfx_fsetattr_req {
opaque gfid[16];
hyper fd;
gfx_iattx stbuf;
int valid;
gfx_dict xdata; /* Extra data */
};
struct gfx_rchecksum_req {
opaque gfid[16];
hyper fd;
unsigned hyper offset;
unsigned int len;
unsigned int flags;
gfx_dict xdata; /* Extra data */
};
struct gfx_icreate_req {
opaque gfid[16];
unsigned int mode;
gfx_dict xdata;
};
struct gfx_put_req {
opaque pargfid[16];
string bname<>;
unsigned int mode;
unsigned int umask;
unsigned int flag;
u_quad_t offset;
unsigned int size;
gfx_dict xattr;
gfx_dict xdata;
};
struct gfx_namelink_req {
opaque pargfid[16];
string bname<>;
gfx_dict xdata;
};
/* Define every fops */
/* Changes from Version 3:
1. Dict has its own type instead of being opaque
2. Iattx instead of iatt on wire
3. gfid has 4 extra bytes so it can be used for future
*/
struct gfx_stat_req {
opaque gfid[16];
gfx_dict xdata;
};
struct gfx_readlink_req {
opaque gfid[16];
unsigned int size;
gfx_dict xdata; /* Extra data */
};
struct gfx_readlink_rsp {
int op_ret;
int op_errno;
gfx_dict xdata; /* Extra data */
gfx_iattx buf;
string path<>; /* NULL terminated */
};
struct gfx_mknod_req {
opaque pargfid[16];
u_quad_t dev;
unsigned int mode;
unsigned int umask;
string bname<>; /* NULL terminated */
gfx_dict xdata; /* Extra data */
};
struct gfx_mkdir_req {
opaque pargfid[16];
unsigned int mode;
unsigned int umask;
string bname<>; /* NULL terminated */
gfx_dict xdata; /* Extra data */
};
struct gfx_unlink_req {
opaque pargfid[16];
string bname<>; /* NULL terminated */
unsigned int xflags;
gfx_dict xdata; /* Extra data */
};
struct gfx_rmdir_req {
opaque pargfid[16];
int xflags;
string bname<>; /* NULL terminated */
gfx_dict xdata; /* Extra data */
};
struct gfx_symlink_req {
opaque pargfid[16];
string bname<>;
unsigned int umask;
string linkname<>;
gfx_dict xdata; /* Extra data */
};
struct gfx_rename_req {
opaque oldgfid[16];
opaque newgfid[16];
string oldbname<>; /* NULL terminated */
string newbname<>; /* NULL terminated */
gfx_dict xdata; /* Extra data */
};
struct gfx_rename_rsp {
int op_ret;
int op_errno;
gfx_dict xdata; /* Extra data */
gfx_iattx stat;
gfx_iattx preoldparent;
gfx_iattx postoldparent;
gfx_iattx prenewparent;
gfx_iattx postnewparent;
};
struct gfx_link_req {
opaque oldgfid[16];
opaque newgfid[16];
string newbname<>;
gfx_dict xdata; /* Extra data */
};
struct gfx_truncate_req {
opaque gfid[16];
u_quad_t offset;
gfx_dict xdata; /* Extra data */
};
struct gfx_open_req {
opaque gfid[16];
unsigned int flags;
gfx_dict xdata; /* Extra data */
};
struct gfx_open_rsp {
int op_ret;
int op_errno;
gfx_dict xdata; /* Extra data */
quad_t fd;
};
struct gfx_opendir_req {
opaque gfid[16];
gfx_dict xdata; /* Extra data */
} ;
struct gfx_read_req {
opaque gfid[16];
quad_t fd;
u_quad_t offset;
unsigned int size;
unsigned int flag;
gfx_dict xdata; /* Extra data */
};
struct gfx_read_rsp {
int op_ret;
int op_errno;
gfx_iattx stat;
unsigned int size;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_lookup_req {
opaque gfid[16];
opaque pargfid[16];
unsigned int flags;
string bname<>;
gfx_dict xdata; /* Extra data */
};
struct gfx_write_req {
opaque gfid[16];
quad_t fd;
u_quad_t offset;
unsigned int size;
unsigned int flag;
gfx_dict xdata; /* Extra data */
};
struct gfx_statfs_req {
opaque gfid[16];
gfx_dict xdata; /* Extra data */
} ;
struct gfx_statfs_rsp {
int op_ret;
int op_errno;
gfx_dict xdata; /* Extra data */
gf_statfs statfs;
} ;
struct gfx_lk_req {
opaque gfid[16];
int64_t fd;
unsigned int cmd;
unsigned int type;
gf_proto_flock flock;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_lk_rsp {
int op_ret;
int op_errno;
gfx_dict xdata; /* Extra data */
gf_proto_flock flock;
} ;
struct gfx_lease_req {
opaque gfid[16];
gf_proto_lease lease;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_lease_rsp {
int op_ret;
int op_errno;
gfx_dict xdata; /* Extra data */
gf_proto_lease lease;
} ;
struct gfx_recall_lease_req {
opaque gfid[16];
unsigned int lease_type;
opaque tid[16];
gfx_dict xdata; /* Extra data */
} ;
struct gfx_inodelk_req {
opaque gfid[16];
unsigned int cmd;
unsigned int type;
gf_proto_flock flock;
string volume<>;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_finodelk_req {
opaque gfid[16];
quad_t fd;
unsigned int cmd;
unsigned int type;
gf_proto_flock flock;
string volume<>;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_flush_req {
opaque gfid[16];
quad_t fd;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_fsync_req {
opaque gfid[16];
quad_t fd;
unsigned int data;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_setxattr_req {
opaque gfid[16];
unsigned int flags;
gfx_dict dict;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_fsetxattr_req {
opaque gfid[16];
int64_t fd;
unsigned int flags;
gfx_dict dict;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_xattrop_req {
opaque gfid[16];
unsigned int flags;
gfx_dict dict;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_common_dict_rsp {
int op_ret;
int op_errno;
gfx_dict xdata; /* Extra data */
gfx_dict dict;
gfx_iattx prestat;
gfx_iattx poststat;
};
struct gfx_fxattrop_req {
opaque gfid[16];
quad_t fd;
unsigned int flags;
gfx_dict dict;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_getxattr_req {
opaque gfid[16];
unsigned int namelen;
string name<>;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_fgetxattr_req {
opaque gfid[16];
quad_t fd;
unsigned int namelen;
string name<>;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_removexattr_req {
opaque gfid[16];
string name<>;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_fremovexattr_req {
opaque gfid[16];
quad_t fd;
string name<>;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_fsyncdir_req {
opaque gfid[16];
quad_t fd;
int data;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_readdir_req {
opaque gfid[16];
quad_t fd;
u_quad_t offset;
unsigned int size;
gfx_dict xdata; /* Extra data */
};
struct gfx_readdirp_req {
opaque gfid[16];
quad_t fd;
u_quad_t offset;
unsigned int size;
gfx_dict xdata;
} ;
struct gfx_access_req {
opaque gfid[16];
unsigned int mask;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_create_req {
opaque pargfid[16];
unsigned int flags;
unsigned int mode;
unsigned int umask;
string bname<>;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_create_rsp {
int op_ret;
int op_errno;
gfx_dict xdata; /* Extra data */
gfx_iattx stat;
u_quad_t fd;
gfx_iattx preparent;
gfx_iattx postparent;
} ;
struct gfx_ftruncate_req {
opaque gfid[16];
quad_t fd;
u_quad_t offset;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_fstat_req {
opaque gfid[16];
quad_t fd;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_entrylk_req {
opaque gfid[16];
unsigned int cmd;
unsigned int type;
u_quad_t namelen;
string name<>;
string volume<>;
gfx_dict xdata; /* Extra data */
};
struct gfx_fentrylk_req {
opaque gfid[16];
quad_t fd;
unsigned int cmd;
unsigned int type;
u_quad_t namelen;
string name<>;
string volume<>;
gfx_dict xdata; /* Extra data */
};
struct gfx_setattr_req {
opaque gfid[16];
gfx_iattx stbuf;
int valid;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_fallocate_req {
opaque gfid[16];
quad_t fd;
unsigned int flags;
u_quad_t offset;
u_quad_t size;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_discard_req {
opaque gfid[16];
quad_t fd;
u_quad_t offset;
u_quad_t size;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_zerofill_req {
opaque gfid[16];
quad_t fd;
u_quad_t offset;
u_quad_t size;
gfx_dict xdata;
} ;
struct gfx_rchecksum_rsp {
int op_ret;
int op_errno;
gfx_dict xdata; /* Extra data */
unsigned int flags;
unsigned int weak_checksum;
opaque strong_checksum<>;
} ;
struct gfx_ipc_req {
int op;
gfx_dict xdata;
};
struct gfx_seek_req {
opaque gfid[16];
quad_t fd;
u_quad_t offset;
int what;
gfx_dict xdata;
};
struct gfx_seek_rsp {
int op_ret;
int op_errno;
gfx_dict xdata;
u_quad_t offset;
};
struct gfx_setvolume_req {
gfx_dict dict;
} ;
struct gfx_copy_file_range_req {
opaque gfid1[16];
opaque gfid2[16];
quad_t fd_in;
quad_t fd_out;
u_quad_t off_in;
u_quad_t off_out;
unsigned int size;
unsigned int flag;
gfx_dict xdata; /* Extra data */
};
struct gfx_setvolume_rsp {
int op_ret;
int op_errno;
gfx_dict dict;
} ;
struct gfx_getspec_req {
unsigned int flags;
string key<>;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_getspec_rsp {
int op_ret;
int op_errno;
string spec<>;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_notify_req {
unsigned int flags;
string buf<>;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_notify_rsp {
int op_ret;
int op_errno;
unsigned int flags;
string buf<>;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_releasedir_req {
opaque gfid[16];
quad_t fd;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_release_req {
opaque gfid[16];
quad_t fd;
gfx_dict xdata; /* Extra data */
} ;
struct gfx_dirlist {
u_quad_t d_ino;
u_quad_t d_off;
unsigned int d_len;
unsigned int d_type;
string name<>;
gfx_dirlist *nextentry;
};
struct gfx_readdir_rsp {
int op_ret;
int op_errno;
gfx_dict xdata; /* Extra data */
gfx_dirlist *reply;
};
struct gfx_dirplist {
u_quad_t d_ino;
u_quad_t d_off;
unsigned int d_len;
unsigned int d_type;
string name<>;
gfx_iattx stat;
gfx_dict dict;
gfx_dirplist *nextentry;
};
struct gfx_readdirp_rsp {
int op_ret;
int op_errno;
gfx_dict xdata; /* Extra data */
gfx_dirplist *reply;
};
struct gfx_set_lk_ver_rsp {
int op_ret;
int op_errno;
gfx_dict xdata;
int lk_ver;
};
struct gfx_set_lk_ver_req {
string uid<>;
int lk_ver;
};
struct gfx_event_notify_req {
int op;
gfx_dict dict;
};
struct gfx_getsnap_name_uuid_req {
gfx_dict dict;
};
struct gfx_getsnap_name_uuid_rsp {
int op_ret;
int op_errno;
gfx_dict dict;
string op_errstr<>;
};
struct gfx_getactivelk_rsp {
int op_ret;
int op_errno;
gfx_dict xdata;
gfs3_locklist *reply;
};
struct gfx_getactivelk_req {
opaque gfid[16];
gfx_dict xdata;
};
struct gfx_setactivelk_req {
opaque gfid[16];
gfs3_locklist *request;
gfx_dict xdata;
};
union compound_req_v2 switch (glusterfs_fop_t fop_enum) {
case GF_FOP_STAT: gfx_stat_req compound_stat_req;
case GF_FOP_READLINK: gfx_readlink_req compound_readlink_req;
case GF_FOP_MKNOD: gfx_mknod_req compound_mknod_req;
case GF_FOP_MKDIR: gfx_mkdir_req compound_mkdir_req;
case GF_FOP_UNLINK: gfx_unlink_req compound_unlink_req;
case GF_FOP_RMDIR: gfx_rmdir_req compound_rmdir_req;
case GF_FOP_SYMLINK: gfx_symlink_req compound_symlink_req;
case GF_FOP_RENAME: gfx_rename_req compound_rename_req;
case GF_FOP_LINK: gfx_link_req compound_link_req;
case GF_FOP_TRUNCATE: gfx_truncate_req compound_truncate_req;
case GF_FOP_OPEN: gfx_open_req compound_open_req;
case GF_FOP_READ: gfx_read_req compound_read_req;
case GF_FOP_WRITE: gfx_write_req compound_write_req;
case GF_FOP_STATFS: gfx_statfs_req compound_statfs_req;
case GF_FOP_FLUSH: gfx_flush_req compound_flush_req;
case GF_FOP_FSYNC: gfx_fsync_req compound_fsync_req;
case GF_FOP_GETXATTR: gfx_getxattr_req compound_getxattr_req;
case GF_FOP_SETXATTR: gfx_setxattr_req compound_setxattr_req;
case GF_FOP_REMOVEXATTR: gfx_removexattr_req compound_removexattr_req;
case GF_FOP_OPENDIR: gfx_opendir_req compound_opendir_req;
case GF_FOP_FSYNCDIR: gfx_fsyncdir_req compound_fsyncdir_req;
case GF_FOP_ACCESS: gfx_access_req compound_access_req;
case GF_FOP_CREATE: gfx_create_req compound_create_req;
case GF_FOP_FTRUNCATE: gfx_ftruncate_req compound_ftruncate_req;
case GF_FOP_FSTAT: gfx_fstat_req compound_fstat_req;
case GF_FOP_LK: gfx_lk_req compound_lk_req;
case GF_FOP_LOOKUP: gfx_lookup_req compound_lookup_req;
case GF_FOP_READDIR: gfx_readdir_req compound_readdir_req;
case GF_FOP_INODELK: gfx_inodelk_req compound_inodelk_req;
case GF_FOP_FINODELK: gfx_finodelk_req compound_finodelk_req;
case GF_FOP_ENTRYLK: gfx_entrylk_req compound_entrylk_req;
case GF_FOP_FENTRYLK: gfx_fentrylk_req compound_fentrylk_req;
case GF_FOP_XATTROP: gfx_xattrop_req compound_xattrop_req;
case GF_FOP_FXATTROP: gfx_fxattrop_req compound_fxattrop_req;
case GF_FOP_FGETXATTR: gfx_fgetxattr_req compound_fgetxattr_req;
case GF_FOP_FSETXATTR: gfx_fsetxattr_req compound_fsetxattr_req;
case GF_FOP_RCHECKSUM: gfx_rchecksum_req compound_rchecksum_req;
case GF_FOP_SETATTR: gfx_setattr_req compound_setattr_req;
case GF_FOP_FSETATTR: gfx_fsetattr_req compound_fsetattr_req;
case GF_FOP_READDIRP: gfx_readdirp_req compound_readdirp_req;
case GF_FOP_RELEASE: gfx_release_req compound_release_req;
case GF_FOP_RELEASEDIR: gfx_releasedir_req compound_releasedir_req;
case GF_FOP_FREMOVEXATTR: gfx_fremovexattr_req compound_fremovexattr_req;
case GF_FOP_FALLOCATE: gfx_fallocate_req compound_fallocate_req;
case GF_FOP_DISCARD: gfx_discard_req compound_discard_req;
case GF_FOP_ZEROFILL: gfx_zerofill_req compound_zerofill_req;
case GF_FOP_IPC: gfx_ipc_req compound_ipc_req;
case GF_FOP_SEEK: gfx_seek_req compound_seek_req;
case GF_FOP_LEASE: gfx_lease_req compound_lease_req;
default: void;
};
struct gfx_compound_req {
int compound_version;
glusterfs_compound_fop_t compound_fop_enum;
compound_req_v2 compound_req_array<>;
gfx_dict xdata;
};
union compound_rsp_v2 switch (glusterfs_fop_t fop_enum) {
case GF_FOP_STAT: gfx_common_iatt_rsp compound_stat_rsp;
case GF_FOP_READLINK: gfx_readlink_rsp compound_readlink_rsp;
case GF_FOP_MKNOD: gfx_common_3iatt_rsp compound_mknod_rsp;
case GF_FOP_MKDIR: gfx_common_3iatt_rsp compound_mkdir_rsp;
case GF_FOP_UNLINK: gfx_common_2iatt_rsp compound_unlink_rsp;
case GF_FOP_RMDIR: gfx_common_2iatt_rsp compound_rmdir_rsp;
case GF_FOP_SYMLINK: gfx_common_3iatt_rsp compound_symlink_rsp;
case GF_FOP_RENAME: gfx_rename_rsp compound_rename_rsp;
case GF_FOP_LINK: gfx_common_3iatt_rsp compound_link_rsp;
case GF_FOP_TRUNCATE: gfx_common_2iatt_rsp compound_truncate_rsp;
case GF_FOP_OPEN: gfx_open_rsp compound_open_rsp;
case GF_FOP_READ: gfx_read_rsp compound_read_rsp;
case GF_FOP_WRITE: gfx_common_2iatt_rsp compound_write_rsp;
case GF_FOP_STATFS: gfx_statfs_rsp compound_statfs_rsp;
case GF_FOP_FLUSH: gfx_common_rsp compound_flush_rsp;
case GF_FOP_FSYNC: gfx_common_2iatt_rsp compound_fsync_rsp;
case GF_FOP_GETXATTR: gfx_common_dict_rsp compound_getxattr_rsp;
case GF_FOP_SETXATTR: gfx_common_rsp compound_setxattr_rsp;
case GF_FOP_REMOVEXATTR: gfx_common_rsp compound_removexattr_rsp;
case GF_FOP_OPENDIR: gfx_open_rsp compound_opendir_rsp;
case GF_FOP_FSYNCDIR: gfx_common_rsp compound_fsyncdir_rsp;
case GF_FOP_ACCESS: gfx_common_rsp compound_access_rsp;
case GF_FOP_CREATE: gfx_create_rsp compound_create_rsp;
case GF_FOP_FTRUNCATE: gfx_common_2iatt_rsp compound_ftruncate_rsp;
case GF_FOP_FSTAT: gfx_common_iatt_rsp compound_fstat_rsp;
case GF_FOP_LK: gfx_lk_rsp compound_lk_rsp;
case GF_FOP_LOOKUP: gfx_common_2iatt_rsp compound_lookup_rsp;
case GF_FOP_READDIR: gfx_readdir_rsp compound_readdir_rsp;
case GF_FOP_INODELK: gfx_common_rsp compound_inodelk_rsp;
case GF_FOP_FINODELK: gfx_common_rsp compound_finodelk_rsp;
case GF_FOP_ENTRYLK: gfx_common_rsp compound_entrylk_rsp;
case GF_FOP_FENTRYLK: gfx_common_rsp compound_fentrylk_rsp;
case GF_FOP_XATTROP: gfx_common_dict_rsp compound_xattrop_rsp;
case GF_FOP_FXATTROP: gfx_common_dict_rsp compound_fxattrop_rsp;
case GF_FOP_FGETXATTR: gfx_common_dict_rsp compound_fgetxattr_rsp;
case GF_FOP_FSETXATTR: gfx_common_rsp compound_fsetxattr_rsp;
case GF_FOP_RCHECKSUM: gfx_rchecksum_rsp compound_rchecksum_rsp;
case GF_FOP_SETATTR: gfx_common_2iatt_rsp compound_setattr_rsp;
case GF_FOP_FSETATTR: gfx_common_2iatt_rsp compound_fsetattr_rsp;
case GF_FOP_READDIRP: gfx_readdirp_rsp compound_readdirp_rsp;
case GF_FOP_RELEASE: gfx_common_rsp compound_release_rsp;
case GF_FOP_RELEASEDIR: gfx_common_rsp compound_releasedir_rsp;
case GF_FOP_FREMOVEXATTR: gfx_common_rsp compound_fremovexattr_rsp;
case GF_FOP_FALLOCATE: gfx_common_2iatt_rsp compound_fallocate_rsp;
case GF_FOP_DISCARD: gfx_common_2iatt_rsp compound_discard_rsp;
case GF_FOP_ZEROFILL: gfx_common_2iatt_rsp compound_zerofill_rsp;
case GF_FOP_IPC: gfx_common_rsp compound_ipc_rsp;
case GF_FOP_SEEK: gfx_seek_rsp compound_seek_rsp;
case GF_FOP_LEASE: gfx_lease_rsp compound_lease_rsp;
default: void;
};
struct gfx_compound_rsp {
int op_ret;
int op_errno;
compound_rsp_v2 compound_rsp_array<>;
gfx_dict xdata;
};
struct gfs4_inodelk_contention_req {
opaque gfid[16];
struct gf_proto_flock flock;
unsigned int pid;
string domain<>;
opaque xdata<>;
};
struct gfs4_entrylk_contention_req {
opaque gfid[16];
unsigned int type;
unsigned int pid;
string name<>;
string domain<>;
opaque xdata<>;
};