]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
configure.ac: add pwritev check 7349/head
authorHaomai Wang <haomai@xsky.com>
Mon, 25 Jan 2016 15:18:58 +0000 (23:18 +0800)
committerHaomai Wang <haomai@xsky.com>
Sat, 30 Jan 2016 19:05:09 +0000 (03:05 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
configure.ac
src/common/buffer.cc

index 57d73e2360103ff54fe9ad35eb92938965faf003..908319b1a29c2a65d2f93bcc401e75f6825d7cdd 100644 (file)
@@ -1065,6 +1065,7 @@ AC_CHECK_HEADERS([sys/prctl.h])
 AC_CHECK_FUNCS([prctl])
 AC_CHECK_FUNCS([pipe2])
 AC_CHECK_FUNCS([posix_fadvise])
+AC_CHECK_FUNCS([pwritev], AC_DEFINE([HAVE_PWRITEV], [1], [we have pwritev]))
 
 AC_MSG_CHECKING([for fdatasync])
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
index 0cea23f9ba3ef9eb355d074c56c2ff8d9830f5ff..ee50c0efabfd943abdf3442791454ffb904013f6 100644 (file)
@@ -1954,8 +1954,18 @@ int buffer::list::write_file(const char *fn, int mode)
 
 static int do_writev(int fd, struct iovec *vec, uint64_t offset, unsigned veclen, unsigned bytes)
 {
+  ssize_t r = 0;
   while (bytes > 0) {
-    ssize_t r = ::pwritev(fd, vec, veclen, offset);
+#ifdef HAVE_PWRITEV
+    r = ::pwritev(fd, vec, veclen, offset);
+#else
+    r = ::lseek64(fd, offset, SEEK_SET);
+    if (r != offset) {
+      r = -errno;
+      return r;
+    }
+    r = ::writev(fd, vec, veclen);
+#endif
     if (r < 0) {
       if (errno == EINTR)
         continue;