78 lines
2.4 KiB
Plaintext
78 lines
2.4 KiB
Plaintext
From: Chris Mason <mason@suse.com>
|
|
Subject: make ext3 mount default to barrier=1
|
|
Patch-mainline: probably never
|
|
|
|
Hello everyone,
|
|
|
|
This patch turns on barriers by default for ext3. mount -o barrier=0
|
|
will turn them off. It also changes the ext3 fsync call to trigger a
|
|
barrier when a commit isn't done.
|
|
|
|
It should be safe, but some extra review would be appreciated.
|
|
|
|
Updated Apr 13 2009 jeffm:
|
|
- Added Kconfig option
|
|
|
|
Acked-by: Jeff Mahoney <jeffm@suse.com>
|
|
|
|
---
|
|
fs/ext3/Kconfig | 22 ++++++++++++++++++++++
|
|
fs/ext3/fsync.c | 1 +
|
|
fs/ext3/super.c | 4 ++++
|
|
3 files changed, 27 insertions(+)
|
|
|
|
--- a/fs/ext3/Kconfig
|
|
+++ b/fs/ext3/Kconfig
|
|
@@ -50,6 +50,28 @@ config EXT3_DEFAULTS_TO_ORDERED
|
|
privacy issues of data=writeback and are willing to make
|
|
that trade off, answer 'n'.
|
|
|
|
+config EXT3_DEFAULTS_TO_BARRIERS_ENABLED
|
|
+ bool "Default to 'barrier=1' in ext3"
|
|
+ depends on EXT3_FS
|
|
+ help
|
|
+ Modern disk drives support write caches that can speed up writeback.
|
|
+ Some devices, in order to improve their performance statistics,
|
|
+ report that the write has been completed even when it has only
|
|
+ been committed to volatile cache memory. This can result in
|
|
+ severe corruption in the event of power loss.
|
|
+
|
|
+ The -o barrier option enables the file system to direct the block
|
|
+ layer to issue a barrier, which ensures that the cache has been
|
|
+ flushed before proceeding. This can produce some slowdown in
|
|
+ certain environments, but allows higher end storage arrays with
|
|
+ battery-backed caches to report completes writes sooner than
|
|
+ would be otherwise possible.
|
|
+
|
|
+ Without this option, disk write caches should be disabled if
|
|
+ you value data integrity over writeback performance.
|
|
+
|
|
+ If unsure, say N.
|
|
+
|
|
config EXT3_FS_XATTR
|
|
bool "Ext3 extended attributes"
|
|
depends on EXT3_FS
|
|
--- a/fs/ext3/fsync.c
|
|
+++ b/fs/ext3/fsync.c
|
|
@@ -28,6 +28,7 @@
|
|
#include <linux/sched.h>
|
|
#include <linux/writeback.h>
|
|
#include <linux/jbd.h>
|
|
+#include <linux/blkdev.h>
|
|
#include <linux/ext3_fs.h>
|
|
#include <linux/ext3_jbd.h>
|
|
|
|
--- a/fs/ext3/super.c
|
|
+++ b/fs/ext3/super.c
|
|
@@ -1693,6 +1693,10 @@ static int ext3_fill_super (struct super
|
|
sbi->s_resuid = le16_to_cpu(es->s_def_resuid);
|
|
sbi->s_resgid = le16_to_cpu(es->s_def_resgid);
|
|
|
|
+ /* enable barriers by default */
|
|
+#ifdef CONFIG_EXT3_DEFAULTS_TO_BARRIERS_ENABLED
|
|
+ set_opt(sbi->s_mount_opt, BARRIER);
|
|
+#endif
|
|
set_opt(sbi->s_mount_opt, RESERVATION);
|
|
|
|
if (!parse_options ((char *) data, sb, &journal_inum, &journal_devnum,
|