OSDN Git Service

afs: Consolidate abort_to_error translators
authorDavid Howells <dhowells@redhat.com>
Thu, 2 Nov 2017 15:27:48 +0000 (15:27 +0000)
committerDavid Howells <dhowells@redhat.com>
Mon, 13 Nov 2017 15:38:17 +0000 (15:38 +0000)
The AFS abort code space is shared across all services, so there's no need
for separate abort_to_error translators for each service.

Consolidate them into a single function and remove the function pointers
for them.

Signed-off-by: David Howells <dhowells@redhat.com>
fs/afs/cmservice.c
fs/afs/fsclient.c
fs/afs/internal.h
fs/afs/misc.c
fs/afs/rxrpc.c
fs/afs/vlclient.c

index 9ad39f8..2403291 100644 (file)
@@ -41,7 +41,6 @@ static CM_NAME(CallBack);
 static const struct afs_call_type afs_SRXCBCallBack = {
        .name           = afs_SRXCBCallBack_name,
        .deliver        = afs_deliver_cb_callback,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_cm_destructor,
        .work           = SRXAFSCB_CallBack,
 };
@@ -53,7 +52,6 @@ static CM_NAME(InitCallBackState);
 static const struct afs_call_type afs_SRXCBInitCallBackState = {
        .name           = afs_SRXCBInitCallBackState_name,
        .deliver        = afs_deliver_cb_init_call_back_state,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_cm_destructor,
        .work           = SRXAFSCB_InitCallBackState,
 };
@@ -65,7 +63,6 @@ static CM_NAME(InitCallBackState3);
 static const struct afs_call_type afs_SRXCBInitCallBackState3 = {
        .name           = afs_SRXCBInitCallBackState3_name,
        .deliver        = afs_deliver_cb_init_call_back_state3,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_cm_destructor,
        .work           = SRXAFSCB_InitCallBackState,
 };
@@ -77,7 +74,6 @@ static CM_NAME(Probe);
 static const struct afs_call_type afs_SRXCBProbe = {
        .name           = afs_SRXCBProbe_name,
        .deliver        = afs_deliver_cb_probe,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_cm_destructor,
        .work           = SRXAFSCB_Probe,
 };
@@ -89,7 +85,6 @@ static CM_NAME(ProbeUuid);
 static const struct afs_call_type afs_SRXCBProbeUuid = {
        .name           = afs_SRXCBProbeUuid_name,
        .deliver        = afs_deliver_cb_probe_uuid,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_cm_destructor,
        .work           = SRXAFSCB_ProbeUuid,
 };
@@ -101,7 +96,6 @@ static CM_NAME(TellMeAboutYourself);
 static const struct afs_call_type afs_SRXCBTellMeAboutYourself = {
        .name           = afs_SRXCBTellMeAboutYourself_name,
        .deliver        = afs_deliver_cb_tell_me_about_yourself,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_cm_destructor,
        .work           = SRXAFSCB_TellMeAboutYourself,
 };
index bac2e8d..7acfbc6 100644 (file)
@@ -270,7 +270,6 @@ static int afs_deliver_fs_fetch_status(struct afs_call *call)
 static const struct afs_call_type afs_RXFSFetchStatus = {
        .name           = "FS.FetchStatus",
        .deliver        = afs_deliver_fs_fetch_status,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
@@ -468,14 +467,12 @@ static void afs_fetch_data_destructor(struct afs_call *call)
 static const struct afs_call_type afs_RXFSFetchData = {
        .name           = "FS.FetchData",
        .deliver        = afs_deliver_fs_fetch_data,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_fetch_data_destructor,
 };
 
 static const struct afs_call_type afs_RXFSFetchData64 = {
        .name           = "FS.FetchData64",
        .deliver        = afs_deliver_fs_fetch_data,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_fetch_data_destructor,
 };
 
@@ -579,7 +576,6 @@ static int afs_deliver_fs_give_up_callbacks(struct afs_call *call)
 static const struct afs_call_type afs_RXFSGiveUpCallBacks = {
        .name           = "FS.GiveUpCallBacks",
        .deliver        = afs_deliver_fs_give_up_callbacks,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
@@ -677,7 +673,6 @@ static int afs_deliver_fs_create_vnode(struct afs_call *call)
 static const struct afs_call_type afs_RXFSCreateXXXX = {
        .name           = "FS.CreateXXXX",
        .deliver        = afs_deliver_fs_create_vnode,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
@@ -769,7 +764,6 @@ static int afs_deliver_fs_remove(struct afs_call *call)
 static const struct afs_call_type afs_RXFSRemoveXXXX = {
        .name           = "FS.RemoveXXXX",
        .deliver        = afs_deliver_fs_remove,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
@@ -849,7 +843,6 @@ static int afs_deliver_fs_link(struct afs_call *call)
 static const struct afs_call_type afs_RXFSLink = {
        .name           = "FS.Link",
        .deliver        = afs_deliver_fs_link,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
@@ -934,7 +927,6 @@ static int afs_deliver_fs_symlink(struct afs_call *call)
 static const struct afs_call_type afs_RXFSSymlink = {
        .name           = "FS.Symlink",
        .deliver        = afs_deliver_fs_symlink,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
@@ -1038,7 +1030,6 @@ static int afs_deliver_fs_rename(struct afs_call *call)
 static const struct afs_call_type afs_RXFSRename = {
        .name           = "FS.Rename",
        .deliver        = afs_deliver_fs_rename,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
@@ -1140,14 +1131,12 @@ static int afs_deliver_fs_store_data(struct afs_call *call)
 static const struct afs_call_type afs_RXFSStoreData = {
        .name           = "FS.StoreData",
        .deliver        = afs_deliver_fs_store_data,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
 static const struct afs_call_type afs_RXFSStoreData64 = {
        .name           = "FS.StoreData64",
        .deliver        = afs_deliver_fs_store_data,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
@@ -1318,21 +1307,18 @@ static int afs_deliver_fs_store_status(struct afs_call *call)
 static const struct afs_call_type afs_RXFSStoreStatus = {
        .name           = "FS.StoreStatus",
        .deliver        = afs_deliver_fs_store_status,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
 static const struct afs_call_type afs_RXFSStoreData_as_Status = {
        .name           = "FS.StoreData",
        .deliver        = afs_deliver_fs_store_status,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
 static const struct afs_call_type afs_RXFSStoreData64_as_Status = {
        .name           = "FS.StoreData64",
        .deliver        = afs_deliver_fs_store_status,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
@@ -1659,7 +1645,6 @@ static void afs_get_volume_status_call_destructor(struct afs_call *call)
 static const struct afs_call_type afs_RXFSGetVolumeStatus = {
        .name           = "FS.GetVolumeStatus",
        .deliver        = afs_deliver_fs_get_volume_status,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_get_volume_status_call_destructor,
 };
 
@@ -1730,7 +1715,6 @@ static int afs_deliver_fs_xxxx_lock(struct afs_call *call)
 static const struct afs_call_type afs_RXFSSetLock = {
        .name           = "FS.SetLock",
        .deliver        = afs_deliver_fs_xxxx_lock,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
@@ -1740,7 +1724,6 @@ static const struct afs_call_type afs_RXFSSetLock = {
 static const struct afs_call_type afs_RXFSExtendLock = {
        .name           = "FS.ExtendLock",
        .deliver        = afs_deliver_fs_xxxx_lock,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
@@ -1750,7 +1733,6 @@ static const struct afs_call_type afs_RXFSExtendLock = {
 static const struct afs_call_type afs_RXFSReleaseLock = {
        .name           = "FS.ReleaseLock",
        .deliver        = afs_deliver_fs_xxxx_lock,
-       .abort_to_error = afs_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
index 4fe26bd..ba31a38 100644 (file)
@@ -120,9 +120,6 @@ struct afs_call_type {
         */
        int (*deliver)(struct afs_call *call);
 
-       /* map an abort code to an error number */
-       int (*abort_to_error)(u32 abort_code);
-
        /* clean up a call */
        void (*destructor)(struct afs_call *call);
 
index c05f1f1..700a5fa 100644 (file)
 int afs_abort_to_error(u32 abort_code)
 {
        switch (abort_code) {
-       /* low errno codes inserted into abort namespace */
+               /* Low errno codes inserted into abort namespace */
        case 13:                return -EACCES;
        case 27:                return -EFBIG;
        case 30:                return -EROFS;
 
-       /* VICE "special error" codes; 101 - 111 */
+               /* VICE "special error" codes; 101 - 111 */
        case VSALVAGE:          return -EIO;
        case VNOVNODE:          return -ENOENT;
        case VNOVOL:            return -ENOMEDIUM;
@@ -39,7 +39,37 @@ int afs_abort_to_error(u32 abort_code)
        case VBUSY:             return -EBUSY;
        case VMOVED:            return -ENXIO;
 
-       /* Unified AFS error table; ET "uae" == 0x2f6df00 */
+               /* Volume Location server errors */
+       case AFSVL_IDEXIST:             return -EEXIST;
+       case AFSVL_IO:                  return -EREMOTEIO;
+       case AFSVL_NAMEEXIST:           return -EEXIST;
+       case AFSVL_CREATEFAIL:          return -EREMOTEIO;
+       case AFSVL_NOENT:               return -ENOMEDIUM;
+       case AFSVL_EMPTY:               return -ENOMEDIUM;
+       case AFSVL_ENTDELETED:          return -ENOMEDIUM;
+       case AFSVL_BADNAME:             return -EINVAL;
+       case AFSVL_BADINDEX:            return -EINVAL;
+       case AFSVL_BADVOLTYPE:          return -EINVAL;
+       case AFSVL_BADSERVER:           return -EINVAL;
+       case AFSVL_BADPARTITION:        return -EINVAL;
+       case AFSVL_REPSFULL:            return -EFBIG;
+       case AFSVL_NOREPSERVER:         return -ENOENT;
+       case AFSVL_DUPREPSERVER:        return -EEXIST;
+       case AFSVL_RWNOTFOUND:          return -ENOENT;
+       case AFSVL_BADREFCOUNT:         return -EINVAL;
+       case AFSVL_SIZEEXCEEDED:        return -EINVAL;
+       case AFSVL_BADENTRY:            return -EINVAL;
+       case AFSVL_BADVOLIDBUMP:        return -EINVAL;
+       case AFSVL_IDALREADYHASHED:     return -EINVAL;
+       case AFSVL_ENTRYLOCKED:         return -EBUSY;
+       case AFSVL_BADVOLOPER:          return -EBADRQC;
+       case AFSVL_BADRELLOCKTYPE:      return -EINVAL;
+       case AFSVL_RERELEASE:           return -EREMOTEIO;
+       case AFSVL_BADSERVERFLAG:       return -EINVAL;
+       case AFSVL_PERM:                return -EACCES;
+       case AFSVL_NOMEM:               return -EREMOTEIO;
+
+               /* Unified AFS error table; ET "uae" == 0x2f6df00 */
        case 0x2f6df00:         return -EPERM;
        case 0x2f6df01:         return -ENOENT;
        case 0x2f6df04:         return -EIO;
@@ -68,7 +98,7 @@ int afs_abort_to_error(u32 abort_code)
        case 0x2f6df6c:         return -ETIMEDOUT;
        case 0x2f6df78:         return -EDQUOT;
 
-       /* RXKAD abort codes; from include/rxrpc/packet.h.  ET "RXK" == 0x1260B00 */
+               /* RXKAD abort codes; from include/rxrpc/packet.h.  ET "RXK" == 0x1260B00 */
        case RXKADINCONSISTENCY: return -EPROTO;
        case RXKADPACKETSHORT:  return -EPROTO;
        case RXKADLEVELFAIL:    return -EKEYREJECTED;
index 5d2c1a3..5f06cf7 100644 (file)
@@ -31,7 +31,6 @@ static int afs_deliver_cm_op_id(struct afs_call *);
 static const struct afs_call_type afs_RXCMxxxx = {
        .name           = "CB.xxxx",
        .deliver        = afs_deliver_cm_op_id,
-       .abort_to_error = afs_abort_to_error,
 };
 
 /*
@@ -418,7 +417,7 @@ error_do_abort:
                rxrpc_kernel_recv_data(call->net->socket, rxcall, NULL,
                                       0, &offset, false, &abort_code,
                                       &call->service_id);
-               ret = call->type->abort_to_error(abort_code);
+               ret = afs_abort_to_error(abort_code);
        }
 error_kill_call:
        afs_put_call(call);
@@ -876,7 +875,7 @@ int afs_extract_data(struct afs_call *call, void *buf, size_t count,
        }
 
        if (ret == -ECONNABORTED)
-               call->error = call->type->abort_to_error(call->abort_code);
+               call->error = afs_abort_to_error(call->abort_code);
        else
                call->error = ret;
        call->state = AFS_CALL_COMPLETE;
index 276319a..66e62be 100644 (file)
 #include "internal.h"
 
 /*
- * map volume locator abort codes to error codes
- */
-static int afs_vl_abort_to_error(u32 abort_code)
-{
-       _enter("%u", abort_code);
-
-       switch (abort_code) {
-       case AFSVL_IDEXIST:             return -EEXIST;
-       case AFSVL_IO:                  return -EREMOTEIO;
-       case AFSVL_NAMEEXIST:           return -EEXIST;
-       case AFSVL_CREATEFAIL:          return -EREMOTEIO;
-       case AFSVL_NOENT:               return -ENOMEDIUM;
-       case AFSVL_EMPTY:               return -ENOMEDIUM;
-       case AFSVL_ENTDELETED:          return -ENOMEDIUM;
-       case AFSVL_BADNAME:             return -EINVAL;
-       case AFSVL_BADINDEX:            return -EINVAL;
-       case AFSVL_BADVOLTYPE:          return -EINVAL;
-       case AFSVL_BADSERVER:           return -EINVAL;
-       case AFSVL_BADPARTITION:        return -EINVAL;
-       case AFSVL_REPSFULL:            return -EFBIG;
-       case AFSVL_NOREPSERVER:         return -ENOENT;
-       case AFSVL_DUPREPSERVER:        return -EEXIST;
-       case AFSVL_RWNOTFOUND:          return -ENOENT;
-       case AFSVL_BADREFCOUNT:         return -EINVAL;
-       case AFSVL_SIZEEXCEEDED:        return -EINVAL;
-       case AFSVL_BADENTRY:            return -EINVAL;
-       case AFSVL_BADVOLIDBUMP:        return -EINVAL;
-       case AFSVL_IDALREADYHASHED:     return -EINVAL;
-       case AFSVL_ENTRYLOCKED:         return -EBUSY;
-       case AFSVL_BADVOLOPER:          return -EBADRQC;
-       case AFSVL_BADRELLOCKTYPE:      return -EINVAL;
-       case AFSVL_RERELEASE:           return -EREMOTEIO;
-       case AFSVL_BADSERVERFLAG:       return -EINVAL;
-       case AFSVL_PERM:                return -EACCES;
-       case AFSVL_NOMEM:               return -EREMOTEIO;
-       default:
-               return afs_abort_to_error(abort_code);
-       }
-}
-
-/*
  * deliver reply data to a VL.GetEntryByXXX call
  */
 static int afs_deliver_vl_get_entry_by_xxx(struct afs_call *call)
@@ -139,7 +98,6 @@ static int afs_deliver_vl_get_entry_by_xxx(struct afs_call *call)
 static const struct afs_call_type afs_RXVLGetEntryByName = {
        .name           = "VL.GetEntryByName",
        .deliver        = afs_deliver_vl_get_entry_by_xxx,
-       .abort_to_error = afs_vl_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };
 
@@ -149,7 +107,6 @@ static const struct afs_call_type afs_RXVLGetEntryByName = {
 static const struct afs_call_type afs_RXVLGetEntryById = {
        .name           = "VL.GetEntryById",
        .deliver        = afs_deliver_vl_get_entry_by_xxx,
-       .abort_to_error = afs_vl_abort_to_error,
        .destructor     = afs_flat_call_destructor,
 };