From: Igor Golikov Date: Tue, 18 Feb 2025 11:44:17 +0000 (+0000) Subject: mds: prepare infra to replace CEPHFS_EXXX codes to system codes X-Git-Tag: testing/wip-pdonnell-testing-20250220.015803-debug~23^2~2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=4fe51a1afc69881d181f16f0e5facd919bd7307a;p=ceph-ci.git mds: prepare infra to replace CEPHFS_EXXX codes to system codes Signed-off-by: Igor Golikov Fixes: https://tracker.ceph.com/issues/64611 --- diff --git a/src/common/win32/errno.cc b/src/common/win32/errno.cc index 450941e2160..022f4c4f61c 100644 --- a/src/common/win32/errno.cc +++ b/src/common/win32/errno.cc @@ -47,6 +47,11 @@ __u32 ceph_to_hostos_errno_unsigned(__u32 r) case 9: return EBADF; case 10: return ECHILD; // same as EWOULDBLOCK + // need to be careful of treating EWOULDBLOCK same way as EAGAIN + // in errno.h (in Windows) the EWOULDBLOCK is set to 140, while EAGAIN is 11 + // In the cephfs client tests we changed assertions that expected EWOULDBLOCK to EAGAIN, + // since MDS returns EAGAIN for all cases. EWOULBLOCK originally was used with socket context, + // so semantically it makes sense to use EAGAIN for operations that indicate some possible waiting/retry case 11: return EAGAIN; case 12: return ENOMEM; case 13: return EACCES; @@ -597,57 +602,4 @@ std::string win32_lasterror_str() { DWORD err = ::GetLastError(); return win32_strerror(err); -} - -static const ceph::unordered_map cephfs_errno_to_ntstatus = { - {CEPHFS_EBLOCKLISTED, STATUS_SYSTEM_SHUTDOWN}, - {CEPHFS_EPERM, STATUS_ACCESS_DENIED}, - {CEPHFS_ESTALE, STATUS_INVALID_HANDLE}, - {CEPHFS_ENOSPC, STATUS_DISK_FULL}, - {CEPHFS_ETIMEDOUT, STATUS_TIMEOUT}, - {CEPHFS_EIO, STATUS_DATA_ERROR}, - {CEPHFS_ENOTCONN, STATUS_CONNECTION_DISCONNECTED}, - {CEPHFS_EEXIST, STATUS_OBJECT_NAME_COLLISION}, - {CEPHFS_EINTR, STATUS_RETRY}, - {CEPHFS_EINVAL, STATUS_INVALID_PARAMETER}, - {CEPHFS_EBADF, STATUS_INVALID_HANDLE}, - {CEPHFS_EROFS, STATUS_MEDIA_WRITE_PROTECTED}, - {CEPHFS_EAGAIN, STATUS_RETRY}, - {CEPHFS_EACCES, STATUS_ACCESS_DENIED}, - {CEPHFS_ELOOP, STATUS_TOO_MANY_LINKS}, - {CEPHFS_EISDIR, STATUS_FILE_IS_A_DIRECTORY}, - {CEPHFS_ENOENT, STATUS_OBJECT_NAME_NOT_FOUND}, - {CEPHFS_ENOTDIR, STATUS_NOT_A_DIRECTORY}, - {CEPHFS_ENAMETOOLONG, STATUS_NAME_TOO_LONG}, - {CEPHFS_EBUSY, STATUS_DEVICE_BUSY}, - {CEPHFS_EDQUOT, STATUS_QUOTA_EXCEEDED}, - {CEPHFS_EFBIG, STATUS_FILE_TOO_LARGE}, - {CEPHFS_ERANGE, STATUS_INVALID_PARAMETER}, - {CEPHFS_ENXIO, STATUS_NOT_FOUND}, - {CEPHFS_ECANCELED, STATUS_REQUEST_CANCELED}, - {CEPHFS_ENODATA, STATUS_NOT_FOUND}, - {CEPHFS_EOPNOTSUPP, STATUS_NOT_SUPPORTED}, - {CEPHFS_EXDEV, STATUS_NOT_SAME_DEVICE}, - {CEPHFS_ENOMEM, STATUS_NO_MEMORY}, - {CEPHFS_ENOTRECOVERABLE, STATUS_INTERNAL_ERROR}, - {CEPHFS_ENOSYS, STATUS_NOT_IMPLEMENTED}, - {CEPHFS_ENOTEMPTY, STATUS_DIRECTORY_NOT_EMPTY}, - {CEPHFS_EDEADLK, STATUS_POSSIBLE_DEADLOCK}, - {CEPHFS_EDOM, STATUS_INVALID_PARAMETER}, - {CEPHFS_EMLINK, STATUS_TOO_MANY_LINKS}, - {CEPHFS_ETIME, STATUS_TIMEOUT}, - {CEPHFS_EOLDSNAPC, STATUS_DATA_ERROR} -}; - -__u32 cephfs_errno_to_ntstatus_map(int cephfs_errno) -{ - cephfs_errno = abs(cephfs_errno); - - if (cephfs_errno == 0) - return 0; - - auto it = cephfs_errno_to_ntstatus.find(cephfs_errno); - if (it != cephfs_errno_to_ntstatus.end()) - return it->second; - return STATUS_INTERNAL_ERROR; -} +} \ No newline at end of file diff --git a/src/include/fs_types.h b/src/include/fs_types.h index 2de6bf8284c..071d1fb3482 100644 --- a/src/include/fs_types.h +++ b/src/include/fs_types.h @@ -13,50 +13,6 @@ class JSONObj; -#define CEPHFS_EBLOCKLISTED 108 -#define CEPHFS_EPERM 1 -#define CEPHFS_ESTALE 116 -#define CEPHFS_ENOSPC 28 -#define CEPHFS_ETIMEDOUT 110 -#define CEPHFS_EIO 5 -#define CEPHFS_ENOTCONN 107 -#define CEPHFS_EEXIST 17 -#define CEPHFS_EINTR 4 -#define CEPHFS_EINVAL 22 -#define CEPHFS_EBADF 9 -#define CEPHFS_EROFS 30 -#define CEPHFS_EAGAIN 11 -#define CEPHFS_EACCES 13 -#define CEPHFS_ELOOP 40 -#define CEPHFS_EISDIR 21 -#define CEPHFS_ENOENT 2 -#define CEPHFS_ENOTDIR 20 -#define CEPHFS_ENAMETOOLONG 36 -#define CEPHFS_EBUSY 16 -#define CEPHFS_EDQUOT 122 -#define CEPHFS_EFBIG 27 -#define CEPHFS_ERANGE 34 -#define CEPHFS_ENXIO 6 -#define CEPHFS_ECANCELED 125 -#define CEPHFS_ENODATA 61 -#define CEPHFS_EOPNOTSUPP 95 -#define CEPHFS_EXDEV 18 -#define CEPHFS_ENOMEM 12 -#define CEPHFS_ENOTRECOVERABLE 131 -#define CEPHFS_ENOSYS 38 -#define CEPHFS_EWOULDBLOCK CEPHFS_EAGAIN -#define CEPHFS_ENOTEMPTY 39 -#define CEPHFS_EDEADLK 35 -#define CEPHFS_EDEADLOCK CEPHFS_EDEADLK -#define CEPHFS_EDOM 33 -#define CEPHFS_EMLINK 31 -#define CEPHFS_ETIME 62 -#define CEPHFS_EOLDSNAPC 85 -#define CEPHFS_EFAULT 14 -#define CEPHFS_EISCONN 106 -#define CEPHFS_EMULTIHOP 72 -#define CEPHFS_EINPROGRESS 115 - // taken from linux kernel: include/uapi/linux/fcntl.h #define CEPHFS_AT_FDCWD -100 /* Special value used to indicate openat should use the current diff --git a/src/include/types.h b/src/include/types.h index 2d032d7dbc7..25ce11190cc 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -561,30 +561,40 @@ __s32 hostos_to_ceph_errno(__s32 e); #endif struct errorcode32_t { - int32_t code; + using code_t = __s32; + code_t code; errorcode32_t() : code(0) {} // cppcheck-suppress noExplicitConstructor - explicit errorcode32_t(int32_t i) : code(i) {} + explicit errorcode32_t(code_t i) : code(i) {} - operator int() const { return code; } - int* operator&() { return &code; } - errorcode32_t& operator=(int32_t i) { + operator code_t() const { return code; } + code_t* operator&() { return &code; } + errorcode32_t& operator=(code_t i) { code = i; return *this; } bool operator==(const errorcode32_t&) const = default; auto operator<=>(const errorcode32_t&) const = default; + inline code_t get_host_to_wire() const { + return hostos_to_ceph_errno(code); + } + + inline void set_wire_to_host(code_t host_code) { + code = ceph_to_hostos_errno(host_code); + } + void encode(ceph::buffer::list &bl) const { using ceph::encode; - __s32 newcode = hostos_to_ceph_errno(code); - encode(newcode, bl); + auto new_code = get_host_to_wire(); + encode(new_code, bl); } void decode(ceph::buffer::list::const_iterator &bl) { using ceph::decode; - decode(code, bl); - code = ceph_to_hostos_errno(code); + code_t newcode; + decode(newcode, bl); + set_wire_to_host(newcode); } void dump(ceph::Formatter *f) const { f->dump_int("code", code); diff --git a/src/include/win32/win32_errno.h b/src/include/win32/win32_errno.h index dd8ff8474fb..7877b95a78e 100644 --- a/src/include/win32/win32_errno.h +++ b/src/include/win32/win32_errno.h @@ -137,7 +137,6 @@ extern "C" { __s32 wsae_to_errno(__s32 r); __u32 errno_to_ntstatus(__s32 r); -__u32 cephfs_errno_to_ntstatus_map(int cephfs_errno); #ifdef __cplusplus }