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