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

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

Version: ~ [ linux-5.7-rc7 ] ~ [ linux-5.6.14 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.42 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.124 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.181 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.224 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.224 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.84 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ 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.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* miscellaneous bits
  2  *
  3  * Copyright (C) 2002, 2007 Red Hat, Inc. All Rights Reserved.
  4  * Written by David Howells (dhowells@redhat.com)
  5  *
  6  * This program is free software; you can redistribute it and/or
  7  * modify it under the terms of the GNU General Public License
  8  * as published by the Free Software Foundation; either version
  9  * 2 of the License, or (at your option) any later version.
 10  */
 11 
 12 #include <linux/kernel.h>
 13 #include <linux/module.h>
 14 #include <linux/errno.h>
 15 #include "internal.h"
 16 #include "afs_fs.h"
 17 
 18 /*
 19  * convert an AFS abort code to a Linux error number
 20  */
 21 int afs_abort_to_error(u32 abort_code)
 22 {
 23         switch (abort_code) {
 24                 /* Low errno codes inserted into abort namespace */
 25         case 13:                return -EACCES;
 26         case 27:                return -EFBIG;
 27         case 30:                return -EROFS;
 28 
 29                 /* VICE "special error" codes; 101 - 111 */
 30         case VSALVAGE:          return -EIO;
 31         case VNOVNODE:          return -ENOENT;
 32         case VNOVOL:            return -ENOMEDIUM;
 33         case VVOLEXISTS:        return -EEXIST;
 34         case VNOSERVICE:        return -EIO;
 35         case VOFFLINE:          return -ENOENT;
 36         case VONLINE:           return -EEXIST;
 37         case VDISKFULL:         return -ENOSPC;
 38         case VOVERQUOTA:        return -EDQUOT;
 39         case VBUSY:             return -EBUSY;
 40         case VMOVED:            return -ENXIO;
 41 
 42                 /* Volume Location server errors */
 43         case AFSVL_IDEXIST:             return -EEXIST;
 44         case AFSVL_IO:                  return -EREMOTEIO;
 45         case AFSVL_NAMEEXIST:           return -EEXIST;
 46         case AFSVL_CREATEFAIL:          return -EREMOTEIO;
 47         case AFSVL_NOENT:               return -ENOMEDIUM;
 48         case AFSVL_EMPTY:               return -ENOMEDIUM;
 49         case AFSVL_ENTDELETED:          return -ENOMEDIUM;
 50         case AFSVL_BADNAME:             return -EINVAL;
 51         case AFSVL_BADINDEX:            return -EINVAL;
 52         case AFSVL_BADVOLTYPE:          return -EINVAL;
 53         case AFSVL_BADSERVER:           return -EINVAL;
 54         case AFSVL_BADPARTITION:        return -EINVAL;
 55         case AFSVL_REPSFULL:            return -EFBIG;
 56         case AFSVL_NOREPSERVER:         return -ENOENT;
 57         case AFSVL_DUPREPSERVER:        return -EEXIST;
 58         case AFSVL_RWNOTFOUND:          return -ENOENT;
 59         case AFSVL_BADREFCOUNT:         return -EINVAL;
 60         case AFSVL_SIZEEXCEEDED:        return -EINVAL;
 61         case AFSVL_BADENTRY:            return -EINVAL;
 62         case AFSVL_BADVOLIDBUMP:        return -EINVAL;
 63         case AFSVL_IDALREADYHASHED:     return -EINVAL;
 64         case AFSVL_ENTRYLOCKED:         return -EBUSY;
 65         case AFSVL_BADVOLOPER:          return -EBADRQC;
 66         case AFSVL_BADRELLOCKTYPE:      return -EINVAL;
 67         case AFSVL_RERELEASE:           return -EREMOTEIO;
 68         case AFSVL_BADSERVERFLAG:       return -EINVAL;
 69         case AFSVL_PERM:                return -EACCES;
 70         case AFSVL_NOMEM:               return -EREMOTEIO;
 71 
 72                 /* Unified AFS error table; ET "uae" == 0x2f6df00 */
 73         case 0x2f6df00:         return -EPERM;
 74         case 0x2f6df01:         return -ENOENT;
 75         case 0x2f6df04:         return -EIO;
 76         case 0x2f6df0a:         return -EAGAIN;
 77         case 0x2f6df0b:         return -ENOMEM;
 78         case 0x2f6df0c:         return -EACCES;
 79         case 0x2f6df0f:         return -EBUSY;
 80         case 0x2f6df10:         return -EEXIST;
 81         case 0x2f6df11:         return -EXDEV;
 82         case 0x2f6df12:         return -ENODEV;
 83         case 0x2f6df13:         return -ENOTDIR;
 84         case 0x2f6df14:         return -EISDIR;
 85         case 0x2f6df15:         return -EINVAL;
 86         case 0x2f6df1a:         return -EFBIG;
 87         case 0x2f6df1b:         return -ENOSPC;
 88         case 0x2f6df1d:         return -EROFS;
 89         case 0x2f6df1e:         return -EMLINK;
 90         case 0x2f6df20:         return -EDOM;
 91         case 0x2f6df21:         return -ERANGE;
 92         case 0x2f6df22:         return -EDEADLK;
 93         case 0x2f6df23:         return -ENAMETOOLONG;
 94         case 0x2f6df24:         return -ENOLCK;
 95         case 0x2f6df26:         return -ENOTEMPTY;
 96         case 0x2f6df28:         return -EWOULDBLOCK;
 97         case 0x2f6df69:         return -ENOTCONN;
 98         case 0x2f6df6c:         return -ETIMEDOUT;
 99         case 0x2f6df78:         return -EDQUOT;
100 
101                 /* RXKAD abort codes; from include/rxrpc/packet.h.  ET "RXK" == 0x1260B00 */
102         case RXKADINCONSISTENCY: return -EPROTO;
103         case RXKADPACKETSHORT:  return -EPROTO;
104         case RXKADLEVELFAIL:    return -EKEYREJECTED;
105         case RXKADTICKETLEN:    return -EKEYREJECTED;
106         case RXKADOUTOFSEQUENCE: return -EPROTO;
107         case RXKADNOAUTH:       return -EKEYREJECTED;
108         case RXKADBADKEY:       return -EKEYREJECTED;
109         case RXKADBADTICKET:    return -EKEYREJECTED;
110         case RXKADUNKNOWNKEY:   return -EKEYREJECTED;
111         case RXKADEXPIRED:      return -EKEYEXPIRED;
112         case RXKADSEALEDINCON:  return -EKEYREJECTED;
113         case RXKADDATALEN:      return -EKEYREJECTED;
114         case RXKADILLEGALLEVEL: return -EKEYREJECTED;
115 
116         case RXGEN_OPCODE:      return -ENOTSUPP;
117 
118         default:                return -EREMOTEIO;
119         }
120 }
121 
122 /*
123  * Select the error to report from a set of errors.
124  */
125 void afs_prioritise_error(struct afs_error *e, int error, u32 abort_code)
126 {
127         switch (error) {
128         case 0:
129                 return;
130         default:
131                 if (e->error == -ETIMEDOUT ||
132                     e->error == -ETIME)
133                         return;
134         case -ETIMEDOUT:
135         case -ETIME:
136                 if (e->error == -ENOMEM ||
137                     e->error == -ENONET)
138                         return;
139         case -ENOMEM:
140         case -ENONET:
141                 if (e->error == -ERFKILL)
142                         return;
143         case -ERFKILL:
144                 if (e->error == -EADDRNOTAVAIL)
145                         return;
146         case -EADDRNOTAVAIL:
147                 if (e->error == -ENETUNREACH)
148                         return;
149         case -ENETUNREACH:
150                 if (e->error == -EHOSTUNREACH)
151                         return;
152         case -EHOSTUNREACH:
153                 if (e->error == -EHOSTDOWN)
154                         return;
155         case -EHOSTDOWN:
156                 if (e->error == -ECONNREFUSED)
157                         return;
158         case -ECONNREFUSED:
159                 if (e->error == -ECONNRESET)
160                         return;
161         case -ECONNRESET: /* Responded, but call expired. */
162                 if (e->responded)
163                         return;
164                 e->error = error;
165                 return;
166 
167         case -ECONNABORTED:
168                 e->responded = true;
169                 e->error = afs_abort_to_error(abort_code);
170                 return;
171         }
172 }
173 

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

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | 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.

osdn.jp