]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - include/linux/ceph/decode.h
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph...
[karo-tx-linux.git] / include / linux / ceph / decode.h
index 360d9d08ca9e2a12a56e85b5625a938d8a2f6b3a..379f71508995f1bd65a740c2c558792ca9061ff0 100644 (file)
@@ -8,6 +8,23 @@
 
 #include <linux/ceph/types.h>
 
+/* This seemed to be the easiest place to define these */
+
+#define        U8_MAX  ((u8)(~0U))
+#define        U16_MAX ((u16)(~0U))
+#define        U32_MAX ((u32)(~0U))
+#define        U64_MAX ((u64)(~0ULL))
+
+#define        S8_MAX  ((s8)(U8_MAX >> 1))
+#define        S16_MAX ((s16)(U16_MAX >> 1))
+#define        S32_MAX ((s32)(U32_MAX >> 1))
+#define        S64_MAX ((s64)(U64_MAX >> 1LL))
+
+#define        S8_MIN  ((s8)(-S8_MAX - 1))
+#define        S16_MIN ((s16)(-S16_MAX - 1))
+#define        S32_MIN ((s32)(-S32_MAX - 1))
+#define        S64_MIN ((s64)(-S64_MAX - 1LL))
+
 /*
  * in all cases,
  *   void **p     pointer to position pointer
@@ -137,14 +154,19 @@ bad:
 static inline void ceph_decode_timespec(struct timespec *ts,
                                        const struct ceph_timespec *tv)
 {
-       ts->tv_sec = le32_to_cpu(tv->tv_sec);
-       ts->tv_nsec = le32_to_cpu(tv->tv_nsec);
+       ts->tv_sec = (__kernel_time_t)le32_to_cpu(tv->tv_sec);
+       ts->tv_nsec = (long)le32_to_cpu(tv->tv_nsec);
 }
 static inline void ceph_encode_timespec(struct ceph_timespec *tv,
                                        const struct timespec *ts)
 {
-       tv->tv_sec = cpu_to_le32(ts->tv_sec);
-       tv->tv_nsec = cpu_to_le32(ts->tv_nsec);
+       BUG_ON(ts->tv_sec < 0);
+       BUG_ON(ts->tv_sec > (__kernel_time_t)U32_MAX);
+       BUG_ON(ts->tv_nsec < 0);
+       BUG_ON(ts->tv_nsec > (long)U32_MAX);
+
+       tv->tv_sec = cpu_to_le32((u32)ts->tv_sec);
+       tv->tv_nsec = cpu_to_le32((u32)ts->tv_nsec);
 }
 
 /*