[gvfs] metadata: Use shorter writeout timeout on NFS



commit c8e7d1375715545f28a0943ce7657330e3b70acd
Author: Tomas Bzatek <tbzatek redhat com>
Date:   Mon May 13 17:43:19 2013 +0200

    metadata: Use shorter writeout timeout on NFS
    
    Since we've moved journal to a non-volatile storage, let's flush
    more often to minimize a chance of data loss.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=637095

 metadata/meta-daemon.c |   12 +++++++++---
 metadata/metatree.c    |    6 ++++++
 metadata/metatree.h    |    1 +
 3 files changed, 16 insertions(+), 3 deletions(-)
---
diff --git a/metadata/meta-daemon.c b/metadata/meta-daemon.c
index ce34b73..f29e7f0 100644
--- a/metadata/meta-daemon.c
+++ b/metadata/meta-daemon.c
@@ -32,6 +32,7 @@
 #include "metadata-dbus.h"
 
 #define WRITEOUT_TIMEOUT_SECS 60
+#define WRITEOUT_TIMEOUT_SECS_NFS 15
 
 typedef struct {
   char *filename;
@@ -67,10 +68,15 @@ writeout_timeout (gpointer data)
 static void
 tree_info_schedule_writeout (TreeInfo *info)
 {
+  gboolean on_nfs;
+
   if (info->writeout_timeout == 0)
-    info->writeout_timeout =
-      g_timeout_add_seconds (WRITEOUT_TIMEOUT_SECS,
-                            writeout_timeout, info);
+    {
+      on_nfs = meta_tree_is_on_nfs (info->tree);
+      info->writeout_timeout =
+        g_timeout_add_seconds (on_nfs ? WRITEOUT_TIMEOUT_SECS_NFS : WRITEOUT_TIMEOUT_SECS,
+                              writeout_timeout, info);
+    }
 }
 
 static TreeInfo *
diff --git a/metadata/metatree.c b/metadata/metatree.c
index 31ef8a6..6aef33c 100644
--- a/metadata/metatree.c
+++ b/metadata/metatree.c
@@ -472,6 +472,12 @@ meta_tree_exists (MetaTree *tree)
   return tree->fd != -1;
 }
 
+gboolean
+meta_tree_is_on_nfs (MetaTree *tree)
+{
+  return tree->on_nfs;
+}
+
 static GHashTable *cached_trees = NULL;
 G_LOCK_DEFINE_STATIC (cached_trees);
 
diff --git a/metadata/metatree.h b/metadata/metatree.h
index 4bbb192..f24b4e9 100644
--- a/metadata/metatree.h
+++ b/metadata/metatree.h
@@ -66,6 +66,7 @@ void        meta_tree_unref          (MetaTree   *tree);
 void        meta_tree_refresh        (MetaTree   *tree);
 const char *meta_tree_get_filename   (MetaTree   *tree);
 gboolean    meta_tree_exists         (MetaTree   *tree);
+gboolean    meta_tree_is_on_nfs      (MetaTree   *tree);
 
 MetaKeyType meta_tree_lookup_key_type  (MetaTree                         *tree,
                                        const char                       *path,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]