|
David Zeuthen |
d9fb374 |
From 7fd9061afbd0ec4664adb17aed706e12fd5f3eee Mon Sep 17 00:00:00 2001
|
|
David Zeuthen |
d9fb374 |
From: David Zeuthen <davidz@redhat.com>
|
|
David Zeuthen |
d9fb374 |
Date: Wed, 15 Apr 2009 14:41:27 -0400
|
|
David Zeuthen |
d9fb374 |
Subject: [PATCH 13/13] pass the 'flush' mount option for vfat
|
|
David Zeuthen |
d9fb374 |
|
|
David Zeuthen |
d9fb374 |
This mount option makes the vfat filesystem driver flush data more
|
|
David Zeuthen |
d9fb374 |
often. As a consequence
|
|
David Zeuthen |
d9fb374 |
|
|
David Zeuthen |
d9fb374 |
1. users never get to see the gnome-disk-utility notification daemon
|
|
David Zeuthen |
d9fb374 |
dialog just added
|
|
David Zeuthen |
d9fb374 |
|
|
David Zeuthen |
d9fb374 |
http://people.freedesktop.org/~david/gdu-unmount-busy-1.png
|
|
David Zeuthen |
d9fb374 |
|
|
David Zeuthen |
d9fb374 |
but that's useful for other filesystems as well.
|
|
David Zeuthen |
d9fb374 |
|
|
David Zeuthen |
d9fb374 |
2. The Nautilus copy dialog stays up until things are on the disk
|
|
David Zeuthen |
d9fb374 |
|
|
David Zeuthen |
d9fb374 |
We do this in gvfs rather than DeviceKit-disks because in some
|
|
David Zeuthen |
d9fb374 |
scenarios 'flush' may be unwanted and there is currently no way to
|
|
David Zeuthen |
d9fb374 |
turn it off (e.g. no 'noflush' or 'flush=0' option).
|
|
David Zeuthen |
d9fb374 |
|
|
David Zeuthen |
d9fb374 |
Ideally the kernel would get this kind of thing right by itself.
|
|
David Zeuthen |
d9fb374 |
---
|
|
David Zeuthen |
d9fb374 |
monitor/gdu/ggduvolume.c | 36 +++++++++++++++++++++++++++++++++---
|
|
David Zeuthen |
d9fb374 |
1 files changed, 33 insertions(+), 3 deletions(-)
|
|
David Zeuthen |
d9fb374 |
|
|
David Zeuthen |
d9fb374 |
diff --git a/monitor/gdu/ggduvolume.c b/monitor/gdu/ggduvolume.c
|
|
David Zeuthen |
d9fb374 |
index 49494a1..871a1c5 100644
|
|
David Zeuthen |
d9fb374 |
--- a/monitor/gdu/ggduvolume.c
|
|
David Zeuthen |
d9fb374 |
+++ b/monitor/gdu/ggduvolume.c
|
|
David Zeuthen |
d9fb374 |
@@ -648,6 +648,27 @@ g_gdu_volume_get_mount (GVolume *volume)
|
|
David Zeuthen |
d9fb374 |
|
|
David Zeuthen |
d9fb374 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
David Zeuthen |
d9fb374 |
|
|
David Zeuthen |
d9fb374 |
+static gchar **
|
|
David Zeuthen |
d9fb374 |
+get_mount_options (GduDevice *device)
|
|
David Zeuthen |
d9fb374 |
+{
|
|
David Zeuthen |
d9fb374 |
+ gchar **ret;
|
|
David Zeuthen |
d9fb374 |
+
|
|
David Zeuthen |
d9fb374 |
+ /* one day we might read this from user settings */
|
|
David Zeuthen |
d9fb374 |
+ if (g_strcmp0 (gdu_device_id_get_usage (device), "filesystem") == 0 &&
|
|
David Zeuthen |
d9fb374 |
+ g_strcmp0 (gdu_device_id_get_type (device), "vfat") == 0)
|
|
David Zeuthen |
d9fb374 |
+ {
|
|
David Zeuthen |
d9fb374 |
+ ret = g_new0 (gchar *, 2);
|
|
David Zeuthen |
d9fb374 |
+ ret[0] = g_strdup ("flush");
|
|
David Zeuthen |
d9fb374 |
+ ret[1] = NULL;
|
|
David Zeuthen |
d9fb374 |
+ }
|
|
David Zeuthen |
d9fb374 |
+ else
|
|
David Zeuthen |
d9fb374 |
+ ret = NULL;
|
|
David Zeuthen |
d9fb374 |
+
|
|
David Zeuthen |
d9fb374 |
+ return ret;
|
|
David Zeuthen |
d9fb374 |
+}
|
|
David Zeuthen |
d9fb374 |
+
|
|
David Zeuthen |
d9fb374 |
+/* ---------------------------------------------------------------------------------------------------- */
|
|
David Zeuthen |
d9fb374 |
+
|
|
David Zeuthen |
d9fb374 |
struct MountOpData
|
|
David Zeuthen |
d9fb374 |
{
|
|
David Zeuthen |
d9fb374 |
GGduVolume *volume;
|
|
David Zeuthen |
d9fb374 |
@@ -735,8 +756,11 @@ mount_obtain_authz_cb (GObject *source_object,
|
|
David Zeuthen |
d9fb374 |
}
|
|
David Zeuthen |
d9fb374 |
else
|
|
David Zeuthen |
d9fb374 |
{
|
|
David Zeuthen |
d9fb374 |
+ gchar **mount_options;
|
|
David Zeuthen |
d9fb374 |
/* got the authz, now try again */
|
|
David Zeuthen |
d9fb374 |
- gdu_device_op_filesystem_mount (data->device_to_mount, mount_cb, data);
|
|
David Zeuthen |
d9fb374 |
+ mount_options = get_mount_options (data->device_to_mount);
|
|
David Zeuthen |
d9fb374 |
+ gdu_device_op_filesystem_mount (data->device_to_mount, mount_options, mount_cb, data);
|
|
David Zeuthen |
d9fb374 |
+ g_strfreev (mount_options);
|
|
David Zeuthen |
d9fb374 |
goto out;
|
|
David Zeuthen |
d9fb374 |
}
|
|
David Zeuthen |
d9fb374 |
|
|
David Zeuthen |
d9fb374 |
@@ -842,7 +866,10 @@ mount_cleartext_device (MountOpData *data,
|
|
David Zeuthen |
d9fb374 |
}
|
|
David Zeuthen |
d9fb374 |
else
|
|
David Zeuthen |
d9fb374 |
{
|
|
David Zeuthen |
d9fb374 |
- gdu_device_op_filesystem_mount (data->device_to_mount, mount_cb, data);
|
|
David Zeuthen |
d9fb374 |
+ gchar **mount_options;
|
|
David Zeuthen |
d9fb374 |
+ mount_options = get_mount_options (data->device_to_mount);
|
|
David Zeuthen |
d9fb374 |
+ gdu_device_op_filesystem_mount (data->device_to_mount, mount_options, mount_cb, data);
|
|
David Zeuthen |
d9fb374 |
+ g_strfreev (mount_options);
|
|
David Zeuthen |
d9fb374 |
}
|
|
David Zeuthen |
d9fb374 |
|
|
David Zeuthen |
d9fb374 |
g_object_unref (pool);
|
|
David Zeuthen |
d9fb374 |
@@ -1260,8 +1287,11 @@ g_gdu_volume_mount (GVolume *_volume,
|
|
David Zeuthen |
d9fb374 |
}
|
|
David Zeuthen |
d9fb374 |
else
|
|
David Zeuthen |
d9fb374 |
{
|
|
David Zeuthen |
d9fb374 |
+ gchar **mount_options;
|
|
David Zeuthen |
d9fb374 |
data->device_to_mount = g_object_ref (device);
|
|
David Zeuthen |
d9fb374 |
- gdu_device_op_filesystem_mount (data->device_to_mount, mount_cb, data);
|
|
David Zeuthen |
d9fb374 |
+ mount_options = get_mount_options (data->device_to_mount);
|
|
David Zeuthen |
d9fb374 |
+ gdu_device_op_filesystem_mount (data->device_to_mount, mount_options, mount_cb, data);
|
|
David Zeuthen |
d9fb374 |
+ g_strfreev (mount_options);
|
|
David Zeuthen |
d9fb374 |
}
|
|
David Zeuthen |
d9fb374 |
|
|
David Zeuthen |
d9fb374 |
out:
|
|
David Zeuthen |
d9fb374 |
--
|
|
David Zeuthen |
d9fb374 |
1.6.2.2
|
|
David Zeuthen |
d9fb374 |
|