New upstream version 8.1.0
This commit is contained in:
93
client_module/source/common/storage/StorageErrors.c
Normal file
93
client_module/source/common/storage/StorageErrors.c
Normal file
@@ -0,0 +1,93 @@
|
||||
#include <common/storage/StorageErrors.h>
|
||||
#include <common/Common.h>
|
||||
|
||||
|
||||
#define __FHGFSOPS_ERRLIST_SIZE \
|
||||
( (sizeof(__FHGFSOPS_ERRLIST) ) / (sizeof(struct FhgfsOpsErrListEntry) ) - 1)
|
||||
/* -1 because last elem is NULL */
|
||||
|
||||
|
||||
|
||||
// Note: This is based on the FhgfsOpsErr entries
|
||||
// Note: We use EREMOTEIO as a generic error here
|
||||
struct FhgfsOpsErrListEntry const __FHGFSOPS_ERRLIST[] =
|
||||
{
|
||||
{"Success", 0}, // FhgfsOpsErr_SUCCESS
|
||||
{"Internal error", EREMOTEIO}, // FhgfsOpsErr_INTERNAL
|
||||
{"Interrupted system call", EINTR}, // FhgfsOpsErr_INTERRUPTED
|
||||
{"Communication error", ECOMM}, // FhgfsOpsErr_COMMUNICATION
|
||||
{"Communication timeout", ETIMEDOUT}, // FhgfsOpsErr_COMMTIMEDOUT
|
||||
{"Unknown node", EREMOTEIO}, // FhgfsOpsErr_UNKNOWNNODE
|
||||
{"Node is not owner of entry", EREMOTEIO}, // FhgfsOpsErr_NOTOWNER
|
||||
{"Entry exists already", EEXIST}, // FhgfsOpsErr_EXISTS
|
||||
{"Path does not exist", ENOENT}, // FhgfsOpsErr_PATHNOTEXISTS
|
||||
{"Entry is in use", EBUSY}, // FhgfsOpsErr_INUSE
|
||||
{"Dynamic attributes of entry are outdated", EREMOTEIO}, // FhgfsOpsErr_INUSE
|
||||
{"Removed", 999}, // former FhgfsOpsErr_PARENTTOSUBDIR, not used
|
||||
{"Entry is not a directory", ENOTDIR}, // FhgfsOpsErr_NOTADIR
|
||||
{"Directory is not empty", ENOTEMPTY}, // FhgfsOpsErr_NOTEMPTY
|
||||
{"No space left", ENOSPC}, // FhgfsOpsErr_NOSPACE
|
||||
{"Unknown storage target", EREMOTEIO}, // FhgfsOpsErr_UNKNOWNTARGET
|
||||
{"Operation would block", EWOULDBLOCK}, // FhgfsOpsErr_WOULDBLOCK
|
||||
{"Inode not inlined", EREMOTEIO}, // FhgfsOpsErr_INODENOTINLINED
|
||||
{"Underlying file system error", EREMOTEIO}, // FhgfsOpsErr_SAVEERROR
|
||||
{"Argument too large", EFBIG}, // FhgfsOpsErr_TOOBIG
|
||||
{"Invalid argument", EINVAL}, // FhgfsOpsErr_INVAL
|
||||
{"Bad memory address", EFAULT}, // FhgfsOpsErr_ADDRESSFAULT
|
||||
{"Try again", EAGAIN}, // FhgfsOpsErr_AGAIN
|
||||
{"Potential cache loss for open file handle. (Server crash detected.)" , EREMOTEIO}, /*
|
||||
FhgfsOpsErr_STORAGE_SRV_CRASHED*/
|
||||
{"Permission denied", EPERM}, // FhgfsOpsErr_PERM
|
||||
{"Quota exceeded", EDQUOT}, // FhgfsOpsErr_DQUOT
|
||||
{"Out of memory", ENOMEM}, // FhgfsOpsErr_OUTOFMEM
|
||||
{"Numerical result out of range", ERANGE}, // FhgfsOpsErr_RANGE
|
||||
{"No data available", ENODATA}, // FhgfsOpsErr_NODATA
|
||||
{"Operation not supported", EOPNOTSUPP}, // FhgfsOpsErr_NOTSUPP
|
||||
{"Argument list too long", E2BIG}, // FhgfsOpsErr_TOOLONG
|
||||
{"Metadata version mismatch", ESTALE}, // FhgfsOpsErr_METAVERSIONMISMATCH
|
||||
{"Inode is locked", EBUSY}, // FhgfsOpsErr_INODELOCKED
|
||||
{"File access denied by state restrictions", EWOULDBLOCK}, // FhgfsOpsErr_FILEACCESS_DENIED
|
||||
{NULL, 0}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @return static human-readable error string
|
||||
*/
|
||||
const char* FhgfsOpsErr_toErrString(FhgfsOpsErr errCode)
|
||||
{
|
||||
size_t unsignedErrCode = (size_t)errCode;
|
||||
|
||||
if(likely(unsignedErrCode < __FHGFSOPS_ERRLIST_SIZE) )
|
||||
return __FHGFSOPS_ERRLIST[unsignedErrCode].errString;
|
||||
|
||||
#ifdef BEEGFS_DEBUG
|
||||
printk_fhgfs(KERN_WARNING, "Unknown errCode given to FhgfsOpsErr_toErrString(): %d/%u "
|
||||
"(dumping stack...)\n", (int)errCode, (unsigned)errCode);
|
||||
|
||||
dump_stack();
|
||||
#endif
|
||||
|
||||
return "Unknown error code";
|
||||
}
|
||||
|
||||
/**
|
||||
* @return negative linux error code
|
||||
*/
|
||||
int FhgfsOpsErr_toSysErr(FhgfsOpsErr errCode)
|
||||
{
|
||||
size_t unsignedErrCode = (size_t)errCode;
|
||||
|
||||
if(likely(unsignedErrCode < __FHGFSOPS_ERRLIST_SIZE) )
|
||||
return -(__FHGFSOPS_ERRLIST[errCode].sysErr);
|
||||
|
||||
#ifdef BEEGFS_DEBUG
|
||||
printk_fhgfs(KERN_WARNING, "Unknown errCode given to FhgfsOpsErr_toSysErr(): %d/%u "
|
||||
"(dumping stack...)\n", (int)errCode, (unsigned)errCode);
|
||||
|
||||
dump_stack();
|
||||
#endif
|
||||
|
||||
return -EPERM;
|
||||
}
|
||||
Reference in New Issue
Block a user