From: Yan, Zheng Date: Sun, 31 Jan 2016 05:42:36 +0000 (+0800) Subject: compat: error code translation for OSX X-Git-Tag: ses5-milestone5~283^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=edf23836c930858162668d3445cae1010ad1b2ef;p=ceph.git compat: error code translation for OSX Signed-off-by: Yan, Zheng --- diff --git a/src/common/Makefile.am b/src/common/Makefile.am index a20d0ec52f6..df7c350ad00 100644 --- a/src/common/Makefile.am +++ b/src/common/Makefile.am @@ -106,6 +106,11 @@ libcommon_internal_la_SOURCES += \ common/aix_errno.cc endif +if DARWIN +libcommon_internal_la_SOURCES += \ + common/darwin_errno.cc +endif + if ENABLE_XIO libcommon_internal_la_SOURCES += \ common/address_helper.cc diff --git a/src/common/darwin_errno.cc b/src/common/darwin_errno.cc new file mode 100644 index 00000000000..48372d09035 --- /dev/null +++ b/src/common/darwin_errno.cc @@ -0,0 +1,224 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* + * Ceph - scalable distributed file system + * + * Copyright (C) 2011 New Dream Network + * + * This is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software + * Foundation. See file COPYING. + * + */ + +#include +#include "include/types.h" +#include "include/compat.h" + + +// converts from linux errno values to host values +__s32 ceph_to_host_errno(__s32 r) +{ + if (r < -34) { + switch (r) { + case -35: + return -EDEADLK; + case -36: + return -ENAMETOOLONG; + case -37: + return -ENOLCK; + case -38: + return -ENOSYS; + case -39: + return -ENOTEMPTY; + case -40: + return -ELOOP; + case -42: + return -ENOMSG; + case -43: + return -EIDRM; + case -44: + return -EPERM; //TODO ECHRNG + case -45: + return -EPERM; //TODO EL2NSYNC + case -46: + return -EPERM; //TODO EL3HLT + case -47: + return -EPERM; //TODO EL3RST + case -48: + return -EPERM; //TODO ELNRNG + case -49: + return -EPERM; //TODO EUNATCH + case -51: + return -EPERM; //TODO EL2HLT; + case -52: + return -EPERM; //TODO EBADE + case -53: + return -EPERM; //TODO EBADR + case -54: + return -EPERM; //TODO EXFULL + case -55: + return -EPERM; //TODO ENOANO + case -56: + return -EPERM; //TODO EBADRQC + case -57: + return -EPERM; //TODO EBADSLT + case -59: + return -EPERM; //TODO EBFONT + case -60: + return -ENOSTR; + case -61: + return -ENODATA; + case -62: + return -ETIME; + case -63: + return -ENOSR; + case -64: + return -EPERM; //TODO ENONET + case -65: + return -EPERM; //TODO ENOPKG + case -66: + return -EREMOTE; + case -67: + return -ENOLINK; + case -68: + return -EPERM; //TODO EADV + case -69: + return -EPERM; //TODO ESRMNT + case -70: + return -EPERM; //TODO ECOMM + case -71: + return -EPROTO; + case -72: + return -EMULTIHOP; + case -73: + return -EPERM; //TODO EDOTDOT + case -74: + return -EBADMSG; + case -75: + return -EOVERFLOW; + case -76: + return -EPERM; //TODO ENOTUNIQ + case -77: + return -EPERM; //TODO EBADFD + case -78: + return -EPERM; //TODO EREMCHG + case -79: + return -EPERM; //TODO ELIBACC + case -80: + return -EPERM; //TODO ELIBBAD + case -81: + return -EPERM; //TODO ELIBSCN + case -82: + return -EPERM; //TODO ELIBMAX + case -83: + return -EPERM; // TODO ELIBEXEC + case -84: + return -EILSEQ; + case -85: + return -EINTR; + case -86: + return -EPERM; //ESTRPIPE; + case -87: + return -EUSERS; + case -88: + return -ENOTSOCK; + case -89: + return -EDESTADDRREQ; + case -90: + return -EMSGSIZE; + case -91: + return -EPROTOTYPE; + case -92: + return -ENOPROTOOPT; + case -93: + return -EPROTONOSUPPORT; + case -94: + return -ESOCKTNOSUPPORT; + case -95: + return -EOPNOTSUPP; + case -96: + return -EPFNOSUPPORT; + case -97: + return -EAFNOSUPPORT; + case -98: + return -EADDRINUSE; + case -99: + return -EADDRNOTAVAIL; + case -100: + return -ENETDOWN; + case -101: + return -ENETUNREACH; + case -102: + return -ENETRESET; + case -103: + return -ECONNABORTED; + case -104: + return -ECONNRESET; + case -105: + return -ENOBUFS; + case -106: + return -EISCONN; + case -107: + return -ENOTCONN; + case -108: + return -ESHUTDOWN; + case -109: + return -ETOOMANYREFS; + case -110: + return -ETIMEDOUT; + case -111: + return -ECONNREFUSED; + case -112: + return -EHOSTDOWN; + case -113: + return -EHOSTUNREACH; + case -114: + return -EALREADY; + case -115: + return -EINPROGRESS; + case -116: + return -ESTALE; + case -117: + return -EPERM; //TODO EUCLEAN + case -118: + return -EPERM; //TODO ENOTNAM + case -119: + return -EPERM; //TODO ENAVAIL + case -120: + return -EPERM; //TODO EISNAM + case -121: + return -EREMOTEIO; + case -122: + return -EDQUOT; + case -123: + return -EPERM; //TODO ENOMEDIUM + case -124: + return -EPERM; //TODO EMEDIUMTYPE - not used + case -125: + return -ECANCELED; + case -126: + return -EPERM; //TODO ENOKEY + case -127: + return -EPERM; //TODO EKEYEXPIRED + case -128: + return -EPERM; //TODO EKEYREVOKED + case -129: + return -EPERM; //TODO EKEYREJECTED + case -130: + return -EOWNERDEAD; + case -131: + return -ENOTRECOVERABLE; + case -132: + return -EPERM; //TODO ERFKILL + case -133: + return -EPERM; //TODO EHWPOISON + + default: { + break; + } + } + } + return r; // otherwise return original value +} diff --git a/src/include/types.h b/src/include/types.h index d8a679f5743..7735654bf92 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -475,7 +475,7 @@ WRITE_EQ_OPERATORS_1(shard_id_t, id) WRITE_CMP_OPERATORS_1(shard_id_t, id) ostream &operator<<(ostream &lhs, const shard_id_t &rhs); -#if defined(__sun) || defined(_AIX) +#if defined(__sun) || defined(_AIX) || defined(DARWIN) __s32 ceph_to_host_errno(__s32 e); #else #define ceph_to_host_errno(e) (e) diff --git a/src/messages/MClientReply.h b/src/messages/MClientReply.h index 81e1cf2bf4e..44ceae2bf47 100644 --- a/src/messages/MClientReply.h +++ b/src/messages/MClientReply.h @@ -205,7 +205,9 @@ public: void set_mdsmap_epoch(epoch_t e) { head.mdsmap_epoch = e; } epoch_t get_mdsmap_epoch() const { return head.mdsmap_epoch; } - int get_result() const { return (__s32)(__u32)head.result; } + int get_result() const { + return ceph_to_host_errno((__s32)(__u32)head.result); + } void set_result(int r) { head.result = r; }