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