1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * (C) 2001 Clemson University and The University of Chicago 4 * 5 * See COPYING in top-level directory. 6 */ 7 8 /* 9 * Definitions of downcalls used in Linux kernel module. 10 */ 11 12 #ifndef __DOWNCALL_H 13 #define __DOWNCALL_H 14 15 /* 16 * Sanitized the device-client core interaction 17 * for clean 32-64 bit usage 18 */ 19 struct orangefs_io_response { 20 __s64 amt_complete; 21 }; 22 23 struct orangefs_lookup_response { 24 struct orangefs_object_kref refn; 25 }; 26 27 struct orangefs_create_response { 28 struct orangefs_object_kref refn; 29 }; 30 31 struct orangefs_symlink_response { 32 struct orangefs_object_kref refn; 33 }; 34 35 struct orangefs_getattr_response { 36 struct ORANGEFS_sys_attr_s attributes; 37 char link_target[ORANGEFS_NAME_MAX]; 38 }; 39 40 struct orangefs_mkdir_response { 41 struct orangefs_object_kref refn; 42 }; 43 44 struct orangefs_statfs_response { 45 __s64 block_size; 46 __s64 blocks_total; 47 __s64 blocks_avail; 48 __s64 files_total; 49 __s64 files_avail; 50 }; 51 52 struct orangefs_fs_mount_response { 53 __s32 fs_id; 54 __s32 id; 55 struct orangefs_khandle root_khandle; 56 }; 57 58 /* the getxattr response is the attribute value */ 59 struct orangefs_getxattr_response { 60 __s32 val_sz; 61 __s32 __pad1; 62 char val[ORANGEFS_MAX_XATTR_VALUELEN]; 63 }; 64 65 /* the listxattr response is an array of attribute names */ 66 struct orangefs_listxattr_response { 67 __s32 returned_count; 68 __s32 __pad1; 69 __u64 token; 70 char key[ORANGEFS_MAX_XATTR_LISTLEN * ORANGEFS_MAX_XATTR_NAMELEN]; 71 __s32 keylen; 72 __s32 __pad2; 73 __s32 lengths[ORANGEFS_MAX_XATTR_LISTLEN]; 74 }; 75 76 struct orangefs_param_response { 77 union { 78 __s64 value64; 79 __s32 value32[2]; 80 } u; 81 }; 82 83 #define PERF_COUNT_BUF_SIZE 4096 84 struct orangefs_perf_count_response { 85 char buffer[PERF_COUNT_BUF_SIZE]; 86 }; 87 88 #define FS_KEY_BUF_SIZE 4096 89 struct orangefs_fs_key_response { 90 __s32 fs_keylen; 91 __s32 __pad1; 92 char fs_key[FS_KEY_BUF_SIZE]; 93 }; 94 95 /* 2.9.6 */ 96 struct orangefs_features_response { 97 __u64 features; 98 }; 99 100 struct orangefs_downcall_s { 101 __s32 type; 102 __s32 status; 103 /* currently trailer is used only by readdir */ 104 __s64 trailer_size; 105 char *trailer_buf; 106 107 union { 108 struct orangefs_io_response io; 109 struct orangefs_lookup_response lookup; 110 struct orangefs_create_response create; 111 struct orangefs_symlink_response sym; 112 struct orangefs_getattr_response getattr; 113 struct orangefs_mkdir_response mkdir; 114 struct orangefs_statfs_response statfs; 115 struct orangefs_fs_mount_response fs_mount; 116 struct orangefs_getxattr_response getxattr; 117 struct orangefs_listxattr_response listxattr; 118 struct orangefs_param_response param; 119 struct orangefs_perf_count_response perf_count; 120 struct orangefs_fs_key_response fs_key; 121 struct orangefs_features_response features; 122 } resp; 123 }; 124 125 /* 126 * The readdir response comes in the trailer. It is followed by the 127 * directory entries as described in dir.c. 128 */ 129 130 struct orangefs_readdir_response_s { 131 __u64 token; 132 __u64 directory_version; 133 __u32 __pad2; 134 __u32 orangefs_dirent_outcount; 135 }; 136 137 #endif /* __DOWNCALL_H */ 138