Blame gvfs-1.5.2-metadata-fsync-directory.patch
|
Tomas Bzatek |
e9fb887 |
From 6592ecb3b95146b84072cf276eb98fba324b11ad Mon Sep 17 00:00:00 2001
|
|
Tomas Bzatek |
e9fb887 |
From: Christian Kellner <gicmo@gnome.org>
|
|
Tomas Bzatek |
e9fb887 |
Date: Wed, 18 Nov 2009 14:33:36 +0000
|
|
Tomas Bzatek |
e9fb887 |
Subject: Fsync the directory when rotating the metadata
|
|
Tomas Bzatek |
e9fb887 |
|
|
Tomas Bzatek |
e9fb887 |
This is needed so we never end up having a stable file with the
|
|
Tomas Bzatek |
e9fb887 |
rotated bit set. Should fix bug #600057.
|
|
Tomas Bzatek |
e9fb887 |
---
|
|
Tomas Bzatek |
e9fb887 |
diff --git a/metadata/metabuilder.c b/metadata/metabuilder.c
|
|
Tomas Bzatek |
e9fb887 |
index a4a2043..bffdd16 100644
|
|
Tomas Bzatek |
e9fb887 |
--- a/metadata/metabuilder.c
|
|
Tomas Bzatek |
e9fb887 |
+++ b/metadata/metabuilder.c
|
|
Tomas Bzatek |
e9fb887 |
@@ -1010,8 +1010,8 @@ meta_builder_write (MetaBuilder *builder,
|
|
Tomas Bzatek |
e9fb887 |
{
|
|
Tomas Bzatek |
e9fb887 |
GString *out;
|
|
Tomas Bzatek |
e9fb887 |
guint32 random_tag;
|
|
Tomas Bzatek |
e9fb887 |
- int fd, fd2;
|
|
Tomas Bzatek |
e9fb887 |
- char *tmp_name;
|
|
Tomas Bzatek |
e9fb887 |
+ int fd, fd2, fd_dir;
|
|
Tomas Bzatek |
e9fb887 |
+ char *tmp_name, *dirname;
|
|
Tomas Bzatek |
e9fb887 |
|
|
Tomas Bzatek |
e9fb887 |
out = metadata_create_static (builder, &random_tag);
|
|
Tomas Bzatek |
e9fb887 |
|
|
Tomas Bzatek |
e9fb887 |
@@ -1035,6 +1035,17 @@ meta_builder_write (MetaBuilder *builder,
|
|
Tomas Bzatek |
e9fb887 |
goto out;
|
|
Tomas Bzatek |
e9fb887 |
}
|
|
Tomas Bzatek |
e9fb887 |
|
|
Tomas Bzatek |
e9fb887 |
+ /* Sync the directory to make sure that the entry in the directory containing
|
|
Tomas Bzatek |
e9fb887 |
+ the new medata file has also reached disk. */
|
|
Tomas Bzatek |
e9fb887 |
+ dirname = g_path_get_dirname (filename);
|
|
Tomas Bzatek |
e9fb887 |
+ fd_dir = open (dirname, O_RDONLY);
|
|
Tomas Bzatek |
e9fb887 |
+ if (fd_dir > -1)
|
|
Tomas Bzatek |
e9fb887 |
+ {
|
|
Tomas Bzatek |
e9fb887 |
+ fsync (fd_dir);
|
|
Tomas Bzatek |
e9fb887 |
+ close (fd_dir);
|
|
Tomas Bzatek |
e9fb887 |
+ }
|
|
Tomas Bzatek |
e9fb887 |
+ g_free (dirname);
|
|
Tomas Bzatek |
e9fb887 |
+
|
|
Tomas Bzatek |
e9fb887 |
/* Mark old file (if any) as rotated) */
|
|
Tomas Bzatek |
e9fb887 |
if (fd2 != -1)
|
|
Tomas Bzatek |
e9fb887 |
{
|
|
Tomas Bzatek |
e9fb887 |
--
|
|
Tomas Bzatek |
e9fb887 |
cgit v0.8.2
|