]> git.saurik.com Git - redis.git/commitdiff
Merge branch 'master' of github.com:antirez/redis
authorantirez <antirez@gmail.com>
Wed, 21 Apr 2010 08:30:36 +0000 (10:30 +0200)
committerantirez <antirez@gmail.com>
Wed, 21 Apr 2010 08:30:36 +0000 (10:30 +0200)
config.h
redis.c

index 754d3aa86f7341c7dad02664b8d10f47d270598e..d1da9887dfc64930a72886c1cc5a4f029635296e 100644 (file)
--- a/config.h
+++ b/config.h
@@ -35,4 +35,9 @@
 #define HAVE_KQUEUE 1
 #endif
 
+/* test for O_DIRECT */
+#ifdef __linux__
+#define HAVE_O_DIRECT 1
+#endif
+
 #endif
diff --git a/redis.c b/redis.c
index 53d5c215c7ba11488c1eeb110b357f7046f8485b..7907bb9f1bbfe35ae0cb019d5198cc12b7c5c9eb 100644 (file)
--- a/redis.c
+++ b/redis.c
@@ -54,6 +54,7 @@
 #include <inttypes.h>
 #include <arpa/inet.h>
 #include <sys/stat.h>
+#define __USE_GNU
 #include <fcntl.h>
 #include <sys/time.h>
 #include <sys/resource.h>
@@ -1673,7 +1674,16 @@ static void initServer() {
         acceptHandler, NULL) == AE_ERR) oom("creating file event");
 
     if (server.appendonly) {
-        server.appendfd = open(server.appendfilename,O_WRONLY|O_APPEND|O_CREAT,0644);
+        int flags = O_WRONLY|O_APPEND|O_CREAT;
+
+#ifdef HAVE_O_DIRECT
+        if (server.appendfsync == APPENDFSYNC_ALWAYS) {
+            flags |= O_DIRECT;
+            server.appendfsync = APPENDFSYNC_NO;
+        }
+#endif
+
+        server.appendfd = open(server.appendfilename,flags,0644);
         if (server.appendfd == -1) {
             redisLog(REDIS_WARNING, "Can't open the append-only file: %s",
                 strerror(errno));