From: Sage Weil Date: Fri, 7 May 2010 20:45:00 +0000 (-0700) Subject: endian: simplify __le* type hackery X-Git-Tag: v0.20.2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3bd995994ecc20fc384af6e41d9e4a659a1a33a3;p=ceph.git endian: simplify __le* type hackery Instead of preventing linux/types.h from being included, instead name our types ceph_le*, and remap using #define _only_ when including the shared kernel/userspace headers. Also redefine some templates for both __u64 and uint64_t, which are apparently not the same on x86_64. --- diff --git a/src/include/byteorder.h b/src/include/byteorder.h index 304ed5ee755..3907d890205 100644 --- a/src/include/byteorder.h +++ b/src/include/byteorder.h @@ -48,15 +48,15 @@ static __inline__ __u64 swab64(__u64 val) #define MAKE_LE_CLASS(bits) \ - struct __le##bits { \ + struct ceph_le##bits { \ __u##bits v; \ - __le##bits &operator=(__u##bits nv) { \ + ceph_le##bits &operator=(__u##bits nv) { \ v = mswab##bits(nv); \ return *this; \ } \ operator __u##bits() const { return mswab##bits(v); } \ } __attribute__ ((packed)); \ - static inline bool operator==(__le##bits a, __le##bits b) { \ + static inline bool operator==(ceph_le##bits a, ceph_le##bits b) { \ return a.v == b.v; \ } diff --git a/src/include/encoding.h b/src/include/encoding.h index 16d08799c88..af79670c2d4 100644 --- a/src/include/encoding.h +++ b/src/include/encoding.h @@ -42,9 +42,9 @@ inline void decode_raw(T& t, bufferlist::iterator &p) WRITE_RAW_ENCODER(__u8) WRITE_RAW_ENCODER(__s8) WRITE_RAW_ENCODER(char) -WRITE_RAW_ENCODER(__le64) -WRITE_RAW_ENCODER(__le32) -WRITE_RAW_ENCODER(__le16) +WRITE_RAW_ENCODER(ceph_le64) +WRITE_RAW_ENCODER(ceph_le32) +WRITE_RAW_ENCODER(ceph_le16) // FIXME: we need to choose some portable floating point encoding here WRITE_RAW_ENCODER(float) diff --git a/src/include/hash.h b/src/include/hash.h index bb1499cada4..7f95dd74f82 100644 --- a/src/include/hash.h +++ b/src/include/hash.h @@ -57,6 +57,12 @@ template<> struct rjhash { } }; +template<> struct rjhash<__u64> { + inline size_t operator()(const __u64 x) const { + return rjhash64(x); + } +}; + #if defined(__CYGWIN__) || defined(DARWIN) template<> struct rjhash { inline size_t operator()(const size_t x) const { diff --git a/src/include/inttypes.h b/src/include/inttypes.h index c9147102fc4..9862be963c4 100644 --- a/src/include/inttypes.h +++ b/src/include/inttypes.h @@ -2,14 +2,6 @@ #define _CEPH_INTTYPES_H #include - -typedef uint64_t __u64; -typedef int64_t __s64; -typedef uint32_t __u32; -typedef int32_t __s32; -typedef uint16_t __u16; -typedef int16_t __s16; -typedef uint8_t __u8; -typedef int8_t __s8; +#include #endif diff --git a/src/include/types.h b/src/include/types.h index 802cfca6cbc..395e6111470 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -16,15 +16,26 @@ #define __CEPH_TYPES_H // this is needed for ceph_fs to compile in userland -#include -#define _LINUX_TYPES_H /* we don't want linux/types.h's __u32, __le32, etc. */ #include "inttypes.h" #include "byteorder.h" + +#include #include #include +// +// temporarily remap __le* to ceph_le* for benefit of shared kernel/userland headers +#define __le16 ceph_le16 +#define __le32 ceph_le32 +#define __le64 ceph_le64 #include "ceph_fs.h" #include "ceph_frag.h" +#include "rbd_types.h" +#undef __le16 +#undef __le32 +#undef __le64 +// + #define _BACKWARD_BACKWARD_WARNING_H /* make gcc 4.3 shut up about hash_*. */ diff --git a/src/include/utime.h b/src/include/utime.h index 473d9821ea0..99b31f03f16 100644 --- a/src/include/utime.h +++ b/src/include/utime.h @@ -15,23 +15,10 @@ #ifndef __UTIME_H #define __UTIME_H -// this is needed for ceph_fs to compile in userland -#include -#define _LINUX_TYPES_H /* we don't want linux/types.h's __u32, __le32, etc. */ -#include "inttypes.h" -#include "byteorder.h" -#include -#include - -#include "ceph_fs.h" - #include #include #include -#include "buffer.h" -#include "encoding.h" - // -------- // utime_t diff --git a/src/mds/CDir.cc b/src/mds/CDir.cc index 99838e55b4e..924eb915ce6 100644 --- a/src/mds/CDir.cc +++ b/src/mds/CDir.cc @@ -1499,7 +1499,7 @@ void CDir::_encode_dentry(CDentry *dn, bufferlist& bl, dn->key().encode(bl); - __le32 plen = init_le32(0); + ceph_le32 plen = init_le32(0); unsigned plen_off = bl.length(); ::encode(plen, bl); @@ -1545,7 +1545,7 @@ void CDir::_encode_dentry(CDentry *dn, bufferlist& bl, plen = bl.length() - plen_off - sizeof(__u32); - __le32 eplen; + ceph_le32 eplen; eplen = plen; bl.copy_in(plen_off, sizeof(eplen), (char*)&eplen); } diff --git a/src/msg/SimpleMessenger.cc b/src/msg/SimpleMessenger.cc index c2c9521ffbb..5f72aca530e 100644 --- a/src/msg/SimpleMessenger.cc +++ b/src/msg/SimpleMessenger.cc @@ -1446,7 +1446,7 @@ void SimpleMessenger::Pipe::reader() // open ... if (tag == CEPH_MSGR_TAG_ACK) { dout(20) << "reader got ACK" << dendl; - __le64 seq; + ceph_le64 seq; int rc = tcp_read( sd, (char*)&seq, sizeof(seq)); pipe_lock.Lock(); if (rc < 0) { @@ -1884,7 +1884,7 @@ int SimpleMessenger::Pipe::write_ack(__u64 seq) dout(10) << "write_ack " << seq << dendl; char c = CEPH_MSGR_TAG_ACK; - __le64 s; + ceph_le64 s; s = seq; struct msghdr msg; diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index ee56b32e00b..36136fc7ae5 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -83,7 +83,7 @@ inline bool operator>=(const osd_reqid_t& l, const osd_reqid_t& r) { return !(l namespace __gnu_cxx { template<> struct hash { size_t operator()(const osd_reqid_t &r) const { - static hash<__u64> H; + static hash H; return H(r.name.num() ^ r.tid ^ r.inc); } };