| @@ -1,14 +1,14 @@ | | | @@ -1,14 +1,14 @@ |
1 | /* $NetBSD: nfs_subs.c,v 1.237 2020/02/24 20:18:53 ad Exp $ */ | | 1 | /* $NetBSD: nfs_subs.c,v 1.238 2020/03/08 22:12:42 mgorny Exp $ */ |
2 | | | 2 | |
3 | /* | | 3 | /* |
4 | * Copyright (c) 1989, 1993 | | 4 | * Copyright (c) 1989, 1993 |
5 | * The Regents of the University of California. All rights reserved. | | 5 | * The Regents of the University of California. All rights reserved. |
6 | * | | 6 | * |
7 | * This code is derived from software contributed to Berkeley by | | 7 | * This code is derived from software contributed to Berkeley by |
8 | * Rick Macklem at The University of Guelph. | | 8 | * Rick Macklem at The University of Guelph. |
9 | * | | 9 | * |
10 | * Redistribution and use in source and binary forms, with or without | | 10 | * Redistribution and use in source and binary forms, with or without |
11 | * modification, are permitted provided that the following conditions | | 11 | * modification, are permitted provided that the following conditions |
12 | * are met: | | 12 | * are met: |
13 | * 1. Redistributions of source code must retain the above copyright | | 13 | * 1. Redistributions of source code must retain the above copyright |
14 | * notice, this list of conditions and the following disclaimer. | | 14 | * notice, this list of conditions and the following disclaimer. |
| @@ -60,27 +60,27 @@ | | | @@ -60,27 +60,27 @@ |
60 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | | 60 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
61 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | | 61 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
62 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC | | 62 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC |
63 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | | 63 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
64 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | | 64 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
65 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | | 65 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
66 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | | 66 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
67 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | | 67 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
68 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | | 68 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
69 | * POSSIBILITY OF SUCH DAMAGE. | | 69 | * POSSIBILITY OF SUCH DAMAGE. |
70 | */ | | 70 | */ |
71 | | | 71 | |
72 | #include <sys/cdefs.h> | | 72 | #include <sys/cdefs.h> |
73 | __KERNEL_RCSID(0, "$NetBSD: nfs_subs.c,v 1.237 2020/02/24 20:18:53 ad Exp $"); | | 73 | __KERNEL_RCSID(0, "$NetBSD: nfs_subs.c,v 1.238 2020/03/08 22:12:42 mgorny Exp $"); |
74 | | | 74 | |
75 | #ifdef _KERNEL_OPT | | 75 | #ifdef _KERNEL_OPT |
76 | #include "opt_nfs.h" | | 76 | #include "opt_nfs.h" |
77 | #endif | | 77 | #endif |
78 | | | 78 | |
79 | /* | | 79 | /* |
80 | * These functions support the macros and help fiddle mbuf chains for | | 80 | * These functions support the macros and help fiddle mbuf chains for |
81 | * the nfs op functions. They do things like create the rpc header and | | 81 | * the nfs op functions. They do things like create the rpc header and |
82 | * copy data between mbuf chains and uio lists. | | 82 | * copy data between mbuf chains and uio lists. |
83 | */ | | 83 | */ |
84 | #include <sys/param.h> | | 84 | #include <sys/param.h> |
85 | #include <sys/proc.h> | | 85 | #include <sys/proc.h> |
86 | #include <sys/systm.h> | | 86 | #include <sys/systm.h> |
| @@ -197,45 +197,49 @@ const int nfsv2_procid[NFS_NPROCS] = { | | | @@ -197,45 +197,49 @@ const int nfsv2_procid[NFS_NPROCS] = { |
197 | NFSV2PROC_NOOP, | | 197 | NFSV2PROC_NOOP, |
198 | NFSV2PROC_STATFS, | | 198 | NFSV2PROC_STATFS, |
199 | NFSV2PROC_NOOP, | | 199 | NFSV2PROC_NOOP, |
200 | NFSV2PROC_NOOP, | | 200 | NFSV2PROC_NOOP, |
201 | NFSV2PROC_NOOP, | | 201 | NFSV2PROC_NOOP, |
202 | NFSV2PROC_NOOP, | | 202 | NFSV2PROC_NOOP, |
203 | }; | | 203 | }; |
204 | | | 204 | |
205 | /* | | 205 | /* |
206 | * Maps errno values to nfs error numbers. | | 206 | * Maps errno values to nfs error numbers. |
207 | * Use NFSERR_IO as the catch all for ones not specifically defined in | | 207 | * Use NFSERR_IO as the catch all for ones not specifically defined in |
208 | * RFC 1094. | | 208 | * RFC 1094. |
209 | */ | | 209 | */ |
210 | static const u_char nfsrv_v2errmap[ELAST] = { | | 210 | static const u_char nfsrv_v2errmap[] = { |
211 | NFSERR_PERM, NFSERR_NOENT, NFSERR_IO, NFSERR_IO, NFSERR_IO, | | 211 | NFSERR_PERM, NFSERR_NOENT, NFSERR_IO, NFSERR_IO, NFSERR_IO, |
212 | NFSERR_NXIO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, | | 212 | NFSERR_NXIO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, |
213 | NFSERR_IO, NFSERR_IO, NFSERR_ACCES, NFSERR_IO, NFSERR_IO, | | 213 | NFSERR_IO, NFSERR_IO, NFSERR_ACCES, NFSERR_IO, NFSERR_IO, |
214 | NFSERR_IO, NFSERR_EXIST, NFSERR_IO, NFSERR_NODEV, NFSERR_NOTDIR, | | 214 | NFSERR_IO, NFSERR_EXIST, NFSERR_IO, NFSERR_NODEV, NFSERR_NOTDIR, |
215 | NFSERR_ISDIR, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, | | 215 | NFSERR_ISDIR, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, |
216 | NFSERR_IO, NFSERR_FBIG, NFSERR_NOSPC, NFSERR_IO, NFSERR_ROFS, | | 216 | NFSERR_IO, NFSERR_FBIG, NFSERR_NOSPC, NFSERR_IO, NFSERR_ROFS, |
217 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, | | 217 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, |
218 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, | | 218 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, |
219 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, | | 219 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, |
220 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, | | 220 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, |
221 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, | | 221 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, |
222 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, | | 222 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, |
223 | NFSERR_IO, NFSERR_IO, NFSERR_NAMETOL, NFSERR_IO, NFSERR_IO, | | 223 | NFSERR_IO, NFSERR_IO, NFSERR_NAMETOL, NFSERR_IO, NFSERR_IO, |
224 | NFSERR_NOTEMPTY, NFSERR_IO, NFSERR_IO, NFSERR_DQUOT, NFSERR_STALE, | | 224 | NFSERR_NOTEMPTY, NFSERR_IO, NFSERR_IO, NFSERR_DQUOT, NFSERR_STALE, |
225 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, | | 225 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, |
226 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, | | 226 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, |
227 | NFSERR_IO, NFSERR_IO, | | 227 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, |
| | | 228 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, |
| | | 229 | NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, NFSERR_IO, |
| | | 230 | NFSERR_IO, NFSERR_IO, NFSERR_IO |
228 | }; | | 231 | }; |
| | | 232 | __CTASSERT(__arraycount(nfsrv_v2errmap) == ELAST); |
229 | | | 233 | |
230 | /* | | 234 | /* |
231 | * Maps errno values to nfs error numbers. | | 235 | * Maps errno values to nfs error numbers. |
232 | * Although it is not obvious whether or not NFS clients really care if | | 236 | * Although it is not obvious whether or not NFS clients really care if |
233 | * a returned error value is in the specified list for the procedure, the | | 237 | * a returned error value is in the specified list for the procedure, the |
234 | * safest thing to do is filter them appropriately. For Version 2, the | | 238 | * safest thing to do is filter them appropriately. For Version 2, the |
235 | * X/Open XNFS document is the only specification that defines error values | | 239 | * X/Open XNFS document is the only specification that defines error values |
236 | * for each RPC (The RFC simply lists all possible error values for all RPCs), | | 240 | * for each RPC (The RFC simply lists all possible error values for all RPCs), |
237 | * so I have decided to not do this for Version 2. | | 241 | * so I have decided to not do this for Version 2. |
238 | * The first entry is the default error return and the rest are the valid | | 242 | * The first entry is the default error return and the rest are the valid |
239 | * errors for that RPC in increasing numeric order. | | 243 | * errors for that RPC in increasing numeric order. |
240 | */ | | 244 | */ |
241 | static const short nfsv3err_null[] = { | | 245 | static const short nfsv3err_null[] = { |