Whamcloud - gitweb
LU-13799 llite: Adjust dio refcounting
[fs/lustre-release.git] / lustre / utils / lstddef.h
index c10ab0b..46e2901 100644 (file)
@@ -1,7 +1,11 @@
 #ifndef _LSTDDEF_H
 #define _LSTDDEF_H
 
-#include <stddef.h>
+#include <unistd.h>
+#include <linux/types.h>
+#include <sys/param.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
 
 #define __ALIGN_LSTDDEF_MASK(x, mask) (((x) + (mask)) & ~(mask))
 #define __ALIGN_LSTDDEF(x, a) __ALIGN_LSTDDEF_MASK(x, (typeof(x))(a) - 1)
@@ -29,7 +33,6 @@
 #define round_up(x, y) ((((x) - 1) | __round_mask(x, y)) + 1)
 #define round_down(x, y) ((x) & ~__round_mask(x, y))
 
-#define FIELD_SIZEOF(t, f) (sizeof(((t *)0)->f))
 #define DIV_ROUND_UP __USER_DIV_ROUND_UP
 
 #define DIV_ROUND_DOWN_ULL(ll, d) \
 # define DIV_ROUND_UP_SECTOR_T(ll, d) DIV_ROUND_UP(ll, d)
 #endif
 
-/* The `const' in roundup() prevents gcc-3.3 from calling __divdi3 */
-#define roundup(x, y) ({                               \
-       const typeof(y) __y = y;                        \
-       (((x) + (__y - 1)) / __y) * __y;                \
-})
-
 #define rounddown(x, y) ({                             \
        typeof(x) __x = (x);                            \
        __x - (__x % (y));                              \
@@ -292,4 +289,27 @@ static inline __u32 reciprocal_scale(__u32 val, __u32 ep_ro)
        (type *)((char *)__mptr - offsetof(type, member));      \
 })
 
+#ifndef HAVE_COPY_FILE_RANGE
+
+#ifndef __NR_copy_file_range
+
+#if defined(_ASM_X86_UNISTD_64_H)
+#define __NR_copy_file_range 326
+#elif defined(_ASM_X86_UNISTD_32_H)
+#define __NR_copy_file_range 285
+#else
+#define __NR_copy_file_range 285
+#endif
+
+#endif
+
+static inline loff_t copy_file_range(int fd_in, loff_t *off_in, int fd_out,
+                                    loff_t *off_out, size_t len,
+                                    unsigned int flags)
+{
+       return syscall(__NR_copy_file_range, fd_in, off_in, fd_out,
+                      off_out, len, flags);
+}
+#endif /* !HAVE_COPY_FILE_RANGE */
+
 #endif /* !_LSTDDEF_H */