4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 only,
8 * as published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License version 2 for more details (a copy is included
14 * in the LICENSE file that accompanied this code).
16 * You should have received a copy of the GNU General Public License
17 * version 2 along with this program; If not, see
18 * http://www.gnu.org/licenses/gpl-2.0.txt
23 * Copyright (C) 2011 FUJITSU LIMITED. All rights reserved.
25 * Copyright (c) 2013, Intel Corporation.
28 #include <libcfs/libcfs.h>
29 #include <lustre_errno.h>
31 #ifdef LUSTRE_TRANSLATE_ERRNOS
32 #include <lustre_dlm.h>
35 * The two translation tables below must define a one-to-one mapping between
36 * host and network errnos.
38 * EWOULDBLOCK is equal to EAGAIN on all architectures except for parisc, which
39 * appears irrelevant. Thus, existing references to EWOULDBLOCK are fine.
41 * EDEADLOCK is equal to EDEADLK on x86 but not on sparc, at least. A sparc
42 * host has no context-free way to determine if a LUSTRE_EDEADLK represents an
43 * EDEADLK or an EDEADLOCK. Therefore, all existing references to EDEADLOCK
44 * that need to be transferred on wire have been replaced with EDEADLK.
46 static int lustre_errno_hton_mapping[] = {
47 [EPERM] = LUSTRE_EPERM,
48 [ENOENT] = LUSTRE_ENOENT,
49 [ESRCH] = LUSTRE_ESRCH,
50 [EINTR] = LUSTRE_EINTR,
52 [ENXIO] = LUSTRE_ENXIO,
53 [E2BIG] = LUSTRE_E2BIG,
54 [ENOEXEC] = LUSTRE_ENOEXEC,
55 [EBADF] = LUSTRE_EBADF,
56 [ECHILD] = LUSTRE_ECHILD,
57 [EAGAIN] = LUSTRE_EAGAIN,
58 [ENOMEM] = LUSTRE_ENOMEM,
59 [EACCES] = LUSTRE_EACCES,
60 [EFAULT] = LUSTRE_EFAULT,
61 [ENOTBLK] = LUSTRE_ENOTBLK,
62 [EBUSY] = LUSTRE_EBUSY,
63 [EEXIST] = LUSTRE_EEXIST,
64 [EXDEV] = LUSTRE_EXDEV,
65 [ENODEV] = LUSTRE_ENODEV,
66 [ENOTDIR] = LUSTRE_ENOTDIR,
67 [EISDIR] = LUSTRE_EISDIR,
68 [EINVAL] = LUSTRE_EINVAL,
69 [ENFILE] = LUSTRE_ENFILE,
70 [EMFILE] = LUSTRE_EMFILE,
71 [ENOTTY] = LUSTRE_ENOTTY,
72 [ETXTBSY] = LUSTRE_ETXTBSY,
73 [EFBIG] = LUSTRE_EFBIG,
74 [ENOSPC] = LUSTRE_ENOSPC,
75 [ESPIPE] = LUSTRE_ESPIPE,
76 [EROFS] = LUSTRE_EROFS,
77 [EMLINK] = LUSTRE_EMLINK,
78 [EPIPE] = LUSTRE_EPIPE,
80 [ERANGE] = LUSTRE_ERANGE,
81 [EDEADLK] = LUSTRE_EDEADLK,
82 [ENAMETOOLONG] = LUSTRE_ENAMETOOLONG,
83 [ENOLCK] = LUSTRE_ENOLCK,
84 [ENOSYS] = LUSTRE_ENOSYS,
85 [ENOTEMPTY] = LUSTRE_ENOTEMPTY,
86 [ELOOP] = LUSTRE_ELOOP,
87 [ENOMSG] = LUSTRE_ENOMSG,
88 [EIDRM] = LUSTRE_EIDRM,
89 [ECHRNG] = LUSTRE_ECHRNG,
90 [EL2NSYNC] = LUSTRE_EL2NSYNC,
91 [EL3HLT] = LUSTRE_EL3HLT,
92 [EL3RST] = LUSTRE_EL3RST,
93 [ELNRNG] = LUSTRE_ELNRNG,
94 [EUNATCH] = LUSTRE_EUNATCH,
95 [ENOCSI] = LUSTRE_ENOCSI,
96 [EL2HLT] = LUSTRE_EL2HLT,
97 [EBADE] = LUSTRE_EBADE,
98 [EBADR] = LUSTRE_EBADR,
99 [EXFULL] = LUSTRE_EXFULL,
100 [ENOANO] = LUSTRE_ENOANO,
101 [EBADRQC] = LUSTRE_EBADRQC,
102 [EBADSLT] = LUSTRE_EBADSLT,
103 [EBFONT] = LUSTRE_EBFONT,
104 [ENOSTR] = LUSTRE_ENOSTR,
105 [ENODATA] = LUSTRE_ENODATA,
106 [ETIME] = LUSTRE_ETIME,
107 [ENOSR] = LUSTRE_ENOSR,
108 [ENONET] = LUSTRE_ENONET,
109 [ENOPKG] = LUSTRE_ENOPKG,
110 [EREMOTE] = LUSTRE_EREMOTE,
111 [ENOLINK] = LUSTRE_ENOLINK,
112 [EADV] = LUSTRE_EADV,
113 [ESRMNT] = LUSTRE_ESRMNT,
114 [ECOMM] = LUSTRE_ECOMM,
115 [EPROTO] = LUSTRE_EPROTO,
116 [EMULTIHOP] = LUSTRE_EMULTIHOP,
117 [EDOTDOT] = LUSTRE_EDOTDOT,
118 [EBADMSG] = LUSTRE_EBADMSG,
119 [EOVERFLOW] = LUSTRE_EOVERFLOW,
120 [ENOTUNIQ] = LUSTRE_ENOTUNIQ,
121 [EBADFD] = LUSTRE_EBADFD,
122 [EREMCHG] = LUSTRE_EREMCHG,
123 [ELIBACC] = LUSTRE_ELIBACC,
124 [ELIBBAD] = LUSTRE_ELIBBAD,
125 [ELIBSCN] = LUSTRE_ELIBSCN,
126 [ELIBMAX] = LUSTRE_ELIBMAX,
127 [ELIBEXEC] = LUSTRE_ELIBEXEC,
128 [EILSEQ] = LUSTRE_EILSEQ,
129 [ERESTART] = LUSTRE_ERESTART,
130 [ESTRPIPE] = LUSTRE_ESTRPIPE,
131 [EUSERS] = LUSTRE_EUSERS,
132 [ENOTSOCK] = LUSTRE_ENOTSOCK,
133 [EDESTADDRREQ] = LUSTRE_EDESTADDRREQ,
134 [EMSGSIZE] = LUSTRE_EMSGSIZE,
135 [EPROTOTYPE] = LUSTRE_EPROTOTYPE,
136 [ENOPROTOOPT] = LUSTRE_ENOPROTOOPT,
137 [EPROTONOSUPPORT] = LUSTRE_EPROTONOSUPPORT,
138 [ESOCKTNOSUPPORT] = LUSTRE_ESOCKTNOSUPPORT,
139 [EOPNOTSUPP] = LUSTRE_EOPNOTSUPP,
140 [EPFNOSUPPORT] = LUSTRE_EPFNOSUPPORT,
141 [EAFNOSUPPORT] = LUSTRE_EAFNOSUPPORT,
142 [EADDRINUSE] = LUSTRE_EADDRINUSE,
143 [EADDRNOTAVAIL] = LUSTRE_EADDRNOTAVAIL,
144 [ENETDOWN] = LUSTRE_ENETDOWN,
145 [ENETUNREACH] = LUSTRE_ENETUNREACH,
146 [ENETRESET] = LUSTRE_ENETRESET,
147 [ECONNABORTED] = LUSTRE_ECONNABORTED,
148 [ECONNRESET] = LUSTRE_ECONNRESET,
149 [ENOBUFS] = LUSTRE_ENOBUFS,
150 [EISCONN] = LUSTRE_EISCONN,
151 [ENOTCONN] = LUSTRE_ENOTCONN,
152 [ESHUTDOWN] = LUSTRE_ESHUTDOWN,
153 [ETOOMANYREFS] = LUSTRE_ETOOMANYREFS,
154 [ETIMEDOUT] = LUSTRE_ETIMEDOUT,
155 [ECONNREFUSED] = LUSTRE_ECONNREFUSED,
156 [EHOSTDOWN] = LUSTRE_EHOSTDOWN,
157 [EHOSTUNREACH] = LUSTRE_EHOSTUNREACH,
158 [EALREADY] = LUSTRE_EALREADY,
159 [EINPROGRESS] = LUSTRE_EINPROGRESS,
160 [ESTALE] = LUSTRE_ESTALE,
161 [EUCLEAN] = LUSTRE_EUCLEAN,
162 [ENOTNAM] = LUSTRE_ENOTNAM,
163 [ENAVAIL] = LUSTRE_ENAVAIL,
164 [EISNAM] = LUSTRE_EISNAM,
165 [EREMOTEIO] = LUSTRE_EREMOTEIO,
166 [EDQUOT] = LUSTRE_EDQUOT,
167 [ENOMEDIUM] = LUSTRE_ENOMEDIUM,
168 [EMEDIUMTYPE] = LUSTRE_EMEDIUMTYPE,
169 [ECANCELED] = LUSTRE_ECANCELED,
170 [ENOKEY] = LUSTRE_ENOKEY,
171 [EKEYEXPIRED] = LUSTRE_EKEYEXPIRED,
172 [EKEYREVOKED] = LUSTRE_EKEYREVOKED,
173 [EKEYREJECTED] = LUSTRE_EKEYREJECTED,
174 [EOWNERDEAD] = LUSTRE_EOWNERDEAD,
175 [ENOTRECOVERABLE] = LUSTRE_ENOTRECOVERABLE,
176 [ERESTARTSYS] = LUSTRE_ERESTARTSYS,
177 [ERESTARTNOINTR] = LUSTRE_ERESTARTNOINTR,
178 [ERESTARTNOHAND] = LUSTRE_ERESTARTNOHAND,
179 [ENOIOCTLCMD] = LUSTRE_ENOIOCTLCMD,
180 [ERESTART_RESTARTBLOCK] = LUSTRE_ERESTART_RESTARTBLOCK,
181 [EBADHANDLE] = LUSTRE_EBADHANDLE,
182 [ENOTSYNC] = LUSTRE_ENOTSYNC,
183 [EBADCOOKIE] = LUSTRE_EBADCOOKIE,
184 [ENOTSUPP] = LUSTRE_ENOTSUPP,
185 [ETOOSMALL] = LUSTRE_ETOOSMALL,
186 [ESERVERFAULT] = LUSTRE_ESERVERFAULT,
187 [EBADTYPE] = LUSTRE_EBADTYPE,
188 [EJUKEBOX] = LUSTRE_EJUKEBOX,
189 [EIOCBQUEUED] = LUSTRE_EIOCBQUEUED,
192 * The ELDLM errors are Lustre specific errors whose ranges
193 * lie in the middle of the above system errors. The ELDLM
194 * numbers must be preserved to avoid LU-9793.
196 [ELDLM_LOCK_CHANGED] = ELDLM_LOCK_CHANGED,
197 [ELDLM_LOCK_ABORTED] = ELDLM_LOCK_ABORTED,
198 [ELDLM_LOCK_REPLACED] = ELDLM_LOCK_REPLACED,
199 [ELDLM_NO_LOCK_DATA] = ELDLM_NO_LOCK_DATA,
200 [ELDLM_LOCK_WOULDBLOCK] = ELDLM_LOCK_WOULDBLOCK,
201 [ELDLM_NAMESPACE_EXISTS]= ELDLM_NAMESPACE_EXISTS,
202 [ELDLM_BAD_NAMESPACE] = ELDLM_BAD_NAMESPACE
205 static int lustre_errno_ntoh_mapping[] = {
206 [LUSTRE_EPERM] = EPERM,
207 [LUSTRE_ENOENT] = ENOENT,
208 [LUSTRE_ESRCH] = ESRCH,
209 [LUSTRE_EINTR] = EINTR,
211 [LUSTRE_ENXIO] = ENXIO,
212 [LUSTRE_E2BIG] = E2BIG,
213 [LUSTRE_ENOEXEC] = ENOEXEC,
214 [LUSTRE_EBADF] = EBADF,
215 [LUSTRE_ECHILD] = ECHILD,
216 [LUSTRE_EAGAIN] = EAGAIN,
217 [LUSTRE_ENOMEM] = ENOMEM,
218 [LUSTRE_EACCES] = EACCES,
219 [LUSTRE_EFAULT] = EFAULT,
220 [LUSTRE_ENOTBLK] = ENOTBLK,
221 [LUSTRE_EBUSY] = EBUSY,
222 [LUSTRE_EEXIST] = EEXIST,
223 [LUSTRE_EXDEV] = EXDEV,
224 [LUSTRE_ENODEV] = ENODEV,
225 [LUSTRE_ENOTDIR] = ENOTDIR,
226 [LUSTRE_EISDIR] = EISDIR,
227 [LUSTRE_EINVAL] = EINVAL,
228 [LUSTRE_ENFILE] = ENFILE,
229 [LUSTRE_EMFILE] = EMFILE,
230 [LUSTRE_ENOTTY] = ENOTTY,
231 [LUSTRE_ETXTBSY] = ETXTBSY,
232 [LUSTRE_EFBIG] = EFBIG,
233 [LUSTRE_ENOSPC] = ENOSPC,
234 [LUSTRE_ESPIPE] = ESPIPE,
235 [LUSTRE_EROFS] = EROFS,
236 [LUSTRE_EMLINK] = EMLINK,
237 [LUSTRE_EPIPE] = EPIPE,
238 [LUSTRE_EDOM] = EDOM,
239 [LUSTRE_ERANGE] = ERANGE,
240 [LUSTRE_EDEADLK] = EDEADLK,
241 [LUSTRE_ENAMETOOLONG] = ENAMETOOLONG,
242 [LUSTRE_ENOLCK] = ENOLCK,
243 [LUSTRE_ENOSYS] = ENOSYS,
244 [LUSTRE_ENOTEMPTY] = ENOTEMPTY,
245 [LUSTRE_ELOOP] = ELOOP,
246 [LUSTRE_ENOMSG] = ENOMSG,
247 [LUSTRE_EIDRM] = EIDRM,
248 [LUSTRE_ECHRNG] = ECHRNG,
249 [LUSTRE_EL2NSYNC] = EL2NSYNC,
250 [LUSTRE_EL3HLT] = EL3HLT,
251 [LUSTRE_EL3RST] = EL3RST,
252 [LUSTRE_ELNRNG] = ELNRNG,
253 [LUSTRE_EUNATCH] = EUNATCH,
254 [LUSTRE_ENOCSI] = ENOCSI,
255 [LUSTRE_EL2HLT] = EL2HLT,
256 [LUSTRE_EBADE] = EBADE,
257 [LUSTRE_EBADR] = EBADR,
258 [LUSTRE_EXFULL] = EXFULL,
259 [LUSTRE_ENOANO] = ENOANO,
260 [LUSTRE_EBADRQC] = EBADRQC,
261 [LUSTRE_EBADSLT] = EBADSLT,
262 [LUSTRE_EBFONT] = EBFONT,
263 [LUSTRE_ENOSTR] = ENOSTR,
264 [LUSTRE_ENODATA] = ENODATA,
265 [LUSTRE_ETIME] = ETIME,
266 [LUSTRE_ENOSR] = ENOSR,
267 [LUSTRE_ENONET] = ENONET,
268 [LUSTRE_ENOPKG] = ENOPKG,
269 [LUSTRE_EREMOTE] = EREMOTE,
270 [LUSTRE_ENOLINK] = ENOLINK,
271 [LUSTRE_EADV] = EADV,
272 [LUSTRE_ESRMNT] = ESRMNT,
273 [LUSTRE_ECOMM] = ECOMM,
274 [LUSTRE_EPROTO] = EPROTO,
275 [LUSTRE_EMULTIHOP] = EMULTIHOP,
276 [LUSTRE_EDOTDOT] = EDOTDOT,
277 [LUSTRE_EBADMSG] = EBADMSG,
278 [LUSTRE_EOVERFLOW] = EOVERFLOW,
279 [LUSTRE_ENOTUNIQ] = ENOTUNIQ,
280 [LUSTRE_EBADFD] = EBADFD,
281 [LUSTRE_EREMCHG] = EREMCHG,
282 [LUSTRE_ELIBACC] = ELIBACC,
283 [LUSTRE_ELIBBAD] = ELIBBAD,
284 [LUSTRE_ELIBSCN] = ELIBSCN,
285 [LUSTRE_ELIBMAX] = ELIBMAX,
286 [LUSTRE_ELIBEXEC] = ELIBEXEC,
287 [LUSTRE_EILSEQ] = EILSEQ,
288 [LUSTRE_ERESTART] = ERESTART,
289 [LUSTRE_ESTRPIPE] = ESTRPIPE,
290 [LUSTRE_EUSERS] = EUSERS,
291 [LUSTRE_ENOTSOCK] = ENOTSOCK,
292 [LUSTRE_EDESTADDRREQ] = EDESTADDRREQ,
293 [LUSTRE_EMSGSIZE] = EMSGSIZE,
294 [LUSTRE_EPROTOTYPE] = EPROTOTYPE,
295 [LUSTRE_ENOPROTOOPT] = ENOPROTOOPT,
296 [LUSTRE_EPROTONOSUPPORT] = EPROTONOSUPPORT,
297 [LUSTRE_ESOCKTNOSUPPORT] = ESOCKTNOSUPPORT,
298 [LUSTRE_EOPNOTSUPP] = EOPNOTSUPP,
299 [LUSTRE_EPFNOSUPPORT] = EPFNOSUPPORT,
300 [LUSTRE_EAFNOSUPPORT] = EAFNOSUPPORT,
301 [LUSTRE_EADDRINUSE] = EADDRINUSE,
302 [LUSTRE_EADDRNOTAVAIL] = EADDRNOTAVAIL,
303 [LUSTRE_ENETDOWN] = ENETDOWN,
304 [LUSTRE_ENETUNREACH] = ENETUNREACH,
305 [LUSTRE_ENETRESET] = ENETRESET,
306 [LUSTRE_ECONNABORTED] = ECONNABORTED,
307 [LUSTRE_ECONNRESET] = ECONNRESET,
308 [LUSTRE_ENOBUFS] = ENOBUFS,
309 [LUSTRE_EISCONN] = EISCONN,
310 [LUSTRE_ENOTCONN] = ENOTCONN,
311 [LUSTRE_ESHUTDOWN] = ESHUTDOWN,
312 [LUSTRE_ETOOMANYREFS] = ETOOMANYREFS,
313 [LUSTRE_ETIMEDOUT] = ETIMEDOUT,
314 [LUSTRE_ECONNREFUSED] = ECONNREFUSED,
315 [LUSTRE_EHOSTDOWN] = EHOSTDOWN,
316 [LUSTRE_EHOSTUNREACH] = EHOSTUNREACH,
317 [LUSTRE_EALREADY] = EALREADY,
318 [LUSTRE_EINPROGRESS] = EINPROGRESS,
319 [LUSTRE_ESTALE] = ESTALE,
320 [LUSTRE_EUCLEAN] = EUCLEAN,
321 [LUSTRE_ENOTNAM] = ENOTNAM,
322 [LUSTRE_ENAVAIL] = ENAVAIL,
323 [LUSTRE_EISNAM] = EISNAM,
324 [LUSTRE_EREMOTEIO] = EREMOTEIO,
325 [LUSTRE_EDQUOT] = EDQUOT,
326 [LUSTRE_ENOMEDIUM] = ENOMEDIUM,
327 [LUSTRE_EMEDIUMTYPE] = EMEDIUMTYPE,
328 [LUSTRE_ECANCELED] = ECANCELED,
329 [LUSTRE_ENOKEY] = ENOKEY,
330 [LUSTRE_EKEYEXPIRED] = EKEYEXPIRED,
331 [LUSTRE_EKEYREVOKED] = EKEYREVOKED,
332 [LUSTRE_EKEYREJECTED] = EKEYREJECTED,
333 [LUSTRE_EOWNERDEAD] = EOWNERDEAD,
334 [LUSTRE_ENOTRECOVERABLE] = ENOTRECOVERABLE,
335 [LUSTRE_ERESTARTSYS] = ERESTARTSYS,
336 [LUSTRE_ERESTARTNOINTR] = ERESTARTNOINTR,
337 [LUSTRE_ERESTARTNOHAND] = ERESTARTNOHAND,
338 [LUSTRE_ENOIOCTLCMD] = ENOIOCTLCMD,
339 [LUSTRE_ERESTART_RESTARTBLOCK] = ERESTART_RESTARTBLOCK,
340 [LUSTRE_EBADHANDLE] = EBADHANDLE,
341 [LUSTRE_ENOTSYNC] = ENOTSYNC,
342 [LUSTRE_EBADCOOKIE] = EBADCOOKIE,
343 [LUSTRE_ENOTSUPP] = ENOTSUPP,
344 [LUSTRE_ETOOSMALL] = ETOOSMALL,
345 [LUSTRE_ESERVERFAULT] = ESERVERFAULT,
346 [LUSTRE_EBADTYPE] = EBADTYPE,
347 [LUSTRE_EJUKEBOX] = EJUKEBOX,
348 [LUSTRE_EIOCBQUEUED] = EIOCBQUEUED,
351 * The ELDLM errors are Lustre specific errors whose ranges
352 * lie in the middle of the above system errors. The ELDLM
353 * numbers must be preserved to avoid LU-9793.
355 [ELDLM_LOCK_CHANGED] = ELDLM_LOCK_CHANGED,
356 [ELDLM_LOCK_ABORTED] = ELDLM_LOCK_ABORTED,
357 [ELDLM_LOCK_REPLACED] = ELDLM_LOCK_REPLACED,
358 [ELDLM_NO_LOCK_DATA] = ELDLM_NO_LOCK_DATA,
359 [ELDLM_LOCK_WOULDBLOCK] = ELDLM_LOCK_WOULDBLOCK,
360 [ELDLM_NAMESPACE_EXISTS] = ELDLM_NAMESPACE_EXISTS,
361 [ELDLM_BAD_NAMESPACE] = ELDLM_BAD_NAMESPACE
364 unsigned int lustre_errno_hton(unsigned int h)
370 } else if (h < ARRAY_SIZE(lustre_errno_hton_mapping)) {
371 n = lustre_errno_hton_mapping[h];
377 * A generic errno is better than the unknown one that could
378 * mean anything to a different host.
385 EXPORT_SYMBOL(lustre_errno_hton);
387 unsigned int lustre_errno_ntoh(unsigned int n)
393 } else if (n < ARRAY_SIZE(lustre_errno_ntoh_mapping)) {
394 h = lustre_errno_ntoh_mapping[n];
400 * Similar to the situation in lustre_errno_hton(), an unknown
401 * network errno could coincide with anything. Hence, it is
402 * better to return a generic errno.
409 EXPORT_SYMBOL(lustre_errno_ntoh);
411 #endif /* LUSTRE_TRANSLATE_ERRNOS */