mirror of
https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
synced 2024-11-24 02:25:03 +08:00
e2fsck: allow extent tree optimization to be disabled
Add an extended option, -E no_optimize_extents, as well as a e2fsck.conf profile option, to disable extent tree optimization. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
f91b451c26
commit
0b76d709f4
@ -226,6 +226,10 @@ option may prevent you from further manual data recovery.
|
||||
Do not attempt to discard free blocks and unused inode blocks. This option is
|
||||
exactly the opposite of discard option. This is set as default.
|
||||
.TP
|
||||
.BI no_optimize_extents
|
||||
Do not offer to optimize the extent tree by eliminating unnecessary
|
||||
width or depth.
|
||||
.TP
|
||||
.BI readahead_kb
|
||||
Use this many KiB of memory to pre-fetch metadata in the hopes of reducing
|
||||
e2fsck runtime. By default, this is set to the size of two block groups' inode
|
||||
|
@ -205,6 +205,10 @@ of that type are squelched. This can be useful if the console is slow
|
||||
(i.e., connected to a serial port) and so a large amount of output could
|
||||
end up delaying the boot process for a long time (potentially hours).
|
||||
.TP
|
||||
.I no_optimize_extents
|
||||
Do not offer to optimize the extent tree by eliminating unnecessary
|
||||
width or depth.
|
||||
.TP
|
||||
.I readahead_mem_pct
|
||||
Use this percentage of memory to try to read in metadata blocks ahead of the
|
||||
main e2fsck thread. This should reduce run times, depending on the speed of
|
||||
|
@ -169,6 +169,7 @@ struct resource_track {
|
||||
#define E2F_OPT_DISCARD 0x2000
|
||||
#define E2F_OPT_CONVERT_BMAP 0x4000 /* convert blockmap to extent */
|
||||
#define E2F_OPT_FIXES_ONLY 0x8000 /* skip all optimizations */
|
||||
#define E2F_OPT_NOOPT_EXTENTS 0x10000 /* don't optimize extents */
|
||||
|
||||
/*
|
||||
* E2fsck flags
|
||||
|
@ -521,6 +521,9 @@ errcode_t e2fsck_should_rebuild_extents(e2fsck_t ctx,
|
||||
if (eti->force_rebuild)
|
||||
goto rebuild;
|
||||
|
||||
if (ctx->options & E2F_OPT_NOOPT_EXTENTS)
|
||||
return 0;
|
||||
|
||||
extents_per_block = (ctx->fs->blocksize -
|
||||
sizeof(struct ext3_extent_header)) /
|
||||
sizeof(struct ext3_extent);
|
||||
|
@ -709,6 +709,9 @@ static void parse_extended_opts(e2fsck_t ctx, const char *opts)
|
||||
} else if (strcmp(token, "nodiscard") == 0) {
|
||||
ctx->options &= ~E2F_OPT_DISCARD;
|
||||
continue;
|
||||
} else if (strcmp(token, "no_optimize_extents") == 0) {
|
||||
ctx->options |= E2F_OPT_NOOPT_EXTENTS;
|
||||
continue;
|
||||
} else if (strcmp(token, "log_filename") == 0) {
|
||||
if (!arg)
|
||||
extended_usage++;
|
||||
@ -1007,6 +1010,11 @@ static errcode_t PRS(int argc, char *argv[], e2fsck_t *ret_ctx)
|
||||
if (c)
|
||||
verbose = 1;
|
||||
|
||||
profile_get_boolean(ctx->profile, "options", "no_optimize_extents",
|
||||
0, 0, &c);
|
||||
if (c)
|
||||
ctx->options |= E2F_OPT_NOOPT_EXTENTS;
|
||||
|
||||
if (ctx->readahead_kb == ~0ULL) {
|
||||
profile_get_integer(ctx->profile, "options",
|
||||
"readahead_mem_pct", 0, -1, &c);
|
||||
|
Loading…
Reference in New Issue
Block a user