~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/afs/misc.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0-or-later
  2 /* miscellaneous bits
  3  *
  4  * Copyright (C) 2002, 2007 Red Hat, Inc. All Rights Reserved.
  5  * Written by David Howells (dhowells@redhat.com)
  6  */
  7 
  8 #include <linux/kernel.h>
  9 #include <linux/module.h>
 10 #include <linux/errno.h>
 11 #include "internal.h"
 12 #include "afs_fs.h"
 13 #include "protocol_uae.h"
 14 
 15 /*
 16  * convert an AFS abort code to a Linux error number
 17  */
 18 int afs_abort_to_error(u32 abort_code)
 19 {
 20         switch (abort_code) {
 21                 /* Low errno codes inserted into abort namespace */
 22         case 13:                return -EACCES;
 23         case 27:                return -EFBIG;
 24         case 30:                return -EROFS;
 25 
 26                 /* VICE "special error" codes; 101 - 111 */
 27         case VSALVAGE:          return -EIO;
 28         case VNOVNODE:          return -ENOENT;
 29         case VNOVOL:            return -ENOMEDIUM;
 30         case VVOLEXISTS:        return -EEXIST;
 31         case VNOSERVICE:        return -EIO;
 32         case VOFFLINE:          return -ENOENT;
 33         case VONLINE:           return -EEXIST;
 34         case VDISKFULL:         return -ENOSPC;
 35         case VOVERQUOTA:        return -EDQUOT;
 36         case VBUSY:             return -EBUSY;
 37         case VMOVED:            return -ENXIO;
 38 
 39                 /* Volume Location server errors */
 40         case AFSVL_IDEXIST:             return -EEXIST;
 41         case AFSVL_IO:                  return -EREMOTEIO;
 42         case AFSVL_NAMEEXIST:           return -EEXIST;
 43         case AFSVL_CREATEFAIL:          return -EREMOTEIO;
 44         case AFSVL_NOENT:               return -ENOMEDIUM;
 45         case AFSVL_EMPTY:               return -ENOMEDIUM;
 46         case AFSVL_ENTDELETED:          return -ENOMEDIUM;
 47         case AFSVL_BADNAME:             return -EINVAL;
 48         case AFSVL_BADINDEX:            return -EINVAL;
 49         case AFSVL_BADVOLTYPE:          return -EINVAL;
 50         case AFSVL_BADSERVER:           return -EINVAL;
 51         case AFSVL_BADPARTITION:        return -EINVAL;
 52         case AFSVL_REPSFULL:            return -EFBIG;
 53         case AFSVL_NOREPSERVER:         return -ENOENT;
 54         case AFSVL_DUPREPSERVER:        return -EEXIST;
 55         case AFSVL_RWNOTFOUND:          return -ENOENT;
 56         case AFSVL_BADREFCOUNT:         return -EINVAL;
 57         case AFSVL_SIZEEXCEEDED:        return -EINVAL;
 58         case AFSVL_BADENTRY:            return -EINVAL;
 59         case AFSVL_BADVOLIDBUMP:        return -EINVAL;
 60         case AFSVL_IDALREADYHASHED:     return -EINVAL;
 61         case AFSVL_ENTRYLOCKED:         return -EBUSY;
 62         case AFSVL_BADVOLOPER:          return -EBADRQC;
 63         case AFSVL_BADRELLOCKTYPE:      return -EINVAL;
 64         case AFSVL_RERELEASE:           return -EREMOTEIO;
 65         case AFSVL_BADSERVERFLAG:       return -EINVAL;
 66         case AFSVL_PERM:                return -EACCES;
 67         case AFSVL_NOMEM:               return -EREMOTEIO;
 68 
 69                 /* Unified AFS error table */
 70         case UAEPERM:                   return -EPERM;
 71         case UAENOENT:                  return -ENOENT;
 72         case UAEAGAIN:                  return -EAGAIN;
 73         case UAEACCES:                  return -EACCES;
 74         case UAEBUSY:                   return -EBUSY;
 75         case UAEEXIST:                  return -EEXIST;
 76         case UAENOTDIR:                 return -ENOTDIR;
 77         case UAEISDIR:                  return -EISDIR;
 78         case UAEFBIG:                   return -EFBIG;
 79         case UAENOSPC:                  return -ENOSPC;
 80         case UAEROFS:                   return -EROFS;
 81         case UAEMLINK:                  return -EMLINK;
 82         case UAEDEADLK:                 return -EDEADLK;
 83         case UAENAMETOOLONG:            return -ENAMETOOLONG;
 84         case UAENOLCK:                  return -ENOLCK;
 85         case UAENOTEMPTY:               return -ENOTEMPTY;
 86         case UAELOOP:                   return -ELOOP;
 87         case UAEOVERFLOW:               return -EOVERFLOW;
 88         case UAENOMEDIUM:               return -ENOMEDIUM;
 89         case UAEDQUOT:                  return -EDQUOT;
 90 
 91                 /* RXKAD abort codes; from include/rxrpc/packet.h.  ET "RXK" == 0x1260B00 */
 92         case RXKADINCONSISTENCY: return -EPROTO;
 93         case RXKADPACKETSHORT:  return -EPROTO;
 94         case RXKADLEVELFAIL:    return -EKEYREJECTED;
 95         case RXKADTICKETLEN:    return -EKEYREJECTED;
 96         case RXKADOUTOFSEQUENCE: return -EPROTO;
 97         case RXKADNOAUTH:       return -EKEYREJECTED;
 98         case RXKADBADKEY:       return -EKEYREJECTED;
 99         case RXKADBADTICKET:    return -EKEYREJECTED;
100         case RXKADUNKNOWNKEY:   return -EKEYREJECTED;
101         case RXKADEXPIRED:      return -EKEYEXPIRED;
102         case RXKADSEALEDINCON:  return -EKEYREJECTED;
103         case RXKADDATALEN:      return -EKEYREJECTED;
104         case RXKADILLEGALLEVEL: return -EKEYREJECTED;
105 
106         case RXGEN_OPCODE:      return -ENOTSUPP;
107 
108         default:                return -EREMOTEIO;
109         }
110 }
111 
112 /*
113  * Select the error to report from a set of errors.
114  */
115 void afs_prioritise_error(struct afs_error *e, int error, u32 abort_code)
116 {
117         switch (error) {
118         case 0:
119                 e->aborted = false;
120                 e->error = 0;
121                 return;
122         default:
123                 if (e->error == -ETIMEDOUT ||
124                     e->error == -ETIME)
125                         return;
126                 fallthrough;
127         case -ETIMEDOUT:
128         case -ETIME:
129                 if (e->error == -ENOMEM ||
130                     e->error == -ENONET)
131                         return;
132                 fallthrough;
133         case -ENOMEM:
134         case -ENONET:
135                 if (e->error == -ERFKILL)
136                         return;
137                 fallthrough;
138         case -ERFKILL:
139                 if (e->error == -EADDRNOTAVAIL)
140                         return;
141                 fallthrough;
142         case -EADDRNOTAVAIL:
143                 if (e->error == -ENETUNREACH)
144                         return;
145                 fallthrough;
146         case -ENETUNREACH:
147                 if (e->error == -EHOSTUNREACH)
148                         return;
149                 fallthrough;
150         case -EHOSTUNREACH:
151                 if (e->error == -EHOSTDOWN)
152                         return;
153                 fallthrough;
154         case -EHOSTDOWN:
155                 if (e->error == -ECONNREFUSED)
156                         return;
157                 fallthrough;
158         case -ECONNREFUSED:
159                 if (e->error == -ECONNRESET)
160                         return;
161                 fallthrough;
162         case -ECONNRESET: /* Responded, but call expired. */
163                 if (e->responded)
164                         return;
165                 e->error = error;
166                 e->aborted = false;
167                 return;
168 
169         case -ECONNABORTED:
170                 e->error = afs_abort_to_error(abort_code);
171                 e->aborted = true;
172                 e->responded = true;
173                 return;
174         case -ENETRESET: /* Responded, but we seem to have changed address */
175                 e->aborted = false;
176                 e->responded = true;
177                 e->error = error;
178                 return;
179         }
180 }
181 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php