[glib] g_file_set_contents(): don't fsync on ext3/4
- From: Ryan Lortie <ryanl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] g_file_set_contents(): don't fsync on ext3/4
- Date: Tue, 4 Jun 2013 13:52:19 +0000 (UTC)
commit 9d0c17b50102267a5029b58b1f44efbad82d8f03
Author: Ryan Lortie <desrt desrt ca>
Date: Tue Jun 4 09:48:12 2013 -0400
g_file_set_contents(): don't fsync on ext3/4
ext3 and ext4 (for quite some time) with default mount options don't
need fsync() to ensure safety of replace-by-rename. Stop doing that for
these filesystems.
Note: this patch also impacts ext2, which is probably not safe, but I
don't know of any way to check ext2. vs the others because they all have
the same magic numbers (short of opening /proc/mount).
This patch assumes that if BTRFS_SUPER_MAGIC is defined then so will be
EXT3_SUPER_MAGIC.
https://bugzilla.gnome.org/show_bug.cgi?id=701560
glib/gfileutils.c | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)
---
diff --git a/glib/gfileutils.c b/glib/gfileutils.c
index 7e5bedc..05a46ee 100644
--- a/glib/gfileutils.c
+++ b/glib/gfileutils.c
@@ -1088,9 +1088,16 @@ write_to_temp_file (const gchar *contents,
/* On Linux, on btrfs, skip the fsync since rename-over-existing is
* guaranteed to be atomic and this is the only case in which we
* would fsync() anyway.
+ *
+ * ext3 and ext4 are also safe in this respect under the default
+ * mount options (and if someone picks non-default options to
+ * improve their performance at the cost of reliability, who are we
+ * to argue?)
+ *
+ * Note: EXT[234]_SUPER_MAGIC are equal.
*/
- if (fstatfs (fd, &buf) == 0 && buf.f_type == BTRFS_SUPER_MAGIC)
+ if (fstatfs (fd, &buf) == 0 && (buf.f_type == BTRFS_SUPER_MAGIC || buf.f_type == EXT3_SUPER_MAGIC))
goto no_fsync;
}
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]