rpms/gvfs/devel gvfs-1.5.2-metadata-fix-rotated.patch, NONE, 1.1 gvfs-1.5.2-metadata-fsync-directory.patch, NONE, 1.1 gvfs.spec, 1.164, 1.165

Tomas Bzatek tbzatek at fedoraproject.org
Wed Nov 18 15:24:37 UTC 2009


Author: tbzatek

Update of /cvs/extras/rpms/gvfs/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv26477

Modified Files:
	gvfs.spec 
Added Files:
	gvfs-1.5.2-metadata-fix-rotated.patch 
	gvfs-1.5.2-metadata-fsync-directory.patch 
Log Message:
Add metadata patches


gvfs-1.5.2-metadata-fix-rotated.patch:
 metatree.c |   15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

--- NEW FILE gvfs-1.5.2-metadata-fix-rotated.patch ---
>From 5e0cd74ada6749ab7e489db2fa22bd8cb5d2881c Mon Sep 17 00:00:00 2001
From: Christian Kellner <gicmo at gnome.org>
Date: Wed, 18 Nov 2009 13:40:38 +0000
Subject: Reread metadata only when the inodes are different

This will protect against bugs where the stable file has the rotated bug set (which should never happen but see bug #600057)
---
diff --git a/metadata/metatree.c b/metadata/metatree.c
index 36abb9b..4a0e5f5 100644
--- a/metadata/metatree.c
+++ b/metadata/metatree.c
@@ -158,6 +158,7 @@ struct _MetaTree {
   int fd;
   char *data;
   gsize len;
+  ino_t inode;
 
   guint32 tag;
   gint64 time_t_base;
@@ -469,6 +470,7 @@ meta_tree_init (MetaTree *tree)
 
   tree->fd = fd;
   tree->len = statbuf.st_size;
+  tree->inode = statbuf.st_ino;
   tree->data = data;
   tree->header = (MetaFileHeader *)data;
 
@@ -614,12 +616,24 @@ meta_tree_unref (MetaTree *tree)
 static gboolean
 meta_tree_needs_rereading (MetaTree *tree)
 {
+  struct stat statbuf;
+
   if (tree->fd == -1)
     return TRUE;
 
   if (tree->header != NULL &&
       GUINT32_FROM_BE (tree->header->rotated) == 0)
     return FALSE; /* Got a valid tree and its not rotated */
+
+  /* Sanity check to avoid infinite loops when a stable file
+     has the rotated bit set to 1 (see gnome bugzilla bug #600057) */
+
+  if (lstat (tree->filename, &statbuf) != 0)
+    return FALSE;
+
+  if (tree->inode == statbuf.st_ino)
+    return FALSE;
+
   return TRUE;
 }
 
--
cgit v0.8.2

gvfs-1.5.2-metadata-fsync-directory.patch:
 metabuilder.c |   16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

--- NEW FILE gvfs-1.5.2-metadata-fsync-directory.patch ---
>From 6592ecb3b95146b84072cf276eb98fba324b11ad Mon Sep 17 00:00:00 2001
From: Christian Kellner <gicmo at gnome.org>
Date: Wed, 18 Nov 2009 14:33:36 +0000
Subject: Fsync the directory when rotating the metadata

This is needed so we never end up having a stable file with the
rotated bit set. Should fix bug #600057.
---
diff --git a/metadata/metabuilder.c b/metadata/metabuilder.c
index a4a2043..bffdd16 100644
--- a/metadata/metabuilder.c
+++ b/metadata/metabuilder.c
@@ -1010,8 +1010,8 @@ meta_builder_write (MetaBuilder *builder,
 {
   GString *out;
   guint32 random_tag;
-  int fd, fd2;
-  char *tmp_name;
+  int fd, fd2, fd_dir;
+  char *tmp_name, *dirname;
 
   out = metadata_create_static (builder, &random_tag);
 
@@ -1035,6 +1035,17 @@ meta_builder_write (MetaBuilder *builder,
       goto out;
     }
 
+  /* Sync the directory to make sure that the entry in the directory containing
+     the new medata file has also reached disk. */
+  dirname = g_path_get_dirname (filename);
+  fd_dir = open (dirname, O_RDONLY);
+  if (fd_dir > -1)
+    {
+      fsync (fd_dir);
+      close (fd_dir);
+    }
+  g_free (dirname);
+
   /* Mark old file (if any) as rotated) */
   if (fd2 != -1)
     {
--
cgit v0.8.2


Index: gvfs.spec
===================================================================
RCS file: /cvs/extras/rpms/gvfs/devel/gvfs.spec,v
retrieving revision 1.164
retrieving revision 1.165
diff -u -p -r1.164 -r1.165
--- gvfs.spec	18 Nov 2009 14:05:08 -0000	1.164
+++ gvfs.spec	18 Nov 2009 15:24:36 -0000	1.165
@@ -35,6 +35,9 @@ BuildRequires: libtool
 Patch0: gvfs-archive-integration.patch
 # some AFC code depends on unreleased libiphone additions
 Patch1: gvfs-1.5.1-afc-remove-unreleased.patch
+# from upstream
+Patch2: gvfs-1.5.2-metadata-fix-rotated.patch
+Patch3: gvfs-1.5.2-metadata-fsync-directory.patch
 
 
 Obsoletes: gnome-mount <= 0.8
@@ -132,6 +135,8 @@ and iPod Touches to applications using g
 %setup -q
 %patch0 -p1 -b .archive-integration
 %patch1 -p1 -b .afc-unreleased
+%patch2 -p1 -b .metadata-rotated
+%patch3 -p1 -b .metadata-dir-fsync
 
 %build
 




More information about the fedora-extras-commits mailing list