Make sync_file_range() usage optional

Under uClibc, sync_file_range() is not available under all
architectures, so we fall back to fdatasync() in this case.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

Index: lttng-tools-2.0-pre15/configure.ac
===================================================================
--- lttng-tools-2.0-pre15.orig/configure.ac	2012-02-01 16:31:31.140978817 +0100
+++ lttng-tools-2.0-pre15/configure.ac	2012-02-01 16:31:42.110783708 +0100
@@ -96,7 +96,7 @@
 
 AM_CONDITIONAL([HAVE_LIBLTTNG_UST_CTL], [ test "x$ac_cv_lib_lttng_ust_ctl_ustctl_create_session" = "xyes" ])
 
-AC_CHECK_FUNCS([sched_getcpu sysconf])
+AC_CHECK_FUNCS([sched_getcpu sysconf sync_file_range])
 
 # Option to only build the consumer daemon and its libraries
 AC_ARG_WITH([consumerd-only],
Index: lttng-tools-2.0-pre15/liblttng-consumer/lttng-consumer.c
===================================================================
--- lttng-tools-2.0-pre15.orig/liblttng-consumer/lttng-consumer.c	2012-02-01 16:36:00.876292596 +0100
+++ lttng-tools-2.0-pre15/liblttng-consumer/lttng-consumer.c	2012-02-01 16:36:23.435901163 +0100
@@ -527,11 +527,15 @@
 	if (orig_offset < stream->chan->max_sb_size) {
 		return;
 	}
+#ifdef HAVE_SYNC_FILE_RANGE
 	sync_file_range(outfd, orig_offset - stream->chan->max_sb_size,
 			stream->chan->max_sb_size,
 			SYNC_FILE_RANGE_WAIT_BEFORE
 			| SYNC_FILE_RANGE_WRITE
 			| SYNC_FILE_RANGE_WAIT_AFTER);
+#else
+	fdatasync(outfd);
+#endif
 	/*
 	 * Give hints to the kernel about how we access the file:
 	 * POSIX_FADV_DONTNEED : we won't re-access data in a near future after
Index: lttng-tools-2.0-pre15/liblttng-kconsumer/lttng-kconsumer.c
===================================================================
--- lttng-tools-2.0-pre15.orig/liblttng-kconsumer/lttng-kconsumer.c	2012-02-01 16:36:36.215679416 +0100
+++ lttng-tools-2.0-pre15/liblttng-kconsumer/lttng-kconsumer.c	2012-02-01 16:59:08.622203348 +0100
@@ -71,8 +71,12 @@
 			goto end;
 		}
 		/* This won't block, but will start writeout asynchronously */
+#ifdef HAVE_SYNC_FILE_RANGE
 		sync_file_range(outfd, stream->out_fd_offset, ret,
 				SYNC_FILE_RANGE_WRITE);
+#else
+		fdatasync(outfd);
+#endif
 		stream->out_fd_offset += ret;
 	}
 
@@ -121,8 +125,12 @@
 		}
 		len -= ret;
 		/* This won't block, but will start writeout asynchronously */
+#ifdef HAVE_SYNC_FILE_RANGE
 		sync_file_range(outfd, stream->out_fd_offset, ret,
 				SYNC_FILE_RANGE_WRITE);
+#else
+		fdatasync(outfd);
+#endif
 		stream->out_fd_offset += ret;
 	}
 	lttng_consumer_sync_trace_file(stream, orig_offset);
Index: lttng-tools-2.0-pre15/liblttng-ustconsumer/lttng-ustconsumer.c
===================================================================
--- lttng-tools-2.0-pre15.orig/liblttng-ustconsumer/lttng-ustconsumer.c	2012-02-01 16:37:11.495067263 +0100
+++ lttng-tools-2.0-pre15/liblttng-ustconsumer/lttng-ustconsumer.c	2012-02-01 16:37:31.224724916 +0100
@@ -70,8 +70,12 @@
 			goto end;
 		}
 		/* This won't block, but will start writeout asynchronously */
+#ifdef HAVE_SYNC_FILE_RANGE
 		sync_file_range(outfd, stream->out_fd_offset, ret,
 				SYNC_FILE_RANGE_WRITE);
+#else
+		fdatasync(outfd);
+#endif
 		stream->out_fd_offset += ret;
 	}
 
