Discard is a very big hammer. If it succeeds, there's no undo or going back; on the other hand, on some devices the giant discard issued at mkfs time makes them go offline. Although I'm reluctant to waffle back and forth on default behavior, I think this disabling it by default the prudent thing to do. This patch also adds the discard option into the default mke2fs.conf file; although it could be set, it was not in the template. Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx> --- V2: handle discard disable via "-K" since it's parsed *before* we get the default. The extended options are parsed later, and will override the mke2fs.conf default without problems. diff --git a/misc/mke2fs.8.in b/misc/mke2fs.8.in index 023ba49..a005eca 100644 --- a/misc/mke2fs.8.in +++ b/misc/mke2fs.8.in @@ -277,11 +277,11 @@ Attempt to discard blocks at mkfs time (discarding blocks initially is useful on solid state devices and sparse / thin-provisioned storage). When the device advertises that discard also zeroes data (any subsequent read after the discard and before write returns zero), then mark all not-yet-zeroed inode tables as -zeroed. This significantly speeds up filesystem initialization. This is set -as default. +zeroed. This significantly speeds up filesystem initialization. This is disabled +by default. .TP .BI nodiscard -Do not attempt to discard blocks at mkfs time. +Do not attempt to discard blocks at mkfs time. This is the default. .TP .BI quotatype Specify which quota type ('usr' or 'grp') is to be initialized. This diff --git a/misc/mke2fs.c b/misc/mke2fs.c index bbf477a..fa11da6 100644 --- a/misc/mke2fs.c +++ b/misc/mke2fs.c @@ -84,7 +84,7 @@ int cflag; int verbose; int quiet; int super_only; -int discard = 1; /* attempt to discard device before fs creation */ +int discard; /* attempt to discard device before fs creation? */ int direct_io; int force; int noaction; @@ -1266,6 +1266,7 @@ static void PRS(int argc, char *argv[]) double reserved_ratio = -1.0; int lsector_size = 0, psector_size = 0; int show_version_only = 0; + int nodiscard = 0; unsigned long long num_inodes = 0; /* unsigned long long to catch too-large input */ errcode_t retval; char * oldpath = getenv("PATH"); @@ -1444,7 +1445,7 @@ profile_error: "should not be used anymore. Use " "\'-E nodiscard\' extended option " "instead!\n")); - discard = 0; + nodiscard = 1; break; case 'j': if (!journal_size) @@ -1985,7 +1986,8 @@ profile_error: lazy_itable_init = get_bool_from_profile(fs_types, "lazy_itable_init", lazy_itable_init); - discard = get_bool_from_profile(fs_types, "discard" , discard); + /* nodiscard is set if -K was used, extended discard opts parsed later */ + discard = nodiscard ? 0 : get_bool_from_profile(fs_types, "discard" , 0); journal_flags |= get_bool_from_profile(fs_types, "lazy_journal_init", 0) ? EXT2_MKJOURNAL_LAZYINIT : 0; diff --git a/misc/mke2fs.conf.in b/misc/mke2fs.conf.in index 178733f..db6decb 100644 --- a/misc/mke2fs.conf.in +++ b/misc/mke2fs.conf.in @@ -2,6 +2,7 @@ base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr default_mntopts = acl,user_xattr enable_periodic_fsck = 0 + discard = 0 blocksize = 4096 inode_size = 256 inode_ratio = 16384 -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html