afs: Consolidate abort_to_error translators

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>
This commit is contained in:
David Howells 2017-11-02 15:27:48 +00:00
parent 3838d3ecde
commit f780c8ea0e
6 changed files with 36 additions and 77 deletions

View File

@ -41,7 +41,6 @@ static CM_NAME(CallBack);
static const struct afs_call_type afs_SRXCBCallBack = { static const struct afs_call_type afs_SRXCBCallBack = {
.name = afs_SRXCBCallBack_name, .name = afs_SRXCBCallBack_name,
.deliver = afs_deliver_cb_callback, .deliver = afs_deliver_cb_callback,
.abort_to_error = afs_abort_to_error,
.destructor = afs_cm_destructor, .destructor = afs_cm_destructor,
.work = SRXAFSCB_CallBack, .work = SRXAFSCB_CallBack,
}; };
@ -53,7 +52,6 @@ static CM_NAME(InitCallBackState);
static const struct afs_call_type afs_SRXCBInitCallBackState = { static const struct afs_call_type afs_SRXCBInitCallBackState = {
.name = afs_SRXCBInitCallBackState_name, .name = afs_SRXCBInitCallBackState_name,
.deliver = afs_deliver_cb_init_call_back_state, .deliver = afs_deliver_cb_init_call_back_state,
.abort_to_error = afs_abort_to_error,
.destructor = afs_cm_destructor, .destructor = afs_cm_destructor,
.work = SRXAFSCB_InitCallBackState, .work = SRXAFSCB_InitCallBackState,
}; };
@ -65,7 +63,6 @@ static CM_NAME(InitCallBackState3);
static const struct afs_call_type afs_SRXCBInitCallBackState3 = { static const struct afs_call_type afs_SRXCBInitCallBackState3 = {
.name = afs_SRXCBInitCallBackState3_name, .name = afs_SRXCBInitCallBackState3_name,
.deliver = afs_deliver_cb_init_call_back_state3, .deliver = afs_deliver_cb_init_call_back_state3,
.abort_to_error = afs_abort_to_error,
.destructor = afs_cm_destructor, .destructor = afs_cm_destructor,
.work = SRXAFSCB_InitCallBackState, .work = SRXAFSCB_InitCallBackState,
}; };
@ -77,7 +74,6 @@ static CM_NAME(Probe);
static const struct afs_call_type afs_SRXCBProbe = { static const struct afs_call_type afs_SRXCBProbe = {
.name = afs_SRXCBProbe_name, .name = afs_SRXCBProbe_name,
.deliver = afs_deliver_cb_probe, .deliver = afs_deliver_cb_probe,
.abort_to_error = afs_abort_to_error,
.destructor = afs_cm_destructor, .destructor = afs_cm_destructor,
.work = SRXAFSCB_Probe, .work = SRXAFSCB_Probe,
}; };
@ -89,7 +85,6 @@ static CM_NAME(ProbeUuid);
static const struct afs_call_type afs_SRXCBProbeUuid = { static const struct afs_call_type afs_SRXCBProbeUuid = {
.name = afs_SRXCBProbeUuid_name, .name = afs_SRXCBProbeUuid_name,
.deliver = afs_deliver_cb_probe_uuid, .deliver = afs_deliver_cb_probe_uuid,
.abort_to_error = afs_abort_to_error,
.destructor = afs_cm_destructor, .destructor = afs_cm_destructor,
.work = SRXAFSCB_ProbeUuid, .work = SRXAFSCB_ProbeUuid,
}; };
@ -101,7 +96,6 @@ static CM_NAME(TellMeAboutYourself);
static const struct afs_call_type afs_SRXCBTellMeAboutYourself = { static const struct afs_call_type afs_SRXCBTellMeAboutYourself = {
.name = afs_SRXCBTellMeAboutYourself_name, .name = afs_SRXCBTellMeAboutYourself_name,
.deliver = afs_deliver_cb_tell_me_about_yourself, .deliver = afs_deliver_cb_tell_me_about_yourself,
.abort_to_error = afs_abort_to_error,
.destructor = afs_cm_destructor, .destructor = afs_cm_destructor,
.work = SRXAFSCB_TellMeAboutYourself, .work = SRXAFSCB_TellMeAboutYourself,
}; };

View File

@ -270,7 +270,6 @@ static int afs_deliver_fs_fetch_status(struct afs_call *call)
static const struct afs_call_type afs_RXFSFetchStatus = { static const struct afs_call_type afs_RXFSFetchStatus = {
.name = "FS.FetchStatus", .name = "FS.FetchStatus",
.deliver = afs_deliver_fs_fetch_status, .deliver = afs_deliver_fs_fetch_status,
.abort_to_error = afs_abort_to_error,
.destructor = afs_flat_call_destructor, .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 = { static const struct afs_call_type afs_RXFSFetchData = {
.name = "FS.FetchData", .name = "FS.FetchData",
.deliver = afs_deliver_fs_fetch_data, .deliver = afs_deliver_fs_fetch_data,
.abort_to_error = afs_abort_to_error,
.destructor = afs_fetch_data_destructor, .destructor = afs_fetch_data_destructor,
}; };
static const struct afs_call_type afs_RXFSFetchData64 = { static const struct afs_call_type afs_RXFSFetchData64 = {
.name = "FS.FetchData64", .name = "FS.FetchData64",
.deliver = afs_deliver_fs_fetch_data, .deliver = afs_deliver_fs_fetch_data,
.abort_to_error = afs_abort_to_error,
.destructor = afs_fetch_data_destructor, .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 = { static const struct afs_call_type afs_RXFSGiveUpCallBacks = {
.name = "FS.GiveUpCallBacks", .name = "FS.GiveUpCallBacks",
.deliver = afs_deliver_fs_give_up_callbacks, .deliver = afs_deliver_fs_give_up_callbacks,
.abort_to_error = afs_abort_to_error,
.destructor = afs_flat_call_destructor, .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 = { static const struct afs_call_type afs_RXFSCreateXXXX = {
.name = "FS.CreateXXXX", .name = "FS.CreateXXXX",
.deliver = afs_deliver_fs_create_vnode, .deliver = afs_deliver_fs_create_vnode,
.abort_to_error = afs_abort_to_error,
.destructor = afs_flat_call_destructor, .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 = { static const struct afs_call_type afs_RXFSRemoveXXXX = {
.name = "FS.RemoveXXXX", .name = "FS.RemoveXXXX",
.deliver = afs_deliver_fs_remove, .deliver = afs_deliver_fs_remove,
.abort_to_error = afs_abort_to_error,
.destructor = afs_flat_call_destructor, .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 = { static const struct afs_call_type afs_RXFSLink = {
.name = "FS.Link", .name = "FS.Link",
.deliver = afs_deliver_fs_link, .deliver = afs_deliver_fs_link,
.abort_to_error = afs_abort_to_error,
.destructor = afs_flat_call_destructor, .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 = { static const struct afs_call_type afs_RXFSSymlink = {
.name = "FS.Symlink", .name = "FS.Symlink",
.deliver = afs_deliver_fs_symlink, .deliver = afs_deliver_fs_symlink,
.abort_to_error = afs_abort_to_error,
.destructor = afs_flat_call_destructor, .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 = { static const struct afs_call_type afs_RXFSRename = {
.name = "FS.Rename", .name = "FS.Rename",
.deliver = afs_deliver_fs_rename, .deliver = afs_deliver_fs_rename,
.abort_to_error = afs_abort_to_error,
.destructor = afs_flat_call_destructor, .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 = { static const struct afs_call_type afs_RXFSStoreData = {
.name = "FS.StoreData", .name = "FS.StoreData",
.deliver = afs_deliver_fs_store_data, .deliver = afs_deliver_fs_store_data,
.abort_to_error = afs_abort_to_error,
.destructor = afs_flat_call_destructor, .destructor = afs_flat_call_destructor,
}; };
static const struct afs_call_type afs_RXFSStoreData64 = { static const struct afs_call_type afs_RXFSStoreData64 = {
.name = "FS.StoreData64", .name = "FS.StoreData64",
.deliver = afs_deliver_fs_store_data, .deliver = afs_deliver_fs_store_data,
.abort_to_error = afs_abort_to_error,
.destructor = afs_flat_call_destructor, .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 = { static const struct afs_call_type afs_RXFSStoreStatus = {
.name = "FS.StoreStatus", .name = "FS.StoreStatus",
.deliver = afs_deliver_fs_store_status, .deliver = afs_deliver_fs_store_status,
.abort_to_error = afs_abort_to_error,
.destructor = afs_flat_call_destructor, .destructor = afs_flat_call_destructor,
}; };
static const struct afs_call_type afs_RXFSStoreData_as_Status = { static const struct afs_call_type afs_RXFSStoreData_as_Status = {
.name = "FS.StoreData", .name = "FS.StoreData",
.deliver = afs_deliver_fs_store_status, .deliver = afs_deliver_fs_store_status,
.abort_to_error = afs_abort_to_error,
.destructor = afs_flat_call_destructor, .destructor = afs_flat_call_destructor,
}; };
static const struct afs_call_type afs_RXFSStoreData64_as_Status = { static const struct afs_call_type afs_RXFSStoreData64_as_Status = {
.name = "FS.StoreData64", .name = "FS.StoreData64",
.deliver = afs_deliver_fs_store_status, .deliver = afs_deliver_fs_store_status,
.abort_to_error = afs_abort_to_error,
.destructor = afs_flat_call_destructor, .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 = { static const struct afs_call_type afs_RXFSGetVolumeStatus = {
.name = "FS.GetVolumeStatus", .name = "FS.GetVolumeStatus",
.deliver = afs_deliver_fs_get_volume_status, .deliver = afs_deliver_fs_get_volume_status,
.abort_to_error = afs_abort_to_error,
.destructor = afs_get_volume_status_call_destructor, .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 = { static const struct afs_call_type afs_RXFSSetLock = {
.name = "FS.SetLock", .name = "FS.SetLock",
.deliver = afs_deliver_fs_xxxx_lock, .deliver = afs_deliver_fs_xxxx_lock,
.abort_to_error = afs_abort_to_error,
.destructor = afs_flat_call_destructor, .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 = { static const struct afs_call_type afs_RXFSExtendLock = {
.name = "FS.ExtendLock", .name = "FS.ExtendLock",
.deliver = afs_deliver_fs_xxxx_lock, .deliver = afs_deliver_fs_xxxx_lock,
.abort_to_error = afs_abort_to_error,
.destructor = afs_flat_call_destructor, .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 = { static const struct afs_call_type afs_RXFSReleaseLock = {
.name = "FS.ReleaseLock", .name = "FS.ReleaseLock",
.deliver = afs_deliver_fs_xxxx_lock, .deliver = afs_deliver_fs_xxxx_lock,
.abort_to_error = afs_abort_to_error,
.destructor = afs_flat_call_destructor, .destructor = afs_flat_call_destructor,
}; };

View File

@ -120,9 +120,6 @@ struct afs_call_type {
*/ */
int (*deliver)(struct afs_call *call); 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 */ /* clean up a call */
void (*destructor)(struct afs_call *call); void (*destructor)(struct afs_call *call);

View File

@ -21,12 +21,12 @@
int afs_abort_to_error(u32 abort_code) int afs_abort_to_error(u32 abort_code)
{ {
switch (abort_code) { switch (abort_code) {
/* low errno codes inserted into abort namespace */ /* Low errno codes inserted into abort namespace */
case 13: return -EACCES; case 13: return -EACCES;
case 27: return -EFBIG; case 27: return -EFBIG;
case 30: return -EROFS; case 30: return -EROFS;
/* VICE "special error" codes; 101 - 111 */ /* VICE "special error" codes; 101 - 111 */
case VSALVAGE: return -EIO; case VSALVAGE: return -EIO;
case VNOVNODE: return -ENOENT; case VNOVNODE: return -ENOENT;
case VNOVOL: return -ENOMEDIUM; case VNOVOL: return -ENOMEDIUM;
@ -39,7 +39,37 @@ int afs_abort_to_error(u32 abort_code)
case VBUSY: return -EBUSY; case VBUSY: return -EBUSY;
case VMOVED: return -ENXIO; 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 0x2f6df00: return -EPERM;
case 0x2f6df01: return -ENOENT; case 0x2f6df01: return -ENOENT;
case 0x2f6df04: return -EIO; case 0x2f6df04: return -EIO;
@ -68,7 +98,7 @@ int afs_abort_to_error(u32 abort_code)
case 0x2f6df6c: return -ETIMEDOUT; case 0x2f6df6c: return -ETIMEDOUT;
case 0x2f6df78: return -EDQUOT; 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 RXKADINCONSISTENCY: return -EPROTO;
case RXKADPACKETSHORT: return -EPROTO; case RXKADPACKETSHORT: return -EPROTO;
case RXKADLEVELFAIL: return -EKEYREJECTED; case RXKADLEVELFAIL: return -EKEYREJECTED;

View File

@ -31,7 +31,6 @@ static int afs_deliver_cm_op_id(struct afs_call *);
static const struct afs_call_type afs_RXCMxxxx = { static const struct afs_call_type afs_RXCMxxxx = {
.name = "CB.xxxx", .name = "CB.xxxx",
.deliver = afs_deliver_cm_op_id, .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, rxrpc_kernel_recv_data(call->net->socket, rxcall, NULL,
0, &offset, false, &abort_code, 0, &offset, false, &abort_code,
&call->service_id); &call->service_id);
ret = call->type->abort_to_error(abort_code); ret = afs_abort_to_error(abort_code);
} }
error_kill_call: error_kill_call:
afs_put_call(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) if (ret == -ECONNABORTED)
call->error = call->type->abort_to_error(call->abort_code); call->error = afs_abort_to_error(call->abort_code);
else else
call->error = ret; call->error = ret;
call->state = AFS_CALL_COMPLETE; call->state = AFS_CALL_COMPLETE;

View File

@ -15,47 +15,6 @@
#include "afs_fs.h" #include "afs_fs.h"
#include "internal.h" #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 * deliver reply data to a VL.GetEntryByXXX 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 = { static const struct afs_call_type afs_RXVLGetEntryByName = {
.name = "VL.GetEntryByName", .name = "VL.GetEntryByName",
.deliver = afs_deliver_vl_get_entry_by_xxx, .deliver = afs_deliver_vl_get_entry_by_xxx,
.abort_to_error = afs_vl_abort_to_error,
.destructor = afs_flat_call_destructor, .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 = { static const struct afs_call_type afs_RXVLGetEntryById = {
.name = "VL.GetEntryById", .name = "VL.GetEntryById",
.deliver = afs_deliver_vl_get_entry_by_xxx, .deliver = afs_deliver_vl_get_entry_by_xxx,
.abort_to_error = afs_vl_abort_to_error,
.destructor = afs_flat_call_destructor, .destructor = afs_flat_call_destructor,
}; };