- Metadata fixes
- SMB: Fix free space calculation for older samba servers - fuse: Fix setting timestamps
This commit is contained in:
parent
2c6acfef62
commit
1ebebde639
42
gvfs-1.4.3-smb-queryfs-old-samba.patch
Normal file
42
gvfs-1.4.3-smb-queryfs-old-samba.patch
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
From dd3e17181854c91f7c9123360652ae2ec28ea03e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tomas Bzatek <tbzatek@redhat.com>
|
||||||
|
Date: Mon, 30 Nov 2009 15:24:10 +0100
|
||||||
|
Subject: [PATCH] [SMB] Fix free space calculation for older samba servers
|
||||||
|
|
||||||
|
Samba servers older than 3.0.28 report zero values.
|
||||||
|
---
|
||||||
|
daemon/gvfsbackendsmb.c | 18 +++++++++++-------
|
||||||
|
1 files changed, 11 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/daemon/gvfsbackendsmb.c b/daemon/gvfsbackendsmb.c
|
||||||
|
index f53b8cb..88dac26 100644
|
||||||
|
--- a/daemon/gvfsbackendsmb.c
|
||||||
|
+++ b/daemon/gvfsbackendsmb.c
|
||||||
|
@@ -1615,13 +1615,17 @@ do_query_fs_info (GVfsBackend *backend,
|
||||||
|
|
||||||
|
if (res == 0)
|
||||||
|
{
|
||||||
|
- /* FIXME: inconsistent return values (libsmbclient-3.4.2)
|
||||||
|
- * - for linux samba hosts, f_frsize is zero and f_bsize is a real block size
|
||||||
|
- * - for some Windows hosts (XP), f_frsize and f_bsize should be multiplied to get real block size
|
||||||
|
- */
|
||||||
|
- g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE, st.f_bsize * st.f_blocks * ((st.f_frsize == 0) ? 1 : st.f_frsize));
|
||||||
|
- g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE, st.f_bsize * st.f_bfree * ((st.f_frsize == 0) ? 1 : st.f_frsize));
|
||||||
|
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY, st.f_flag & SMBC_VFS_FEATURE_RDONLY);
|
||||||
|
+ /* older samba versions ( < 3.0.28) return zero values in struct statvfs */
|
||||||
|
+ if (st.f_blocks > 0)
|
||||||
|
+ {
|
||||||
|
+ /* FIXME: inconsistent return values (libsmbclient-3.4.2)
|
||||||
|
+ * - for linux samba hosts, f_frsize is zero and f_bsize is a real block size
|
||||||
|
+ * - for some Windows hosts (XP), f_frsize and f_bsize should be multiplied to get real block size
|
||||||
|
+ */
|
||||||
|
+ g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE, st.f_bsize * st.f_blocks * ((st.f_frsize == 0) ? 1 : st.f_frsize));
|
||||||
|
+ g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE, st.f_bsize * st.f_bfree * ((st.f_frsize == 0) ? 1 : st.f_frsize));
|
||||||
|
+ g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY, st.f_flag & SMBC_VFS_FEATURE_RDONLY);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
--
|
||||||
|
1.6.5.2
|
||||||
|
|
84
gvfs-1.5.2-fuse-timestamps.patch
Normal file
84
gvfs-1.5.2-fuse-timestamps.patch
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
From 59bea4126cf23c575323c59a4cb1123f7cb44e2b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tomas Bzatek <tbzatek@redhat.com>
|
||||||
|
Date: Thu, 19 Nov 2009 14:48:56 +0000
|
||||||
|
Subject: fuse: Fix setting timestamps
|
||||||
|
|
||||||
|
We need to set time in seconds and microseconds separately.
|
||||||
|
Moreover, backends may not fully support setting all attributes
|
||||||
|
so don't report failure when at least one succeeded.
|
||||||
|
|
||||||
|
At the moment, only SMB supports setting G_FILE_ATTRIBUTE_TIME_MODIFIED.
|
||||||
|
---
|
||||||
|
diff --git a/client/gvfsfusedaemon.c b/client/gvfsfusedaemon.c
|
||||||
|
index 6e82e15..3893937 100644
|
||||||
|
--- a/client/gvfsfusedaemon.c
|
||||||
|
+++ b/client/gvfsfusedaemon.c
|
||||||
|
@@ -2083,40 +2083,53 @@ vfs_utimens (const gchar *path, const struct timespec tv [2])
|
||||||
|
if (file)
|
||||||
|
{
|
||||||
|
guint64 atime;
|
||||||
|
+ guint32 atime_usec;
|
||||||
|
guint64 mtime;
|
||||||
|
+ guint32 mtime_usec;
|
||||||
|
+ GFileInfo *info;
|
||||||
|
|
||||||
|
if (tv)
|
||||||
|
{
|
||||||
|
- atime = (guint64) tv [0].tv_sec * 1000000 + (guint64) tv [0].tv_nsec / (guint64) 1000;
|
||||||
|
- mtime = (guint64) tv [1].tv_sec * 1000000 + (guint64) tv [1].tv_nsec / (guint64) 1000;
|
||||||
|
+ atime = (guint64) tv [0].tv_sec;
|
||||||
|
+ atime_usec = (guint32) tv [0].tv_nsec / (guint32) 1000;
|
||||||
|
+ mtime = (guint64) tv [1].tv_sec;
|
||||||
|
+ mtime_usec = (guint32) tv [1].tv_nsec / (guint32) 1000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
struct timeval tiv;
|
||||||
|
|
||||||
|
gettimeofday (&tiv, NULL);
|
||||||
|
- atime = (guint64) tiv.tv_sec * (guint64) 1000000 + (guint64) tiv.tv_usec;
|
||||||
|
+ atime = (guint64) tiv.tv_sec;
|
||||||
|
+ atime_usec = (guint32) tiv.tv_usec;
|
||||||
|
mtime = atime;
|
||||||
|
+ mtime_usec = atime_usec;
|
||||||
|
}
|
||||||
|
|
||||||
|
- g_file_set_attribute (file, G_FILE_ATTRIBUTE_TIME_ACCESS_USEC,
|
||||||
|
- G_FILE_ATTRIBUTE_TYPE_UINT64, &atime,
|
||||||
|
- 0, NULL, &error);
|
||||||
|
+ info = g_file_info_new ();
|
||||||
|
+ g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED, mtime);
|
||||||
|
+ g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC, mtime_usec);
|
||||||
|
+ g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_ACCESS, atime);
|
||||||
|
+ g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_TIME_ACCESS_USEC, atime_usec);
|
||||||
|
|
||||||
|
- if (!error)
|
||||||
|
- {
|
||||||
|
- g_file_set_attribute (file, G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC,
|
||||||
|
- G_FILE_ATTRIBUTE_TYPE_UINT64, &mtime,
|
||||||
|
- 0, NULL, &error);
|
||||||
|
- }
|
||||||
|
+ g_file_set_attributes_from_info (file, info, 0, NULL, &error);
|
||||||
|
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
- result = -errno_from_error (error);
|
||||||
|
+ /* As long as not all backends support all attributes we set,
|
||||||
|
+ report failure only if neither mtime and atime have been set. */
|
||||||
|
+ if (g_file_info_get_attribute_status (info, G_FILE_ATTRIBUTE_TIME_ACCESS) == G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING &&
|
||||||
|
+ g_file_info_get_attribute_status (info, G_FILE_ATTRIBUTE_TIME_MODIFIED) == G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING)
|
||||||
|
+ {
|
||||||
|
+ /* Note: we only get first error from the attributes we try to set, might not be accurate
|
||||||
|
+ (a limitation of g_file_set_attributes_from_info()). */
|
||||||
|
+ result = -errno_from_error (error);
|
||||||
|
+ }
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_unref (file);
|
||||||
|
+ g_object_unref (info);
|
||||||
|
}
|
||||||
|
else if (path_is_mount_list (path))
|
||||||
|
{
|
||||||
|
--
|
||||||
|
cgit v0.8.2
|
24
gvfs-1.5.2-metadata-gssize.patch
Normal file
24
gvfs-1.5.2-metadata-gssize.patch
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
From f45b677201abb6b8471fa5bc935afda420c28c39 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Larsson <alexl@redhat.com>
|
||||||
|
Date: Thu, 19 Nov 2009 10:53:10 +0000
|
||||||
|
Subject: Don't store write() return val in unsigned variable
|
||||||
|
|
||||||
|
The conversion to unsigned means we failed to recognize errors,
|
||||||
|
since if (ret < 0) was never hit. This is the suspected cause
|
||||||
|
for data loss in bug 598561.
|
||||||
|
---
|
||||||
|
diff --git a/metadata/metabuilder.c b/metadata/metabuilder.c
|
||||||
|
index bffdd16..cca2443 100644
|
||||||
|
--- a/metadata/metabuilder.c
|
||||||
|
+++ b/metadata/metabuilder.c
|
||||||
|
@@ -799,7 +799,7 @@ write_metadata (GString *out,
|
||||||
|
static gboolean
|
||||||
|
write_all_data_and_close (int fd, char *data, gsize len)
|
||||||
|
{
|
||||||
|
- gsize written;
|
||||||
|
+ gssize written;
|
||||||
|
gboolean res;
|
||||||
|
|
||||||
|
res = FALSE;
|
||||||
|
--
|
||||||
|
cgit v0.8.2
|
25
gvfs-1.5.2-metadata-mtime.patch
Normal file
25
gvfs-1.5.2-metadata-mtime.patch
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
From 32dc3707bbb93153f9bd3df32259b7bf0e9cd579 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Larsson <alexl@redhat.com>
|
||||||
|
Date: Thu, 19 Nov 2009 10:56:44 +0000
|
||||||
|
Subject: If there are no mtimes in the file, use 0 as mtime base
|
||||||
|
|
||||||
|
Before we used to store -1 (0xffffffff) as the mtime base in this case.
|
||||||
|
This value is not used if there are no mtimes though, so this is more
|
||||||
|
like a cosmetic change.
|
||||||
|
---
|
||||||
|
diff --git a/metadata/metabuilder.c b/metadata/metabuilder.c
|
||||||
|
index cca2443..e27d1d3 100644
|
||||||
|
--- a/metadata/metabuilder.c
|
||||||
|
+++ b/metadata/metabuilder.c
|
||||||
|
@@ -940,7 +940,8 @@ metadata_create_static (MetaBuilder *builder,
|
||||||
|
|
||||||
|
/* Store the base as the min value in use minus one so that
|
||||||
|
0 is free to mean "not defined" */
|
||||||
|
- time_t_min = time_t_min - 1;
|
||||||
|
+ if (time_t_min != 0)
|
||||||
|
+ time_t_min = time_t_min - 1;
|
||||||
|
|
||||||
|
/* Pick the base as the minimum, unless that leads to
|
||||||
|
a 32bit overflow */
|
||||||
|
--
|
||||||
|
cgit v0.8.2
|
15
gvfs.spec
15
gvfs.spec
@ -1,7 +1,7 @@
|
|||||||
Summary: Backends for the gio framework in GLib
|
Summary: Backends for the gio framework in GLib
|
||||||
Name: gvfs
|
Name: gvfs
|
||||||
Version: 1.5.1
|
Version: 1.5.1
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
Group: System Environment/Libraries
|
Group: System Environment/Libraries
|
||||||
URL: http://www.gtk.org
|
URL: http://www.gtk.org
|
||||||
@ -38,6 +38,10 @@ Patch1: gvfs-1.5.1-afc-remove-unreleased.patch
|
|||||||
# from upstream
|
# from upstream
|
||||||
Patch2: gvfs-1.5.2-metadata-fix-rotated.patch
|
Patch2: gvfs-1.5.2-metadata-fix-rotated.patch
|
||||||
Patch3: gvfs-1.5.2-metadata-fsync-directory.patch
|
Patch3: gvfs-1.5.2-metadata-fsync-directory.patch
|
||||||
|
Patch4: gvfs-1.4.3-smb-queryfs-old-samba.patch
|
||||||
|
Patch5: gvfs-1.5.2-metadata-gssize.patch
|
||||||
|
Patch6: gvfs-1.5.2-metadata-mtime.patch
|
||||||
|
Patch7: gvfs-1.5.2-fuse-timestamps.patch
|
||||||
|
|
||||||
|
|
||||||
Obsoletes: gnome-mount <= 0.8
|
Obsoletes: gnome-mount <= 0.8
|
||||||
@ -137,6 +141,10 @@ and iPod Touches to applications using gvfs.
|
|||||||
%patch1 -p1 -b .afc-unreleased
|
%patch1 -p1 -b .afc-unreleased
|
||||||
%patch2 -p1 -b .metadata-rotated
|
%patch2 -p1 -b .metadata-rotated
|
||||||
%patch3 -p1 -b .metadata-dir-fsync
|
%patch3 -p1 -b .metadata-dir-fsync
|
||||||
|
%patch4 -p1 -b .smb-queryfs-older
|
||||||
|
%patch5 -p1 -b .metadata-gssize
|
||||||
|
%patch6 -p1 -b .metadata-mtime
|
||||||
|
%patch7 -p1 -b .fuse-timestamps
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
|
||||||
@ -302,6 +310,11 @@ killall -USR1 gvfsd >&/dev/null || :
|
|||||||
%{_datadir}/gvfs/remote-volume-monitors/afc.monitor
|
%{_datadir}/gvfs/remote-volume-monitors/afc.monitor
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Nov 30 2009 Tomas Bzatek <tbzatek@redhat.com> - 1.5.1-2
|
||||||
|
- Metadata fixes
|
||||||
|
- SMB: Fix free space calculation for older samba servers
|
||||||
|
- fuse: Fix setting timestamps
|
||||||
|
|
||||||
* Wed Nov 18 2009 Tomas Bzatek <tbzatek@redhat.com> - 1.5.1-1
|
* Wed Nov 18 2009 Tomas Bzatek <tbzatek@redhat.com> - 1.5.1-1
|
||||||
- Update to 1.5.1
|
- Update to 1.5.1
|
||||||
- AFC: temporarily disable setting file modification times
|
- AFC: temporarily disable setting file modification times
|
||||||
|
Loading…
Reference in New Issue
Block a user