]> Git Repo - linux.git/blob - fs/nfs/callback.h
Merge tag 'nfsd-6.12-2' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux
[linux.git] / fs / nfs / callback.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * linux/fs/nfs/callback.h
4  *
5  * Copyright (C) 2004 Trond Myklebust
6  *
7  * NFSv4 callback definitions
8  */
9 #ifndef __LINUX_FS_NFS_CALLBACK_H
10 #define __LINUX_FS_NFS_CALLBACK_H
11 #include <linux/sunrpc/svc.h>
12
13 #define NFS4_CALLBACK 0x40000000
14 #define NFS4_CALLBACK_XDRSIZE 2048
15 #define NFS4_CALLBACK_BUFSIZE (1024 + NFS4_CALLBACK_XDRSIZE)
16
17 enum nfs4_callback_procnum {
18         CB_NULL = 0,
19         CB_COMPOUND = 1,
20 };
21
22 struct nfs4_slot;
23 struct cb_process_state {
24         struct nfs_client       *clp;
25         struct nfs4_slot        *slot;
26         struct net              *net;
27         u32                     minorversion;
28         __be32                  drc_status;
29         unsigned int            referring_calls;
30 };
31
32 struct cb_compound_hdr_arg {
33         unsigned int taglen;
34         const char *tag;
35         unsigned int minorversion;
36         unsigned int cb_ident; /* v4.0 callback identifier */
37         unsigned nops;
38 };
39
40 struct cb_compound_hdr_res {
41         __be32 *status;
42         unsigned int taglen;
43         const char *tag;
44         __be32 *nops;
45 };
46
47 struct cb_getattrargs {
48         struct nfs_fh fh;
49         uint32_t bitmap[3];
50 };
51
52 struct cb_getattrres {
53         __be32 status;
54         uint32_t bitmap[3];
55         uint64_t size;
56         uint64_t change_attr;
57         struct timespec64 atime;
58         struct timespec64 ctime;
59         struct timespec64 mtime;
60 };
61
62 struct cb_recallargs {
63         struct nfs_fh fh;
64         nfs4_stateid stateid;
65         uint32_t truncate;
66 };
67
68 #if defined(CONFIG_NFS_V4_1)
69
70 struct referring_call {
71         uint32_t                        rc_sequenceid;
72         uint32_t                        rc_slotid;
73 };
74
75 struct referring_call_list {
76         struct nfs4_sessionid           rcl_sessionid;
77         uint32_t                        rcl_nrefcalls;
78         struct referring_call           *rcl_refcalls;
79 };
80
81 struct cb_sequenceargs {
82         struct sockaddr                 *csa_addr;
83         struct nfs4_sessionid           csa_sessionid;
84         uint32_t                        csa_sequenceid;
85         uint32_t                        csa_slotid;
86         uint32_t                        csa_highestslotid;
87         uint32_t                        csa_cachethis;
88         uint32_t                        csa_nrclists;
89         struct referring_call_list      *csa_rclists;
90 };
91
92 struct cb_sequenceres {
93         __be32                          csr_status;
94         struct nfs4_sessionid           csr_sessionid;
95         uint32_t                        csr_sequenceid;
96         uint32_t                        csr_slotid;
97         uint32_t                        csr_highestslotid;
98         uint32_t                        csr_target_highestslotid;
99 };
100
101 extern __be32 nfs4_callback_sequence(void *argp, void *resp,
102                                        struct cb_process_state *cps);
103
104 #define RCA4_TYPE_MASK_RDATA_DLG        0
105 #define RCA4_TYPE_MASK_WDATA_DLG        1
106 #define RCA4_TYPE_MASK_DIR_DLG         2
107 #define RCA4_TYPE_MASK_FILE_LAYOUT     3
108 #define RCA4_TYPE_MASK_BLK_LAYOUT      4
109 #define RCA4_TYPE_MASK_OBJ_LAYOUT_MIN  8
110 #define RCA4_TYPE_MASK_OBJ_LAYOUT_MAX  9
111 #define RCA4_TYPE_MASK_OTHER_LAYOUT_MIN 12
112 #define RCA4_TYPE_MASK_OTHER_LAYOUT_MAX 15
113 #define PNFS_FF_RCA4_TYPE_MASK_READ 16
114 #define PNFS_FF_RCA4_TYPE_MASK_RW 17
115 #define RCA4_TYPE_MASK_ALL 0x3f31f
116
117 struct cb_recallanyargs {
118         uint32_t        craa_objs_to_keep;
119         uint32_t        craa_type_mask;
120 };
121
122 extern __be32 nfs4_callback_recallany(void *argp, void *resp,
123                                         struct cb_process_state *cps);
124
125 struct cb_recallslotargs {
126         uint32_t        crsa_target_highest_slotid;
127 };
128 extern __be32 nfs4_callback_recallslot(void *argp, void *resp,
129                                          struct cb_process_state *cps);
130
131 struct cb_layoutrecallargs {
132         uint32_t                cbl_recall_type;
133         uint32_t                cbl_layout_type;
134         uint32_t                cbl_layoutchanged;
135         union {
136                 struct {
137                         struct nfs_fh           cbl_fh;
138                         struct pnfs_layout_range cbl_range;
139                         nfs4_stateid            cbl_stateid;
140                 };
141                 struct nfs_fsid         cbl_fsid;
142         };
143 };
144
145 extern __be32 nfs4_callback_layoutrecall(void *argp, void *resp,
146                 struct cb_process_state *cps);
147
148 struct cb_devicenotifyitem {
149         uint32_t                cbd_notify_type;
150         uint32_t                cbd_layout_type;
151         struct nfs4_deviceid    cbd_dev_id;
152         uint32_t                cbd_immediate;
153 };
154
155 struct cb_devicenotifyargs {
156         uint32_t                         ndevs;
157         struct cb_devicenotifyitem       *devs;
158 };
159
160 extern __be32 nfs4_callback_devicenotify(void *argp, void *resp,
161                 struct cb_process_state *cps);
162
163 struct cb_notify_lock_args {
164         struct nfs_fh                   cbnl_fh;
165         struct nfs_lowner               cbnl_owner;
166         bool                            cbnl_valid;
167 };
168
169 extern __be32 nfs4_callback_notify_lock(void *argp, void *resp,
170                                          struct cb_process_state *cps);
171 #endif /* CONFIG_NFS_V4_1 */
172 #ifdef CONFIG_NFS_V4_2
173 struct cb_offloadargs {
174         struct nfs_fh           coa_fh;
175         nfs4_stateid            coa_stateid;
176         uint32_t                error;
177         uint64_t                wr_count;
178         struct nfs_writeverf    wr_writeverf;
179 };
180
181 extern __be32 nfs4_callback_offload(void *args, void *dummy,
182                                     struct cb_process_state *cps);
183 #endif /* CONFIG_NFS_V4_2 */
184 extern int check_gss_callback_principal(struct nfs_client *, struct svc_rqst *);
185 extern __be32 nfs4_callback_getattr(void *argp, void *resp,
186                                     struct cb_process_state *cps);
187 extern __be32 nfs4_callback_recall(void *argp, void *resp,
188                                    struct cb_process_state *cps);
189 #if IS_ENABLED(CONFIG_NFS_V4)
190 extern int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt);
191 extern void nfs_callback_down(int minorversion, struct net *net);
192 #endif /* CONFIG_NFS_V4 */
193 /*
194  * nfs41: Callbacks are expected to not cause substantial latency,
195  * so we limit their concurrency to 1 by setting up the maximum number
196  * of slots for the backchannel.
197  */
198 #define NFS41_BC_MIN_CALLBACKS 1
199 #define NFS41_BC_MAX_CALLBACKS 1
200
201 #define NFS4_MIN_NR_CALLBACK_THREADS 1
202
203 extern unsigned int nfs_callback_set_tcpport;
204 extern unsigned short nfs_callback_nr_threads;
205
206 #endif /* __LINUX_FS_NFS_CALLBACK_H */
This page took 0.042723 seconds and 4 git commands to generate.