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