[sheepdog] [PATCH] journal: drop O_DSYNC for epoch and config if journaling is enabled

Hitoshi Mitake mitake.hitoshi at lab.ntt.co.jp
Thu Apr 11 03:46:36 CEST 2013


Of course writing epoch log or config rarely happens than writing
objects, O_DSYNC for the write should be dropped when the journaling
is enabled.

Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
---
 sheep/config.c |    6 +++++-
 sheep/store.c  |    4 ++++
 2 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/sheep/config.c b/sheep/config.c
index 14da875..63c1e81 100644
--- a/sheep/config.c
+++ b/sheep/config.c
@@ -36,6 +36,7 @@ char *config_path;
 static int write_config(void)
 {
 	int fd, ret;
+	int flags = O_RDWR | O_CREAT | O_DSYNC;
 
 	if (uatomic_is_true(&sys->use_journal) &&
 	    journal_write_config((char *)&config, sizeof(config))
@@ -45,7 +46,10 @@ static int write_config(void)
 		sync();
 	}
 
-	fd = open(config_path, O_DSYNC | O_WRONLY | O_CREAT, def_fmode);
+	if (uatomic_is_true(&sys->use_journal))
+		flags &= ~O_DSYNC;
+
+	fd = open(config_path, flags, def_fmode);
 	if (fd < 0) {
 		sd_eprintf("failed to open config file, %m");
 		return SD_RES_EIO;
diff --git a/sheep/store.c b/sheep/store.c
index cd143f4..f8eee59 100644
--- a/sheep/store.c
+++ b/sheep/store.c
@@ -61,6 +61,10 @@ int update_epoch_log(uint32_t epoch, struct sd_node *nodes, size_t nr_nodes)
 	}
 
 	snprintf(path, sizeof(path), "%s%08u", epoch_path, epoch);
+
+	if (uatomic_is_true(&sys->use_journal))
+		flags &= ~O_DSYNC;
+
 	fd = open(path, flags, def_fmode);
 	if (fd < 0) {
 		free(buf);
-- 
1.7.2.5




More information about the sheepdog mailing list