root/fs/afs/misc.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. afs_abort_to_error
  2. afs_prioritise_error

   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 UAEACCES:                  return -EACCES;
  73         case UAEBUSY:                   return -EBUSY;
  74         case UAEEXIST:                  return -EEXIST;
  75         case UAENOTDIR:                 return -ENOTDIR;
  76         case UAEISDIR:                  return -EISDIR;
  77         case UAEFBIG:                   return -EFBIG;
  78         case UAENOSPC:                  return -ENOSPC;
  79         case UAEROFS:                   return -EROFS;
  80         case UAEMLINK:                  return -EMLINK;
  81         case UAEDEADLK:                 return -EDEADLK;
  82         case UAENAMETOOLONG:            return -ENAMETOOLONG;
  83         case UAENOLCK:                  return -ENOLCK;
  84         case UAENOTEMPTY:               return -ENOTEMPTY;
  85         case UAELOOP:                   return -ELOOP;
  86         case UAENOMEDIUM:               return -ENOMEDIUM;
  87         case UAEDQUOT:                  return -EDQUOT;
  88 
  89                 /* RXKAD abort codes; from include/rxrpc/packet.h.  ET "RXK" == 0x1260B00 */
  90         case RXKADINCONSISTENCY: return -EPROTO;
  91         case RXKADPACKETSHORT:  return -EPROTO;
  92         case RXKADLEVELFAIL:    return -EKEYREJECTED;
  93         case RXKADTICKETLEN:    return -EKEYREJECTED;
  94         case RXKADOUTOFSEQUENCE: return -EPROTO;
  95         case RXKADNOAUTH:       return -EKEYREJECTED;
  96         case RXKADBADKEY:       return -EKEYREJECTED;
  97         case RXKADBADTICKET:    return -EKEYREJECTED;
  98         case RXKADUNKNOWNKEY:   return -EKEYREJECTED;
  99         case RXKADEXPIRED:      return -EKEYEXPIRED;
 100         case RXKADSEALEDINCON:  return -EKEYREJECTED;
 101         case RXKADDATALEN:      return -EKEYREJECTED;
 102         case RXKADILLEGALLEVEL: return -EKEYREJECTED;
 103 
 104         case RXGEN_OPCODE:      return -ENOTSUPP;
 105 
 106         default:                return -EREMOTEIO;
 107         }
 108 }
 109 
 110 /*
 111  * Select the error to report from a set of errors.
 112  */
 113 void afs_prioritise_error(struct afs_error *e, int error, u32 abort_code)
 114 {
 115         switch (error) {
 116         case 0:
 117                 return;
 118         default:
 119                 if (e->error == -ETIMEDOUT ||
 120                     e->error == -ETIME)
 121                         return;
 122                 /* Fall through */
 123         case -ETIMEDOUT:
 124         case -ETIME:
 125                 if (e->error == -ENOMEM ||
 126                     e->error == -ENONET)
 127                         return;
 128                 /* Fall through */
 129         case -ENOMEM:
 130         case -ENONET:
 131                 if (e->error == -ERFKILL)
 132                         return;
 133                 /* Fall through */
 134         case -ERFKILL:
 135                 if (e->error == -EADDRNOTAVAIL)
 136                         return;
 137                 /* Fall through */
 138         case -EADDRNOTAVAIL:
 139                 if (e->error == -ENETUNREACH)
 140                         return;
 141                 /* Fall through */
 142         case -ENETUNREACH:
 143                 if (e->error == -EHOSTUNREACH)
 144                         return;
 145                 /* Fall through */
 146         case -EHOSTUNREACH:
 147                 if (e->error == -EHOSTDOWN)
 148                         return;
 149                 /* Fall through */
 150         case -EHOSTDOWN:
 151                 if (e->error == -ECONNREFUSED)
 152                         return;
 153                 /* Fall through */
 154         case -ECONNREFUSED:
 155                 if (e->error == -ECONNRESET)
 156                         return;
 157                 /* Fall through */
 158         case -ECONNRESET: /* Responded, but call expired. */
 159                 if (e->responded)
 160                         return;
 161                 e->error = error;
 162                 return;
 163 
 164         case -ECONNABORTED:
 165                 e->responded = true;
 166                 e->error = afs_abort_to_error(abort_code);
 167                 return;
 168         }
 169 }

/* [<][>][^][v][top][bottom][index][help] */