2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-25 05:34:00 +08:00
linux-next/fs/orangefs/upcall.h

256 lines
6.1 KiB
C
Raw Normal View History

Orangefs: kernel client part 1 OrangeFS (formerly PVFS) is an lgpl licensed userspace networked parallel file system. OrangeFS can be accessed through included system utilities, user integration libraries, MPI-IO and can be used by the Hadoop ecosystem as an alternative to the HDFS filesystem. OrangeFS is used widely for parallel science, data analytics and engineering applications. While applications often don't require Orangefs to be mounted into the VFS, users do like to be able to access their files in the normal way. The Orangefs kernel client allows Orangefs filesystems to be mounted as a VFS. The kernel client communicates with a userspace daemon which in turn communicates with the Orangefs server daemons that implement the filesystem. The server daemons (there's almost always more than one) need not be running on the same host as the kernel client. Orangefs filesystems can also be mounted with FUSE, and we ship code and instructions to facilitate that, but most of our users report preferring to use our kernel module instead. Further, as an example of a problem we can't solve with fuse, we have in the works a not-yet-ready-for-prime-time version of a file_operations lock function that accounts for the server daemons being distributed across more than one running kernel. Many people and organizations, including Clemson University, Argonne National Laboratories and Acxiom Corporation have helped to create what has become Orangefs over more than twenty years. Some of the more recent contributors to the kernel client include: Mike Marshall Christoph Hellwig Randy Martin Becky Ligon Walt Ligon Michael Moore Rob Ross Phil Carnes Signed-off-by: Mike Marshall <hubcap@omnibond.com>
2015-07-17 22:38:11 +08:00
/*
* (C) 2001 Clemson University and The University of Chicago
*
* See COPYING in top-level directory.
*/
#ifndef __UPCALL_H
#define __UPCALL_H
/*
* Sanitized this header file to fix
* 32-64 bit interaction issues between
* client-core and device
*/
struct pvfs2_io_request_s {
__s32 async_vfs_io;
__s32 buf_index;
__s32 count;
__s32 __pad1;
__s64 offset;
struct pvfs2_object_kref refn;
enum PVFS_io_type io_type;
__s32 readahead_size;
};
struct pvfs2_iox_request_s {
__s32 buf_index;
__s32 count;
struct pvfs2_object_kref refn;
enum PVFS_io_type io_type;
__s32 __pad1;
};
struct pvfs2_lookup_request_s {
__s32 sym_follow;
__s32 __pad1;
struct pvfs2_object_kref parent_refn;
char d_name[PVFS2_NAME_LEN];
};
struct pvfs2_create_request_s {
struct pvfs2_object_kref parent_refn;
struct PVFS_sys_attr_s attributes;
char d_name[PVFS2_NAME_LEN];
};
struct pvfs2_symlink_request_s {
struct pvfs2_object_kref parent_refn;
struct PVFS_sys_attr_s attributes;
char entry_name[PVFS2_NAME_LEN];
char target[PVFS2_NAME_LEN];
};
struct pvfs2_getattr_request_s {
struct pvfs2_object_kref refn;
__u32 mask;
__u32 __pad1;
};
struct pvfs2_setattr_request_s {
struct pvfs2_object_kref refn;
struct PVFS_sys_attr_s attributes;
};
struct pvfs2_remove_request_s {
struct pvfs2_object_kref parent_refn;
char d_name[PVFS2_NAME_LEN];
};
struct pvfs2_mkdir_request_s {
struct pvfs2_object_kref parent_refn;
struct PVFS_sys_attr_s attributes;
char d_name[PVFS2_NAME_LEN];
};
struct pvfs2_readdir_request_s {
struct pvfs2_object_kref refn;
__u64 token;
__s32 max_dirent_count;
__s32 buf_index;
};
struct pvfs2_readdirplus_request_s {
struct pvfs2_object_kref refn;
__u64 token;
__s32 max_dirent_count;
__u32 mask;
__s32 buf_index;
__s32 __pad1;
};
struct pvfs2_rename_request_s {
struct pvfs2_object_kref old_parent_refn;
struct pvfs2_object_kref new_parent_refn;
char d_old_name[PVFS2_NAME_LEN];
char d_new_name[PVFS2_NAME_LEN];
};
struct pvfs2_statfs_request_s {
__s32 fs_id;
__s32 __pad1;
};
struct pvfs2_truncate_request_s {
struct pvfs2_object_kref refn;
__s64 size;
};
struct pvfs2_mmap_ra_cache_flush_request_s {
struct pvfs2_object_kref refn;
};
struct pvfs2_fs_mount_request_s {
char pvfs2_config_server[PVFS_MAX_SERVER_ADDR_LEN];
};
struct pvfs2_fs_umount_request_s {
__s32 id;
__s32 fs_id;
char pvfs2_config_server[PVFS_MAX_SERVER_ADDR_LEN];
};
struct pvfs2_getxattr_request_s {
struct pvfs2_object_kref refn;
__s32 key_sz;
__s32 __pad1;
char key[PVFS_MAX_XATTR_NAMELEN];
};
struct pvfs2_setxattr_request_s {
struct pvfs2_object_kref refn;
struct PVFS_keyval_pair keyval;
__s32 flags;
__s32 __pad1;
};
struct pvfs2_listxattr_request_s {
struct pvfs2_object_kref refn;
__s32 requested_count;
__s32 __pad1;
__u64 token;
};
struct pvfs2_removexattr_request_s {
struct pvfs2_object_kref refn;
__s32 key_sz;
__s32 __pad1;
char key[PVFS_MAX_XATTR_NAMELEN];
};
struct pvfs2_op_cancel_s {
__u64 op_tag;
};
struct pvfs2_fsync_request_s {
struct pvfs2_object_kref refn;
};
enum pvfs2_param_request_type {
PVFS2_PARAM_REQUEST_SET = 1,
PVFS2_PARAM_REQUEST_GET = 2
};
enum pvfs2_param_request_op {
PVFS2_PARAM_REQUEST_OP_ACACHE_TIMEOUT_MSECS = 1,
PVFS2_PARAM_REQUEST_OP_ACACHE_HARD_LIMIT = 2,
PVFS2_PARAM_REQUEST_OP_ACACHE_SOFT_LIMIT = 3,
PVFS2_PARAM_REQUEST_OP_ACACHE_RECLAIM_PERCENTAGE = 4,
PVFS2_PARAM_REQUEST_OP_PERF_TIME_INTERVAL_SECS = 5,
PVFS2_PARAM_REQUEST_OP_PERF_HISTORY_SIZE = 6,
PVFS2_PARAM_REQUEST_OP_PERF_RESET = 7,
PVFS2_PARAM_REQUEST_OP_NCACHE_TIMEOUT_MSECS = 8,
PVFS2_PARAM_REQUEST_OP_NCACHE_HARD_LIMIT = 9,
PVFS2_PARAM_REQUEST_OP_NCACHE_SOFT_LIMIT = 10,
PVFS2_PARAM_REQUEST_OP_NCACHE_RECLAIM_PERCENTAGE = 11,
PVFS2_PARAM_REQUEST_OP_STATIC_ACACHE_TIMEOUT_MSECS = 12,
PVFS2_PARAM_REQUEST_OP_STATIC_ACACHE_HARD_LIMIT = 13,
PVFS2_PARAM_REQUEST_OP_STATIC_ACACHE_SOFT_LIMIT = 14,
PVFS2_PARAM_REQUEST_OP_STATIC_ACACHE_RECLAIM_PERCENTAGE = 15,
PVFS2_PARAM_REQUEST_OP_CLIENT_DEBUG = 16,
PVFS2_PARAM_REQUEST_OP_CCACHE_TIMEOUT_SECS = 17,
PVFS2_PARAM_REQUEST_OP_CCACHE_HARD_LIMIT = 18,
PVFS2_PARAM_REQUEST_OP_CCACHE_SOFT_LIMIT = 19,
PVFS2_PARAM_REQUEST_OP_CCACHE_RECLAIM_PERCENTAGE = 20,
PVFS2_PARAM_REQUEST_OP_CAPCACHE_TIMEOUT_SECS = 21,
PVFS2_PARAM_REQUEST_OP_CAPCACHE_HARD_LIMIT = 22,
PVFS2_PARAM_REQUEST_OP_CAPCACHE_SOFT_LIMIT = 23,
PVFS2_PARAM_REQUEST_OP_CAPCACHE_RECLAIM_PERCENTAGE = 24,
PVFS2_PARAM_REQUEST_OP_TWO_MASK_VALUES = 25,
};
struct pvfs2_param_request_s {
enum pvfs2_param_request_type type;
enum pvfs2_param_request_op op;
__s64 value;
char s_value[PVFS2_MAX_DEBUG_STRING_LEN];
};
enum pvfs2_perf_count_request_type {
PVFS2_PERF_COUNT_REQUEST_ACACHE = 1,
PVFS2_PERF_COUNT_REQUEST_NCACHE = 2,
PVFS2_PERF_COUNT_REQUEST_CAPCACHE = 3,
};
struct pvfs2_perf_count_request_s {
enum pvfs2_perf_count_request_type type;
__s32 __pad1;
};
struct pvfs2_fs_key_request_s {
__s32 fsid;
__s32 __pad1;
};
struct pvfs2_upcall_s {
__s32 type;
__u32 uid;
__u32 gid;
int pid;
int tgid;
/* currently trailer is used only by readx/writex (iox) */
__s64 trailer_size;
char *trailer_buf;
union {
struct pvfs2_io_request_s io;
struct pvfs2_iox_request_s iox;
struct pvfs2_lookup_request_s lookup;
struct pvfs2_create_request_s create;
struct pvfs2_symlink_request_s sym;
struct pvfs2_getattr_request_s getattr;
struct pvfs2_setattr_request_s setattr;
struct pvfs2_remove_request_s remove;
struct pvfs2_mkdir_request_s mkdir;
struct pvfs2_readdir_request_s readdir;
struct pvfs2_readdirplus_request_s readdirplus;
struct pvfs2_rename_request_s rename;
struct pvfs2_statfs_request_s statfs;
struct pvfs2_truncate_request_s truncate;
struct pvfs2_mmap_ra_cache_flush_request_s ra_cache_flush;
struct pvfs2_fs_mount_request_s fs_mount;
struct pvfs2_fs_umount_request_s fs_umount;
struct pvfs2_getxattr_request_s getxattr;
struct pvfs2_setxattr_request_s setxattr;
struct pvfs2_listxattr_request_s listxattr;
struct pvfs2_removexattr_request_s removexattr;
struct pvfs2_op_cancel_s cancel;
struct pvfs2_fsync_request_s fsync;
struct pvfs2_param_request_s param;
struct pvfs2_perf_count_request_s perf_count;
struct pvfs2_fs_key_request_s fs_key;
} req;
};
#endif /* __UPCALL_H */