e2fsprogs package update
Signed-off-by: basebuilder_pel7x64builder0 <basebuilder@powerel.org>master
parent
f23596c05f
commit
1e124a466d
|
|
@ -0,0 +1,3 @@
|
|||
[options]
|
||||
# This will prevent e2fsck from stopping boot just because the clock is wrong
|
||||
broken_system_clock = 1
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
Index: e2fsprogs-1.41.5/e2fsck/super.c
|
||||
===================================================================
|
||||
--- e2fsprogs-1.41.5.orig/e2fsck/super.c
|
||||
+++ e2fsprogs-1.41.5/e2fsck/super.c
|
||||
@@ -869,7 +869,11 @@ void check_super_block(e2fsck_t ctx)
|
||||
* unfortunately, we shouldn't ignore it since if it's not set in the
|
||||
* backup, the extended attributes in the filesystem will be stripped
|
||||
* away.
|
||||
+ *
|
||||
+ * Well, I'm still going that route for now, 'til I do something
|
||||
+ * better. Full-fsck after a fresh install is just no good. -ERS
|
||||
*/
|
||||
+#define FEATURE_COMPAT_IGNORE (EXT2_FEATURE_COMPAT_EXT_ATTR)
|
||||
#define FEATURE_RO_COMPAT_IGNORE (EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
|
||||
EXT4_FEATURE_RO_COMPAT_DIR_NLINK)
|
||||
#define FEATURE_INCOMPAT_IGNORE (EXT3_FEATURE_INCOMPAT_EXTENTS| \
|
||||
@@ -921,6 +925,9 @@ int check_backup_super_block(e2fsck_t ct
|
||||
(EXT2_INODE_SIZE(backup_sb) < EXT2_GOOD_OLD_INODE_SIZE))
|
||||
continue;
|
||||
|
||||
+#define SUPER_COMPAT_DIFFERENT(x) \
|
||||
+ ((fs->super->x & ~FEATURE_COMPAT_IGNORE) != \
|
||||
+ (backup_sb->x & ~FEATURE_COMPAT_IGNORE))
|
||||
#define SUPER_INCOMPAT_DIFFERENT(x) \
|
||||
((fs->super->x & ~FEATURE_INCOMPAT_IGNORE) != \
|
||||
(backup_sb->x & ~FEATURE_INCOMPAT_IGNORE))
|
||||
@@ -930,7 +937,7 @@ int check_backup_super_block(e2fsck_t ct
|
||||
#define SUPER_DIFFERENT(x) \
|
||||
(fs->super->x != backup_sb->x)
|
||||
|
||||
- if (SUPER_DIFFERENT(s_feature_compat) ||
|
||||
+ if (SUPER_COMPAT_DIFFERENT(s_feature_compat) ||
|
||||
SUPER_INCOMPAT_DIFFERENT(s_feature_incompat) ||
|
||||
SUPER_RO_COMPAT_DIFFERENT(s_feature_ro_compat) ||
|
||||
SUPER_DIFFERENT(s_blocks_count) ||
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
From 6883c622c9971fb8f9fb6d5a8839fc2b0199d918 Mon Sep 17 00:00:00 2001
|
||||
From: Theodore Ts'o <tytso@mit.edu>
|
||||
Date: Thu, 10 Jul 2014 00:47:40 -0400
|
||||
Subject: [PATCH] Fix nroff macro issue in chattr man page
|
||||
|
||||
The single quote character must not be in the first character in a
|
||||
line, or else it can get mistaken as a macro call.
|
||||
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
misc/chattr.1.in | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/misc/chattr.1.in b/misc/chattr.1.in
|
||||
index 23b6938..75b3ed8 100644
|
||||
--- a/misc/chattr.1.in
|
||||
+++ b/misc/chattr.1.in
|
||||
@@ -22,8 +22,8 @@ changes the file attributes on a Linux file system.
|
||||
The format of a symbolic mode is +-=[aAcCdDeijsStTu].
|
||||
.PP
|
||||
The operator '+' causes the selected attributes to be added to the
|
||||
-existing attributes of the files; '-' causes them to be removed; and
|
||||
-'=' causes them to be the only attributes that the files have.
|
||||
+existing attributes of the files; '-' causes them to be removed; and '='
|
||||
+causes them to be the only attributes that the files have.
|
||||
.PP
|
||||
The letters 'aAcCdDeijsStTu' select the new attributes for the files:
|
||||
append only (a),
|
||||
--
|
||||
2.7.4
|
||||
|
|
@ -0,0 +1,220 @@
|
|||
From ce342417662c89d09b24a8fe47e9fe942d1a0c43 Mon Sep 17 00:00:00 2001
|
||||
From: Theodore Ts'o <tytso@mit.edu>
|
||||
Date: Sat, 26 Jul 2014 07:40:36 -0400
|
||||
Subject: [PATCH] Fix 32/64-bit overflow when multiplying by blocks/clusters
|
||||
per group
|
||||
|
||||
There are a number of places where we need convert groups to blocks or
|
||||
clusters by multiply the groups by blocks/clusters per group.
|
||||
Unfortunately, both quantities are 32-bit, but the result needs to be
|
||||
64-bit, and very often the cast to 64-bit gets lost.
|
||||
|
||||
Fix this by adding new macros, EXT2_GROUPS_TO_BLOCKS() and
|
||||
EXT2_GROUPS_TO_CLUSTERS().
|
||||
|
||||
This should fix a bug where resizing a 64bit file system can result in
|
||||
calculate_minimum_resize_size() looping forever.
|
||||
|
||||
Addresses-Launchpad-Bug: #1321958
|
||||
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
e2fsck/pass5.c | 2 +-
|
||||
e2fsck/super.c | 2 +-
|
||||
lib/ext2fs/blknum.c | 2 +-
|
||||
lib/ext2fs/ext2_fs.h | 5 +++++
|
||||
lib/ext2fs/imager.c | 14 +++++++-------
|
||||
lib/ext2fs/rw_bitmaps.c | 4 ++--
|
||||
misc/tune2fs.c | 2 +-
|
||||
resize/resize2fs.c | 11 +++++------
|
||||
8 files changed, 23 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/e2fsck/pass5.c b/e2fsck/pass5.c
|
||||
index 4409d7f..831232b 100644
|
||||
--- a/e2fsck/pass5.c
|
||||
+++ b/e2fsck/pass5.c
|
||||
@@ -858,7 +858,7 @@ static void check_block_end(e2fsck_t ctx)
|
||||
clear_problem_context(&pctx);
|
||||
|
||||
end = ext2fs_get_block_bitmap_start2(fs->block_map) +
|
||||
- ((blk64_t)EXT2_CLUSTERS_PER_GROUP(fs->super) * fs->group_desc_count) - 1;
|
||||
+ EXT2_GROUPS_TO_CLUSTERS(fs->super, fs->group_desc_count) - 1;
|
||||
pctx.errcode = ext2fs_fudge_block_bitmap_end2(fs->block_map, end,
|
||||
&save_blocks_count);
|
||||
if (pctx.errcode) {
|
||||
diff --git a/e2fsck/super.c b/e2fsck/super.c
|
||||
index 2fcb315..a6be3c6 100644
|
||||
--- a/e2fsck/super.c
|
||||
+++ b/e2fsck/super.c
|
||||
@@ -421,7 +421,7 @@ void check_resize_inode(e2fsck_t ctx)
|
||||
for (j = 1; j < fs->group_desc_count; j++) {
|
||||
if (!ext2fs_bg_has_super(fs, j))
|
||||
continue;
|
||||
- expect = pblk + (j * fs->super->s_blocks_per_group);
|
||||
+ expect = pblk + EXT2_GROUPS_TO_BLOCKS(fs->super, j);
|
||||
if (ind_buf[ind_off] != expect)
|
||||
goto resize_inode_invalid;
|
||||
ind_off++;
|
||||
diff --git a/lib/ext2fs/blknum.c b/lib/ext2fs/blknum.c
|
||||
index 7a2c588..88cc34e 100644
|
||||
--- a/lib/ext2fs/blknum.c
|
||||
+++ b/lib/ext2fs/blknum.c
|
||||
@@ -29,7 +29,7 @@ dgrp_t ext2fs_group_of_blk2(ext2_filsys fs, blk64_t blk)
|
||||
blk64_t ext2fs_group_first_block2(ext2_filsys fs, dgrp_t group)
|
||||
{
|
||||
return fs->super->s_first_data_block +
|
||||
- ((blk64_t)group * fs->super->s_blocks_per_group);
|
||||
+ EXT2_GROUPS_TO_BLOCKS(fs->super, group);
|
||||
}
|
||||
|
||||
/*
|
||||
diff --git a/lib/ext2fs/ext2_fs.h b/lib/ext2fs/ext2_fs.h
|
||||
index 930c2a3..d6adfd4 100644
|
||||
--- a/lib/ext2fs/ext2_fs.h
|
||||
+++ b/lib/ext2fs/ext2_fs.h
|
||||
@@ -264,6 +264,11 @@ struct ext2_dx_countlimit {
|
||||
#define EXT2_DESC_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / EXT2_DESC_SIZE(s))
|
||||
#endif
|
||||
|
||||
+#define EXT2_GROUPS_TO_BLOCKS(s, g) ((blk64_t) EXT2_BLOCKS_PER_GROUP(s) * \
|
||||
+ (g))
|
||||
+#define EXT2_GROUPS_TO_CLUSTERS(s, g) ((blk64_t) EXT2_CLUSTERS_PER_GROUP(s) * \
|
||||
+ (g))
|
||||
+
|
||||
/*
|
||||
* Constants relative to the data blocks
|
||||
*/
|
||||
diff --git a/lib/ext2fs/imager.c b/lib/ext2fs/imager.c
|
||||
index 378a3c8..b643cc6 100644
|
||||
--- a/lib/ext2fs/imager.c
|
||||
+++ b/lib/ext2fs/imager.c
|
||||
@@ -286,8 +286,8 @@ errcode_t ext2fs_image_bitmap_write(ext2_filsys fs, int fd, int flags)
|
||||
ext2fs_generic_bitmap bmap;
|
||||
errcode_t retval;
|
||||
ssize_t actual;
|
||||
- __u32 itr, cnt, size;
|
||||
- int c, total_size;
|
||||
+ size_t c;
|
||||
+ __u64 itr, cnt, size, total_size;
|
||||
char buf[1024];
|
||||
|
||||
if (flags & IMAGER_FLAG_INODEMAP) {
|
||||
@@ -308,7 +308,7 @@ errcode_t ext2fs_image_bitmap_write(ext2_filsys fs, int fd, int flags)
|
||||
}
|
||||
bmap = fs->block_map;
|
||||
itr = fs->super->s_first_data_block;
|
||||
- cnt = EXT2_BLOCKS_PER_GROUP(fs->super) * fs->group_desc_count;
|
||||
+ cnt = EXT2_GROUPS_TO_BLOCKS(fs->super, fs->group_desc_count);
|
||||
size = EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
|
||||
}
|
||||
total_size = size * fs->group_desc_count;
|
||||
@@ -342,9 +342,9 @@ errcode_t ext2fs_image_bitmap_write(ext2_filsys fs, int fd, int flags)
|
||||
if (c > (int) sizeof(buf))
|
||||
c = sizeof(buf);
|
||||
actual = write(fd, buf, c);
|
||||
- if (actual == -1)
|
||||
+ if (actual < 0)
|
||||
return errno;
|
||||
- if (actual != c)
|
||||
+ if ((size_t) actual != c)
|
||||
return EXT2_ET_SHORT_WRITE;
|
||||
size -= c;
|
||||
}
|
||||
@@ -360,7 +360,7 @@ errcode_t ext2fs_image_bitmap_read(ext2_filsys fs, int fd, int flags)
|
||||
{
|
||||
ext2fs_generic_bitmap bmap;
|
||||
errcode_t retval;
|
||||
- __u32 itr, cnt;
|
||||
+ __u64 itr, cnt;
|
||||
char buf[1024];
|
||||
unsigned int size;
|
||||
ssize_t actual;
|
||||
@@ -383,7 +383,7 @@ errcode_t ext2fs_image_bitmap_read(ext2_filsys fs, int fd, int flags)
|
||||
}
|
||||
bmap = fs->block_map;
|
||||
itr = fs->super->s_first_data_block;
|
||||
- cnt = EXT2_BLOCKS_PER_GROUP(fs->super) * fs->group_desc_count;
|
||||
+ cnt = EXT2_GROUPS_TO_BLOCKS(fs->super, fs->group_desc_count);
|
||||
size = EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
|
||||
}
|
||||
|
||||
diff --git a/lib/ext2fs/rw_bitmaps.c b/lib/ext2fs/rw_bitmaps.c
|
||||
index b7d65a9..ad1d8c8 100644
|
||||
--- a/lib/ext2fs/rw_bitmaps.c
|
||||
+++ b/lib/ext2fs/rw_bitmaps.c
|
||||
@@ -225,8 +225,8 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
|
||||
}
|
||||
blk = (fs->image_header->offset_blockmap /
|
||||
fs->blocksize);
|
||||
- blk_cnt = (blk64_t)EXT2_CLUSTERS_PER_GROUP(fs->super) *
|
||||
- fs->group_desc_count;
|
||||
+ blk_cnt = EXT2_GROUPS_TO_CLUSTERS(fs->super,
|
||||
+ fs->group_desc_count);
|
||||
while (block_nbytes > 0) {
|
||||
retval = io_channel_read_blk64(fs->image_io, blk++,
|
||||
1, block_bitmap);
|
||||
diff --git a/misc/tune2fs.c b/misc/tune2fs.c
|
||||
index ff72e09..d2aa125 100644
|
||||
--- a/misc/tune2fs.c
|
||||
+++ b/misc/tune2fs.c
|
||||
@@ -1366,7 +1366,7 @@ static int ext2fs_is_block_in_group(ext2_filsys fs, dgrp_t group, blk64_t blk)
|
||||
{
|
||||
blk64_t start_blk, end_blk;
|
||||
start_blk = fs->super->s_first_data_block +
|
||||
- EXT2_BLOCKS_PER_GROUP(fs->super) * group;
|
||||
+ EXT2_GROUPS_TO_BLOCKS(fs->super, group);
|
||||
/*
|
||||
* We cannot get new block beyond end_blk for for the last block group
|
||||
* so we can check with EXT2_BLOCKS_PER_GROUP even for last block group
|
||||
diff --git a/resize/resize2fs.c b/resize/resize2fs.c
|
||||
index 375639a..d6fc533 100644
|
||||
--- a/resize/resize2fs.c
|
||||
+++ b/resize/resize2fs.c
|
||||
@@ -408,8 +408,7 @@ retry:
|
||||
fs->inode_map);
|
||||
if (retval) goto errout;
|
||||
|
||||
- real_end = (((blk64_t) EXT2_BLOCKS_PER_GROUP(fs->super) *
|
||||
- fs->group_desc_count)) - 1 +
|
||||
+ real_end = EXT2_GROUPS_TO_BLOCKS(fs->super, fs->group_desc_count) - 1 +
|
||||
fs->super->s_first_data_block;
|
||||
retval = ext2fs_resize_block_bitmap2(new_size - 1,
|
||||
real_end, fs->block_map);
|
||||
@@ -2073,7 +2072,7 @@ blk64_t calculate_minimum_resize_size(ext2_filsys fs, int flags)
|
||||
fs->super->s_free_inodes_count;
|
||||
blks_needed = ext2fs_div_ceil(inode_count,
|
||||
fs->super->s_inodes_per_group) *
|
||||
- EXT2_BLOCKS_PER_GROUP(fs->super);
|
||||
+ (blk64_t) EXT2_BLOCKS_PER_GROUP(fs->super);
|
||||
groups = ext2fs_div64_ceil(blks_needed,
|
||||
EXT2_BLOCKS_PER_GROUP(fs->super));
|
||||
#ifdef RESIZE2FS_DEBUG
|
||||
@@ -2117,7 +2116,7 @@ blk64_t calculate_minimum_resize_size(ext2_filsys fs, int flags)
|
||||
* figure out how many data blocks we have given the number of groups
|
||||
* we need for our inodes
|
||||
*/
|
||||
- data_blocks = groups * EXT2_BLOCKS_PER_GROUP(fs->super);
|
||||
+ data_blocks = EXT2_GROUPS_TO_BLOCKS(fs->super, groups);
|
||||
last_start = 0;
|
||||
for (grp = 0; grp < groups; grp++) {
|
||||
overhead = calc_group_overhead(fs, grp, old_desc_blocks);
|
||||
@@ -2151,7 +2150,7 @@ blk64_t calculate_minimum_resize_size(ext2_filsys fs, int flags)
|
||||
extra_grps = ext2fs_div64_ceil(remainder,
|
||||
EXT2_BLOCKS_PER_GROUP(fs->super));
|
||||
|
||||
- data_blocks += extra_grps * EXT2_BLOCKS_PER_GROUP(fs->super);
|
||||
+ data_blocks += EXT2_GROUPS_TO_BLOCKS(fs->super, extra_grps);
|
||||
|
||||
/* ok we have to account for the last group */
|
||||
overhead = calc_group_overhead(fs, groups-1, old_desc_blocks);
|
||||
@@ -2241,7 +2240,7 @@ blk64_t calculate_minimum_resize_size(ext2_filsys fs, int flags)
|
||||
* only do groups-1, and then add the number of blocks needed to
|
||||
* handle the group descriptor metadata+data that we need
|
||||
*/
|
||||
- blks_needed = (groups-1) * EXT2_BLOCKS_PER_GROUP(fs->super);
|
||||
+ blks_needed = EXT2_GROUPS_TO_BLOCKS(fs->super, groups - 1);
|
||||
blks_needed += overhead;
|
||||
|
||||
/*
|
||||
--
|
||||
2.7.5
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
From b78d235914708decce36519e1a65705ba4f04cdb Mon Sep 17 00:00:00 2001
|
||||
From: Lukas Czerner <lczerner@redhat.com>
|
||||
Date: Mon, 24 Feb 2014 18:41:05 +0100
|
||||
Subject: [PATCH 2/8] mke2fs: Add revision to the is_before_linux_ver()
|
||||
|
||||
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
|
||||
---
|
||||
misc/mke2fs.c | 12 +++++++-----
|
||||
1 file changed, 7 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/misc/mke2fs.c b/misc/mke2fs.c
|
||||
index 2afcb05..e970bbe 100644
|
||||
--- a/misc/mke2fs.c
|
||||
+++ b/misc/mke2fs.c
|
||||
@@ -172,7 +172,8 @@ static int parse_version_number(const char *s)
|
||||
return KERNEL_VERSION(major, minor, rev);
|
||||
}
|
||||
|
||||
-static int is_before_linux_ver(unsigned int major, unsigned int minor)
|
||||
+static int is_before_linux_ver(unsigned int major, unsigned int minor,
|
||||
+ unsigned int rev)
|
||||
{
|
||||
struct utsname ut;
|
||||
static int linux_version_code = -1;
|
||||
@@ -186,10 +187,11 @@ static int is_before_linux_ver(unsigned int major, unsigned int minor)
|
||||
if (linux_version_code == 0)
|
||||
return 0;
|
||||
|
||||
- return linux_version_code < KERNEL_VERSION(major, minor, 0);
|
||||
+ return linux_version_code < KERNEL_VERSION(major, minor, rev);
|
||||
}
|
||||
#else
|
||||
-static int is_before_linux_ver(unsigned int major, unsigned int minor)
|
||||
+static int is_before_linux_ver(unsigned int major, unsigned int minor,
|
||||
+ unsigned int rev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -1394,7 +1396,7 @@ profile_error:
|
||||
memset(&fs_param, 0, sizeof(struct ext2_super_block));
|
||||
fs_param.s_rev_level = 1; /* Create revision 1 filesystems now */
|
||||
|
||||
- if (is_before_linux_ver(2, 2))
|
||||
+ if (is_before_linux_ver(2, 2, 0))
|
||||
fs_param.s_rev_level = 0;
|
||||
|
||||
if (argc && *argv) {
|
||||
@@ -1803,7 +1805,7 @@ profile_error:
|
||||
|
||||
if (use_bsize == -1) {
|
||||
use_bsize = sys_page_size;
|
||||
- if (is_before_linux_ver(2, 6) && use_bsize > 4096)
|
||||
+ if (is_before_linux_ver(2, 6, 0) && use_bsize > 4096)
|
||||
use_bsize = 4096;
|
||||
}
|
||||
if (lsector_size && use_bsize < lsector_size)
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
commit c7c3775443ecd01ade5500e09191c5c4e94c2b56
|
||||
Author: Zheng Liu <wenqing.lz@taobao.com>
|
||||
Date: Wed Feb 12 12:28:29 2014 -0500
|
||||
|
||||
chattr: improve the description for 'j' option in manpage
|
||||
|
||||
Ext4 file system also supports to set/clear 'j' attribute, but it just
|
||||
say that this option is only useful for ext3 in manpage. This commit
|
||||
fixes it.
|
||||
|
||||
Signed-off-by: Zheng Liu <wenqing.lz@taobao.com>
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
|
||||
|
||||
diff --git a/misc/chattr.1.in b/misc/chattr.1.in
|
||||
index 932ef4b..2a3640c 100644
|
||||
--- a/misc/chattr.1.in
|
||||
+++ b/misc/chattr.1.in
|
||||
@@ -112,8 +112,8 @@ to the file. Only the superuser or a process possessing the
|
||||
CAP_LINUX_IMMUTABLE capability can set or clear this attribute.
|
||||
.PP
|
||||
A file with the `j' attribute has all of its data written to the ext3
|
||||
-journal before being written to the file itself, if the filesystem is
|
||||
-mounted with the "data=ordered" or "data=writeback" options. When the
|
||||
+or ext4 journal before being written to the file itself, if the filesystem
|
||||
+is mounted with the "data=ordered" or "data=writeback" options. When the
|
||||
filesystem is mounted with the "data=journal" option all file data
|
||||
is already journalled and this attribute has no effect. Only
|
||||
the superuser or a process possessing the CAP_SYS_RESOURCE
|
||||
@@ -171,7 +171,7 @@ The `c', 's', and `u' attributes are not honored
|
||||
by the ext2, ext3, and ext4 filesystems as implemented in the current
|
||||
mainline Linux kernels.
|
||||
.PP
|
||||
-The `j' option is only useful if the filesystem is mounted as ext3.
|
||||
+The `j' option is only useful if the filesystem is mounted as ext3 or ext4.
|
||||
.PP
|
||||
The `D' option is only useful on Linux kernel 2.5.19 and later.
|
||||
.SH AVAILABILITY
|
||||
|
|
@ -0,0 +1,179 @@
|
|||
commit 5b9aaae742a79ef6001e58e5031b5f6ec03fe1ad
|
||||
Author: Eric Sandeen <sandeen@redhat.com>
|
||||
Date: Fri Jul 4 23:02:59 2014 -0400
|
||||
|
||||
e2fsprogs: reorder flags in chattr(1)
|
||||
|
||||
The flags described in chattr usage() and the chattr(1) manpage
|
||||
were in semi-random order, which makes it hard to ascertain
|
||||
which flags might be missing or undocumented, and to locate
|
||||
flags within the manpage.
|
||||
|
||||
Re-order the list of flags in alphanumeric order, and do
|
||||
the same for the flag descriptions in the body of the manpage.
|
||||
|
||||
There should be no content changes here, just reordering
|
||||
for consistency.
|
||||
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
Reviewed-by: Andreas Dilger <adilger@dilger.ca>
|
||||
|
||||
diff --git a/misc/chattr.1.in b/misc/chattr.1.in
|
||||
index 2a3640c..ce426e8 100644
|
||||
--- a/misc/chattr.1.in
|
||||
+++ b/misc/chattr.1.in
|
||||
@@ -19,24 +19,36 @@ chattr \- change file attributes on a Linux file system
|
||||
.B chattr
|
||||
changes the file attributes on a Linux file system.
|
||||
.PP
|
||||
-The format of a symbolic mode is +-=[acdeijstuACDST].
|
||||
+The format of a symbolic mode is +-=[aAcCdDeijsStTu].
|
||||
.PP
|
||||
The operator `+' causes the selected attributes to be added to the
|
||||
existing attributes of the files; `-' causes them to be removed; and
|
||||
`=' causes them to be the only attributes that the files have.
|
||||
.PP
|
||||
-The letters `acdeijstuACDST' select the new attributes for the files:
|
||||
-append only (a), compressed (c), no dump (d), extent format (e), immutable (i),
|
||||
-data journalling (j), secure deletion (s), no tail-merging (t),
|
||||
-undeletable (u), no atime updates (A), no copy on write (C),
|
||||
-synchronous directory updates (D), synchronous updates (S),
|
||||
-and top of directory hierarchy (T).
|
||||
+The letters `aAcCdDeijsStTu' select the new attributes for the files:
|
||||
+append only (a),
|
||||
+no atime updates (A),
|
||||
+compressed (c),
|
||||
+no copy on write (C),
|
||||
+no dump (d),
|
||||
+synchronous directory updates (D),
|
||||
+extent format (e),
|
||||
+immutable (i),
|
||||
+data journalling (j),
|
||||
+secure deletion (s),
|
||||
+synchronous updates (S),
|
||||
+no tail-merging (t),
|
||||
+top of directory hierarchy (T),
|
||||
+and undeletable (u).
|
||||
.PP
|
||||
The following attributes are read-only, and may be listed by
|
||||
.BR lsattr (1)
|
||||
-but not modified by chattr: huge file (h), compression error (E),
|
||||
-indexed directory (I), compression raw access (X), and compressed dirty
|
||||
-file (Z).
|
||||
+but not modified by chattr:
|
||||
+compression error (E),
|
||||
+huge file (h),
|
||||
+indexed directory (I),
|
||||
+compression raw access (X),
|
||||
+and compressed dirty file (Z).
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.B \-R
|
||||
@@ -51,14 +63,14 @@ Suppress most error messages.
|
||||
.BI \-v " version"
|
||||
Set the file's version/generation number.
|
||||
.SH ATTRIBUTES
|
||||
-When a file with the 'A' attribute set is accessed, its atime record is
|
||||
-not modified. This avoids a certain amount of disk I/O for laptop
|
||||
-systems.
|
||||
-.PP
|
||||
A file with the `a' attribute set can only be open in append mode for writing.
|
||||
Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE
|
||||
capability can set or clear this attribute.
|
||||
.PP
|
||||
+When a file with the 'A' attribute set is accessed, its atime record is
|
||||
+not modified. This avoids a certain amount of disk I/O for laptop
|
||||
+systems.
|
||||
+.PP
|
||||
A file with the `c' attribute set is automatically compressed on the disk
|
||||
by the kernel. A read from this file returns uncompressed data. A write to
|
||||
this file compresses data before storing them on the disk. Note: please
|
||||
@@ -74,27 +86,21 @@ be fully stable. If the 'C' flag is set on a directory, it will have no
|
||||
effect on the directory, but new files created in that directory will
|
||||
the No_COW attribute.)
|
||||
.PP
|
||||
-When a directory with the `D' attribute set is modified,
|
||||
-the changes are written synchronously on the disk; this is equivalent to
|
||||
-the `dirsync' mount option applied to a subset of the files.
|
||||
-.PP
|
||||
A file with the `d' attribute set is not candidate for backup when the
|
||||
.BR dump (8)
|
||||
program is run.
|
||||
.PP
|
||||
-The 'E' attribute is used by the experimental compression patches to
|
||||
-indicate that a compressed file has a compression error. It may not be
|
||||
-set or reset using
|
||||
-.BR chattr (1),
|
||||
-although it can be displayed by
|
||||
-.BR lsattr (1).
|
||||
+When a directory with the `D' attribute set is modified,
|
||||
+the changes are written synchronously on the disk; this is equivalent to
|
||||
+the `dirsync' mount option applied to a subset of the files.
|
||||
.PP
|
||||
The 'e' attribute indicates that the file is using extents for mapping
|
||||
the blocks on disk. It may not be removed using
|
||||
.BR chattr (1).
|
||||
.PP
|
||||
-The 'I' attribute is used by the htree code to indicate that a directory
|
||||
-is being indexed using hashed trees. It may not be set or reset using
|
||||
+The 'E' attribute is used by the experimental compression patches to
|
||||
+indicate that a compressed file has a compression error. It may not be
|
||||
+set or reset using
|
||||
.BR chattr (1),
|
||||
although it can be displayed by
|
||||
.BR lsattr (1).
|
||||
@@ -111,6 +117,12 @@ renamed, no link can be created to this file and no data can be written
|
||||
to the file. Only the superuser or a process possessing the
|
||||
CAP_LINUX_IMMUTABLE capability can set or clear this attribute.
|
||||
.PP
|
||||
+The 'I' attribute is used by the htree code to indicate that a directory
|
||||
+is being indexed using hashed trees. It may not be set or reset using
|
||||
+.BR chattr (1),
|
||||
+although it can be displayed by
|
||||
+.BR lsattr (1).
|
||||
+.PP
|
||||
A file with the `j' attribute has all of its data written to the ext3
|
||||
or ext4 journal before being written to the file itself, if the filesystem
|
||||
is mounted with the "data=ordered" or "data=writeback" options. When the
|
||||
@@ -127,6 +139,13 @@ When a file with the `S' attribute set is modified,
|
||||
the changes are written synchronously on the disk; this is equivalent to
|
||||
the `sync' mount option applied to a subset of the files.
|
||||
.PP
|
||||
+A file with the 't' attribute will not have a partial block fragment at
|
||||
+the end of the file merged with other files (for those filesystems which
|
||||
+support tail-merging). This is necessary for applications such as LILO
|
||||
+which read the filesystem directly, and which don't understand tail-merged
|
||||
+files. Note: As of this writing, the ext2 or ext3 filesystems do not
|
||||
+(yet, except in very experimental patches) support tail-merging.
|
||||
+.PP
|
||||
A directory with the 'T' attribute will be deemed to be the top of
|
||||
directory hierarchies for the purposes of the Orlov block allocator.
|
||||
This is a hint to the block allocator used by ext3 and ext4 that the
|
||||
@@ -137,13 +156,6 @@ and /home/mary are placed into separate block groups. For directories
|
||||
where this attribute is not set, the Orlov block allocator will try to
|
||||
group subdirectories closer together where possible.
|
||||
.PP
|
||||
-A file with the 't' attribute will not have a partial block fragment at
|
||||
-the end of the file merged with other files (for those filesystems which
|
||||
-support tail-merging). This is necessary for applications such as LILO
|
||||
-which read the filesystem directly, and which don't understand tail-merged
|
||||
-files. Note: As of this writing, the ext2 or ext3 filesystems do not
|
||||
-(yet, except in very experimental patches) support tail-merging.
|
||||
-.PP
|
||||
When a file with the `u' attribute set is deleted, its contents are
|
||||
saved. This allows the user to ask for its undeletion. Note: please
|
||||
make sure to read the bugs and limitations section at the end of this
|
||||
diff --git a/misc/chattr.c b/misc/chattr.c
|
||||
index 39a6016..d5a6a61 100644
|
||||
--- a/misc/chattr.c
|
||||
+++ b/misc/chattr.c
|
||||
@@ -83,7 +83,7 @@ static unsigned long sf;
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr,
|
||||
- _("Usage: %s [-RVf] [-+=AaCcDdeijsSu] [-v version] files...\n"),
|
||||
+ _("Usage: %s [-RVf] [-+=aAcCdDeijsSu] [-v version] files...\n"),
|
||||
program_name);
|
||||
exit(1);
|
||||
}
|
||||
|
|
@ -0,0 +1,191 @@
|
|||
commit 272258e1dffe8afb6c9d0b0ba5edc119dbf9f52a
|
||||
Author: Eric Sandeen <sandeen@redhat.com>
|
||||
Date: Fri Jul 4 23:03:14 2014 -0400
|
||||
|
||||
e2fsprogs: revise and extend chattr(1) and chattr usage()
|
||||
|
||||
The chattr(1) manpage and chattr usage() output were missing some flags.
|
||||
|
||||
Add those, and make some other minor cosmetic fixes.
|
||||
|
||||
(I've left out the 'B' (EXT2_COMPRBLK_FL) flag, because
|
||||
it's not actually used anywhere, and I can't figure out
|
||||
how it differs from 'c' (EXT2_COMPR_FL))
|
||||
|
||||
Also, because the matrix of filesystems & flags is quite large,
|
||||
refer to filesystem-specific manpages for detailed discussion
|
||||
of flags supported by those filesystems, rather than trying to
|
||||
cover it all in this manpage. I'll send those manpage
|
||||
updates to the appropriate lists a bit later.
|
||||
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
Reviewed-by: Andreas Dilger <adilger@dilger.ca>
|
||||
|
||||
diff --git a/misc/chattr.1.in b/misc/chattr.1.in
|
||||
index ce426e8..23b6938 100644
|
||||
--- a/misc/chattr.1.in
|
||||
+++ b/misc/chattr.1.in
|
||||
@@ -21,11 +21,11 @@ changes the file attributes on a Linux file system.
|
||||
.PP
|
||||
The format of a symbolic mode is +-=[aAcCdDeijsStTu].
|
||||
.PP
|
||||
-The operator `+' causes the selected attributes to be added to the
|
||||
-existing attributes of the files; `-' causes them to be removed; and
|
||||
-`=' causes them to be the only attributes that the files have.
|
||||
+The operator '+' causes the selected attributes to be added to the
|
||||
+existing attributes of the files; '-' causes them to be removed; and
|
||||
+'=' causes them to be the only attributes that the files have.
|
||||
.PP
|
||||
-The letters `aAcCdDeijsStTu' select the new attributes for the files:
|
||||
+The letters 'aAcCdDeijsStTu' select the new attributes for the files:
|
||||
append only (a),
|
||||
no atime updates (A),
|
||||
compressed (c),
|
||||
@@ -47,8 +47,17 @@ but not modified by chattr:
|
||||
compression error (E),
|
||||
huge file (h),
|
||||
indexed directory (I),
|
||||
+inline data (N),
|
||||
compression raw access (X),
|
||||
and compressed dirty file (Z).
|
||||
+.PP
|
||||
+Not all flags are supported or utilized by all filesystems; refer to
|
||||
+filesystem-specific man pages such as
|
||||
+.BR btrfs (5),
|
||||
+.BR ext4 (5),
|
||||
+and
|
||||
+.BR xfs (5)
|
||||
+for more filesystem-specific details.
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.B \-R
|
||||
@@ -63,7 +72,7 @@ Suppress most error messages.
|
||||
.BI \-v " version"
|
||||
Set the file's version/generation number.
|
||||
.SH ATTRIBUTES
|
||||
-A file with the `a' attribute set can only be open in append mode for writing.
|
||||
+A file with the 'a' attribute set can only be open in append mode for writing.
|
||||
Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE
|
||||
capability can set or clear this attribute.
|
||||
.PP
|
||||
@@ -71,7 +80,7 @@ When a file with the 'A' attribute set is accessed, its atime record is
|
||||
not modified. This avoids a certain amount of disk I/O for laptop
|
||||
systems.
|
||||
.PP
|
||||
-A file with the `c' attribute set is automatically compressed on the disk
|
||||
+A file with the 'c' attribute set is automatically compressed on the disk
|
||||
by the kernel. A read from this file returns uncompressed data. A write to
|
||||
this file compresses data before storing them on the disk. Note: please
|
||||
make sure to read the bugs and limitations section at the end of this
|
||||
@@ -86,13 +95,13 @@ be fully stable. If the 'C' flag is set on a directory, it will have no
|
||||
effect on the directory, but new files created in that directory will
|
||||
the No_COW attribute.)
|
||||
.PP
|
||||
-A file with the `d' attribute set is not candidate for backup when the
|
||||
+A file with the 'd' attribute set is not candidate for backup when the
|
||||
.BR dump (8)
|
||||
program is run.
|
||||
.PP
|
||||
-When a directory with the `D' attribute set is modified,
|
||||
+When a directory with the 'D' attribute set is modified,
|
||||
the changes are written synchronously on the disk; this is equivalent to
|
||||
-the `dirsync' mount option applied to a subset of the files.
|
||||
+the 'dirsync' mount option applied to a subset of the files.
|
||||
.PP
|
||||
The 'e' attribute indicates that the file is using extents for mapping
|
||||
the blocks on disk. It may not be removed using
|
||||
@@ -112,7 +121,7 @@ is (or at one time was) larger than 2TB. It may not be set or reset using
|
||||
although it can be displayed by
|
||||
.BR lsattr (1).
|
||||
.PP
|
||||
-A file with the `i' attribute cannot be modified: it cannot be deleted or
|
||||
+A file with the 'i' attribute cannot be modified: it cannot be deleted or
|
||||
renamed, no link can be created to this file and no data can be written
|
||||
to the file. Only the superuser or a process possessing the
|
||||
CAP_LINUX_IMMUTABLE capability can set or clear this attribute.
|
||||
@@ -123,7 +132,7 @@ is being indexed using hashed trees. It may not be set or reset using
|
||||
although it can be displayed by
|
||||
.BR lsattr (1).
|
||||
.PP
|
||||
-A file with the `j' attribute has all of its data written to the ext3
|
||||
+A file with the 'j' attribute has all of its data written to the ext3
|
||||
or ext4 journal before being written to the file itself, if the filesystem
|
||||
is mounted with the "data=ordered" or "data=writeback" options. When the
|
||||
filesystem is mounted with the "data=journal" option all file data
|
||||
@@ -131,13 +140,19 @@ is already journalled and this attribute has no effect. Only
|
||||
the superuser or a process possessing the CAP_SYS_RESOURCE
|
||||
capability can set or clear this attribute.
|
||||
.PP
|
||||
-When a file with the `s' attribute set is deleted, its blocks are zeroed
|
||||
+A file with the 'N' attribute set indicates that the file has data
|
||||
+stored inline, within the inode itself. It may not be set or reset using
|
||||
+.BR chattr (1),
|
||||
+although it can be displayed by
|
||||
+.BR lsattr (1).
|
||||
+.PP
|
||||
+When a file with the 's' attribute set is deleted, its blocks are zeroed
|
||||
and written back to the disk. Note: please make sure to read the bugs
|
||||
and limitations section at the end of this document.
|
||||
.PP
|
||||
-When a file with the `S' attribute set is modified,
|
||||
+When a file with the 'S' attribute set is modified,
|
||||
the changes are written synchronously on the disk; this is equivalent to
|
||||
-the `sync' mount option applied to a subset of the files.
|
||||
+the 'sync' mount option applied to a subset of the files.
|
||||
.PP
|
||||
A file with the 't' attribute will not have a partial block fragment at
|
||||
the end of the file merged with other files (for those filesystems which
|
||||
@@ -156,13 +171,13 @@ and /home/mary are placed into separate block groups. For directories
|
||||
where this attribute is not set, the Orlov block allocator will try to
|
||||
group subdirectories closer together where possible.
|
||||
.PP
|
||||
-When a file with the `u' attribute set is deleted, its contents are
|
||||
+When a file with the 'u' attribute set is deleted, its contents are
|
||||
saved. This allows the user to ask for its undeletion. Note: please
|
||||
make sure to read the bugs and limitations section at the end of this
|
||||
document.
|
||||
.PP
|
||||
The 'X' attribute is used by the experimental compression patches to
|
||||
-indicate that a raw contents of a compressed file can be accessed
|
||||
+indicate that the raw contents of a compressed file can be accessed
|
||||
directly. It currently may not be set or reset using
|
||||
.BR chattr (1),
|
||||
although it can be displayed by
|
||||
@@ -179,16 +194,19 @@ although it can be displayed by
|
||||
was written by Remy Card <Remy.Card@linux.org>. It is currently being
|
||||
maintained by Theodore Ts'o <tytso@alum.mit.edu>.
|
||||
.SH BUGS AND LIMITATIONS
|
||||
-The `c', 's', and `u' attributes are not honored
|
||||
+The 'c', 's', and 'u' attributes are not honored
|
||||
by the ext2, ext3, and ext4 filesystems as implemented in the current
|
||||
mainline Linux kernels.
|
||||
.PP
|
||||
-The `j' option is only useful if the filesystem is mounted as ext3 or ext4.
|
||||
+The 'j' option is only useful if the filesystem is mounted as ext3 or ext4.
|
||||
.PP
|
||||
-The `D' option is only useful on Linux kernel 2.5.19 and later.
|
||||
+The 'D' option is only useful on Linux kernel 2.5.19 and later.
|
||||
.SH AVAILABILITY
|
||||
.B chattr
|
||||
is part of the e2fsprogs package and is available from
|
||||
http://e2fsprogs.sourceforge.net.
|
||||
.SH SEE ALSO
|
||||
-.BR lsattr (1)
|
||||
+.BR lsattr (1),
|
||||
+.BR btrfs (5),
|
||||
+.BR ext4 (5),
|
||||
+.BR xfs (5).
|
||||
diff --git a/misc/chattr.c b/misc/chattr.c
|
||||
index d5a6a61..f130108 100644
|
||||
--- a/misc/chattr.c
|
||||
+++ b/misc/chattr.c
|
||||
@@ -83,7 +83,7 @@ static unsigned long sf;
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr,
|
||||
- _("Usage: %s [-RVf] [-+=aAcCdDeijsSu] [-v version] files...\n"),
|
||||
+ _("Usage: %s [-RVf] [-+=aAcCdDeijsStTu] [-v version] files...\n"),
|
||||
program_name);
|
||||
exit(1);
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
commit c7c539e8fd86de691475eea00409c6c030f312cd
|
||||
Author: Darrick J. Wong <darrick.wong@oracle.com>
|
||||
Date: Tue Jul 22 12:40:56 2014 -0400
|
||||
|
||||
e4defrag: backwards-allocated files should be defragmented too
|
||||
|
||||
Currently, e4defrag avoids increasing file fragmentation by comparing
|
||||
the number of runs of physical extents of both the original and the
|
||||
donor files. Unfortunately, there is a bug in the routine that counts
|
||||
physical extents, since it doesn't look at the logical block offsets
|
||||
of the extents. Therefore, a file whose blocks were allocated in
|
||||
reverse order will be seen as only having one big physical extent, and
|
||||
therefore will not be defragmented.
|
||||
|
||||
Fix the counting routine to consider logical extent offset so that we
|
||||
defragment backwards-allocated files. This could be problematic if we
|
||||
ever gain the ability to lay out logically sparse extents in a
|
||||
physically contiguous manner, but presumably one wouldn't call defrag
|
||||
on such a file.
|
||||
|
||||
Reported-by: Xiaoguang Wang <wangxg.fnst@cn.fujitsu.com>
|
||||
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
|
||||
Index: e2fsprogs-1.42.9/misc/e4defrag.c
|
||||
===================================================================
|
||||
--- e2fsprogs-1.42.9.orig/misc/e4defrag.c
|
||||
+++ e2fsprogs-1.42.9/misc/e4defrag.c
|
||||
@@ -941,7 +941,9 @@ static int get_physical_count(struct fie
|
||||
|
||||
do {
|
||||
if ((ext_list_tmp->data.physical + ext_list_tmp->data.len)
|
||||
- != ext_list_tmp->next->data.physical) {
|
||||
+ != ext_list_tmp->next->data.physical ||
|
||||
+ (ext_list_tmp->data.logical + ext_list_tmp->data.len)
|
||||
+ != ext_list_tmp->next->data.logical) {
|
||||
/* This extent and next extent are not continuous. */
|
||||
ret++;
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
From ca35619b7209a50ee0fd1f2799cbe232277f39cc Mon Sep 17 00:00:00 2001
|
||||
From: Eryu Guan <guaneryu@gmail.com>
|
||||
Date: Thu, 4 Jul 2013 17:05:10 +0800
|
||||
Subject: [PATCH 3/8] mke2fs: disable resize_inode feature if 64bit feature is
|
||||
enabled
|
||||
|
||||
Since auto_64-bit_support is on by default, resize_inode feature will
|
||||
be disabled when creating a >16T ext4 according to mke2fs.conf(5).
|
||||
|
||||
This should also be done when making ext4 with "-O 64bit" to enable
|
||||
64bit feature explicitly. Otherwise online resize to enlarge a
|
||||
over-16T fs to larger would fail.
|
||||
|
||||
[root@localhost resize]# truncate -s 50t fs.img
|
||||
[root@localhost resize]# losetup /dev/loop0 fs.img
|
||||
[root@localhost resize]# mkfs -t ext4 -O 64bit /dev/loop0 30t
|
||||
[root@localhost resize]# mount /dev/loop0 mnt
|
||||
[root@localhost resize]# resize2fs /dev/loop0
|
||||
resize2fs 1.42.7 (21-Jan-2013)
|
||||
Filesystem at /dev/loop0 is mounted on /root/resize/mnt; on-line resizing required
|
||||
old_desc_blocks = 3840, new_desc_blocks = 6400
|
||||
resize2fs: Invalid argument While checking for on-line resizing support
|
||||
|
||||
And dmesg shows
|
||||
[688378.442623] EXT4-fs (loop0): resizing filesystem from 6710886400 to 13421772800 blocks
|
||||
[688378.443216] EXT4-fs warning (device loop0): verify_reserved_gdb:700: reserved GDT 3201 missing grp 177147 (5804756097)
|
||||
[688378.443222] EXT4-fs (loop0): resized filesystem to 8858370048
|
||||
[688378.528451] EXT4-fs warning (device loop0): ext4_group_extend:1710: can't shrink FS - resize aborted
|
||||
|
||||
With this fix resize2fs could do the online enlarge correctly.
|
||||
|
||||
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
|
||||
---
|
||||
misc/mke2fs.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/misc/mke2fs.c b/misc/mke2fs.c
|
||||
index e970bbe..76ea60b 100644
|
||||
--- a/misc/mke2fs.c
|
||||
+++ b/misc/mke2fs.c
|
||||
@@ -1836,6 +1836,9 @@ profile_error:
|
||||
* 32-bit vs 64-bit block number support.
|
||||
*/
|
||||
if ((fs_blocks_count > MAX_32_NUM) &&
|
||||
+ (fs_param.s_feature_incompat & EXT4_FEATURE_INCOMPAT_64BIT))
|
||||
+ fs_param.s_feature_compat &= ~EXT2_FEATURE_COMPAT_RESIZE_INODE;
|
||||
+ if ((fs_blocks_count > MAX_32_NUM) &&
|
||||
!(fs_param.s_feature_incompat & EXT4_FEATURE_INCOMPAT_64BIT) &&
|
||||
get_bool_from_profile(fs_types, "auto_64-bit_support", 0)) {
|
||||
fs_param.s_feature_incompat |= EXT4_FEATURE_INCOMPAT_64BIT;
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
commit 0462fd6db55de28d7e087d8d06ab20339acd8f67
|
||||
Author: Eric Sandeen <sandeen@sandeen.net>
|
||||
Date: Sun Dec 14 19:08:59 2014 -0500
|
||||
|
||||
resize2fs: don't require fsck to print min size
|
||||
|
||||
My previous change ended up requiring that the filesystem
|
||||
be fsck'd after the last mount, even if we are only querying
|
||||
the minimum size. This is a bit draconian, and it burned
|
||||
the Fedora installer, which wants to calculate minimum size
|
||||
for every filesystem in the box at install time, which in turn
|
||||
requires a full fsck of every filesystem.
|
||||
|
||||
Try this one more time, and separate out the tests to make things
|
||||
a bit more clear. If we're only printing the min size, don't
|
||||
require the fsck, as this is a bit less dangerous/critical.
|
||||
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
|
||||
Index: e2fsprogs-1.42.9/resize/main.c
|
||||
===================================================================
|
||||
--- e2fsprogs-1.42.9.orig/resize/main.c
|
||||
+++ e2fsprogs-1.42.9/resize/main.c
|
||||
@@ -319,10 +319,30 @@ int main (int argc, char ** argv)
|
||||
exit (1);
|
||||
}
|
||||
|
||||
- if (!(mount_flags & EXT2_MF_MOUNTED)) {
|
||||
- if (!force && ((fs->super->s_lastcheck < fs->super->s_mtime) ||
|
||||
- (fs->super->s_state & EXT2_ERROR_FS) ||
|
||||
- ((fs->super->s_state & EXT2_VALID_FS) == 0))) {
|
||||
+ /*
|
||||
+ * Before acting on an unmounted filesystem, make sure it's ok,
|
||||
+ * unless the user is forcing it.
|
||||
+ *
|
||||
+ * We do ERROR and VALID checks even if we're only printing the
|
||||
+ * minimimum size, because traversal of a badly damaged filesystem
|
||||
+ * can cause issues as well. We don't require it to be fscked after
|
||||
+ * the last mount time in this case, though, as this is a bit less
|
||||
+ * risky.
|
||||
+ */
|
||||
+ if (!force && !(mount_flags & EXT2_MF_MOUNTED)) {
|
||||
+ int checkit = 0;
|
||||
+
|
||||
+ if (fs->super->s_state & EXT2_ERROR_FS)
|
||||
+ checkit = 1;
|
||||
+
|
||||
+ if ((fs->super->s_state & EXT2_VALID_FS) == 0)
|
||||
+ checkit = 1;
|
||||
+
|
||||
+ if ((fs->super->s_lastcheck < fs->super->s_mtime) &&
|
||||
+ !print_min_size)
|
||||
+ checkit = 1;
|
||||
+
|
||||
+ if (checkit) {
|
||||
fprintf(stderr,
|
||||
_("Please run 'e2fsck -f %s' first.\n\n"),
|
||||
device_name);
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
From 9e15f8af7ce0fef4d588ffdceb1adea9e6f4b57c Mon Sep 17 00:00:00 2001
|
||||
From: Lukas Czerner <lczerner@redhat.com>
|
||||
Date: Fri, 21 Jun 2013 16:42:27 +0200
|
||||
Subject: [PATCH 5/8] mke2fs.conf: Enable 64bit feature by default
|
||||
|
||||
The 64bit feature has been added to the ext4 a long time ago (2006?) so
|
||||
it should be ok to enable it by default by now. This would allow us to
|
||||
resize the file system past 16TB when it was originally smaller than
|
||||
that and user did not specified 64bit feature manually.
|
||||
|
||||
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
|
||||
---
|
||||
misc/mke2fs.conf.in | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/misc/mke2fs.conf.in b/misc/mke2fs.conf.in
|
||||
index 0871f77..667800c 100644
|
||||
--- a/misc/mke2fs.conf.in
|
||||
+++ b/misc/mke2fs.conf.in
|
||||
@@ -11,8 +11,7 @@
|
||||
features = has_journal
|
||||
}
|
||||
ext4 = {
|
||||
- features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
|
||||
- auto_64-bit_support = 1
|
||||
+ features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize,64bit
|
||||
inode_size = 256
|
||||
}
|
||||
ext4dev = {
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
From 165af99c57a686444167fcef56f9fae31d815887 Mon Sep 17 00:00:00 2001
|
||||
From: Lukas Czerner <lczerner@redhat.com>
|
||||
Date: Mon, 24 Feb 2014 18:41:06 +0100
|
||||
Subject: [PATCH 4/8] mke2fs: Enable lazy_itable_init on newer kernel by
|
||||
default
|
||||
|
||||
Currently is used did not specified lazy_itable_init option we rely on
|
||||
information from ext4 module exported via sysfs interface. However if
|
||||
the ext4 module is not loaded it will not be enabled even though kernel
|
||||
might support it.
|
||||
|
||||
With this commit we set the default according to the kernel version,
|
||||
however we still allow it to be set manually via extended option or be
|
||||
enabled in case that ext4 module advertise that it supports this
|
||||
feature.
|
||||
|
||||
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
|
||||
---
|
||||
misc/mke2fs.c | 10 +++++++++-
|
||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/misc/mke2fs.c b/misc/mke2fs.c
|
||||
index 76ea60b..23a988e 100644
|
||||
--- a/misc/mke2fs.c
|
||||
+++ b/misc/mke2fs.c
|
||||
@@ -1998,7 +1998,15 @@ profile_error:
|
||||
blocksize, sys_page_size);
|
||||
}
|
||||
|
||||
- lazy_itable_init = 0;
|
||||
+ /*
|
||||
+ * On newer kernels we do have lazy_itable_init support. So pick the
|
||||
+ * right default in case ext4 module is not loaded.
|
||||
+ */
|
||||
+ if (is_before_linux_ver(2, 6, 37))
|
||||
+ lazy_itable_init = 0;
|
||||
+ else
|
||||
+ lazy_itable_init = 1;
|
||||
+
|
||||
if (access("/sys/fs/ext4/features/lazy_itable_init", R_OK) == 0)
|
||||
lazy_itable_init = 1;
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
commit e92beaac1017b5cc6a73ddb88aeab7b33f714e8b
|
||||
Author: Eric Sandeen <sandeen@redhat.com>
|
||||
Date: Mon Aug 25 21:02:18 2014 -0400
|
||||
|
||||
e2fsprogs: add supported file attributes to ext4.5 manpage
|
||||
|
||||
The chattr(1) manpage now refers users to filesystem-specific
|
||||
manpages for details on supported attributes, so add those to
|
||||
ext4.5.
|
||||
|
||||
I've left out oddities like being able to set the compressed
|
||||
or no-tail-packing flags, or setting data journaling on ext2.
|
||||
|
||||
That behavior seems like a bug, not a feature.
|
||||
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
|
||||
diff --git a/misc/ext4.5.in b/misc/ext4.5.in
|
||||
index 9112b3d..a862a34 100644
|
||||
--- a/misc/ext4.5.in
|
||||
+++ b/misc/ext4.5.in
|
||||
@@ -608,6 +608,37 @@ seriously cramp the system's style.)
|
||||
.B i_version
|
||||
Enable 64-bit inode version support. This option is off by default.
|
||||
|
||||
+.SH FILE ATTRIBUTES
|
||||
+The ext2, ext3, and ext4 filesystems support setting the following file
|
||||
+attributes on Linux systems using the
|
||||
+.BR chattr (1)
|
||||
+utility:
|
||||
+.sp
|
||||
+.BR a " - append only"
|
||||
+.sp
|
||||
+.BR A " - no atime updates"
|
||||
+.sp
|
||||
+.BR d " - no dump"
|
||||
+.sp
|
||||
+.BR D " - synchronous directory updates"
|
||||
+.sp
|
||||
+.BR i " - immutable"
|
||||
+.sp
|
||||
+.BR S " - synchronous updates"
|
||||
+.sp
|
||||
+.BR u " - undeletable"
|
||||
+.sp
|
||||
+In addition, the ext3 and ext4 filesystems support the following flag:
|
||||
+.sp
|
||||
+.BR j " - data journaling"
|
||||
+.sp
|
||||
+Finally, the ext4 filesystem also supports the following flag:
|
||||
+.sp
|
||||
+.BR e " - extents format"
|
||||
+.sp
|
||||
+For descriptions of these attribute flags, please refer to the
|
||||
+.BR chattr (1)
|
||||
+man page.
|
||||
.SH SEE ALSO
|
||||
.BR mke2fs (8),
|
||||
.BR mke2fs.conf (5),
|
||||
@@ -615,4 +646,5 @@ Enable 64-bit inode version support. This option is off by default.
|
||||
.BR dumpe2fs (8),
|
||||
.BR tune2fs (8),
|
||||
.BR debugfs (8),
|
||||
-.BR mount (8)
|
||||
+.BR mount (8),
|
||||
+.BR chattr (1)
|
||||
|
|
@ -0,0 +1,394 @@
|
|||
commit 3e500a8f116b0515d1507fe0ab4bf617664a6cdc
|
||||
Author: Eric Sandeen <sandeen@redhat.com>
|
||||
Date: Fri Jul 4 23:07:36 2014 -0400
|
||||
|
||||
e2fsprogs: add mount options to ext4.5
|
||||
|
||||
This is a straight cut and paste from the util-linux
|
||||
mount manpage to ext4.5 (with commented-out lines
|
||||
removed).
|
||||
|
||||
It's pretty much impossible for util-linux to keep up
|
||||
with every filesystem out there, and Karel has more than
|
||||
once expressed a wish that mount options move into fs-specific
|
||||
manpages.
|
||||
|
||||
So, here we go.
|
||||
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
|
||||
diff --git a/misc/ext4.5.in b/misc/ext4.5.in
|
||||
index 134c19f..9112b3d 100644
|
||||
--- a/misc/ext4.5.in
|
||||
+++ b/misc/ext4.5.in
|
||||
@@ -251,10 +251,368 @@ and it also speeds up the time required for
|
||||
.BR mke2fs (8)
|
||||
to create the file system.
|
||||
.RE
|
||||
+.SH MOUNT OPTIONS
|
||||
+This section describes mount options which are specific to ext2, ext3,
|
||||
+and ext4. Other generic mount options may be used as well; see
|
||||
+.BR mount (8)
|
||||
+for details.
|
||||
+.SH "Mount options for ext2"
|
||||
+The `ext2' filesystem is the standard Linux filesystem.
|
||||
+Since Linux 2.5.46, for most mount options the default
|
||||
+is determined by the filesystem superblock. Set them with
|
||||
+.BR tune2fs (8).
|
||||
+.TP
|
||||
+.BR acl | noacl
|
||||
+Support POSIX Access Control Lists (or not).
|
||||
+.TP
|
||||
+.BR bsddf | minixdf
|
||||
+Set the behavior for the
|
||||
+.I statfs
|
||||
+system call. The
|
||||
+.B minixdf
|
||||
+behavior is to return in the
|
||||
+.I f_blocks
|
||||
+field the total number of blocks of the filesystem, while the
|
||||
+.B bsddf
|
||||
+behavior (which is the default) is to subtract the overhead blocks
|
||||
+used by the ext2 filesystem and not available for file storage. Thus
|
||||
+.sp 1
|
||||
+% mount /k \-o minixdf; df /k; umount /k
|
||||
+.TS
|
||||
+tab(#);
|
||||
+l2 l2 r2 l2 l2 l
|
||||
+l c r c c l.
|
||||
+Filesystem#1024-blocks#Used#Available#Capacity#Mounted on
|
||||
+/dev/sda6#2630655#86954#2412169#3%#/k
|
||||
+.TE
|
||||
+.sp 1
|
||||
+% mount /k \-o bsddf; df /k; umount /k
|
||||
+.TS
|
||||
+tab(#);
|
||||
+l2 l2 r2 l2 l2 l
|
||||
+l c r c c l.
|
||||
+Filesystem#1024-blocks#Used#Available#Capacity#Mounted on
|
||||
+/dev/sda6#2543714#13#2412169#0%#/k
|
||||
+.TE
|
||||
+.sp 1
|
||||
+(Note that this example shows that one can add command line options
|
||||
+to the options given in
|
||||
+.IR /etc/fstab .)
|
||||
+.TP
|
||||
+.BR check=none " or " nocheck
|
||||
+No checking is done at mount time. This is the default. This is fast.
|
||||
+It is wise to invoke
|
||||
+.BR e2fsck (8)
|
||||
+every now and then, e.g.\& at boot time. The non-default behavior is unsupported
|
||||
+(check=normal and check=strict options have been removed). Note that these mount options
|
||||
+don't have to be supported if ext4 kernel driver is used for ext2 and ext3 filesystems.
|
||||
+.TP
|
||||
+.B debug
|
||||
+Print debugging info upon each (re)mount.
|
||||
+.TP
|
||||
+.BR errors= { continue | remount-ro | panic }
|
||||
+Define the behavior when an error is encountered.
|
||||
+(Either ignore errors and just mark the filesystem erroneous and continue,
|
||||
+or remount the filesystem read-only, or panic and halt the system.)
|
||||
+The default is set in the filesystem superblock, and can be
|
||||
+changed using
|
||||
+.BR tune2fs (8).
|
||||
+.TP
|
||||
+.BR grpid | bsdgroups " and " nogrpid | sysvgroups
|
||||
+These options define what group id a newly created file gets.
|
||||
+When
|
||||
+.B grpid
|
||||
+is set, it takes the group id of the directory in which it is created;
|
||||
+otherwise (the default) it takes the fsgid of the current process, unless
|
||||
+the directory has the setgid bit set, in which case it takes the gid
|
||||
+from the parent directory, and also gets the setgid bit set
|
||||
+if it is a directory itself.
|
||||
+.TP
|
||||
+.BR grpquota | noquota | quota | usrquota
|
||||
+The usrquota (same as quota) mount option enables user quota support on the
|
||||
+filesystem. grpquota enables group quotas support. You need the quota utilities
|
||||
+to actually enable and manage the quota system.
|
||||
+.TP
|
||||
+.B nouid32
|
||||
+Disables 32-bit UIDs and GIDs. This is for interoperability with older
|
||||
+kernels which only store and expect 16-bit values.
|
||||
+.TP
|
||||
+.BR oldalloc " or " orlov
|
||||
+Use old allocator or Orlov allocator for new inodes. Orlov is default.
|
||||
+.TP
|
||||
+\fBresgid=\fP\,\fIn\fP and \fBresuid=\fP\,\fIn\fP
|
||||
+The ext2 filesystem reserves a certain percentage of the available
|
||||
+space (by default 5%, see
|
||||
+.BR mke2fs (8)
|
||||
+and
|
||||
+.BR tune2fs (8)).
|
||||
+These options determine who can use the reserved blocks.
|
||||
+(Roughly: whoever has the specified uid, or belongs to the specified group.)
|
||||
+.TP
|
||||
+.BI sb= n
|
||||
+Instead of block 1, use block
|
||||
+.I n
|
||||
+as superblock. This could be useful when the filesystem has been damaged.
|
||||
+(Earlier, copies of the superblock would be made every 8192 blocks: in
|
||||
+block 1, 8193, 16385, \&...\& (and one got thousands of copies on
|
||||
+a big filesystem). Since version 1.08,
|
||||
+.B mke2fs
|
||||
+has a \-s (sparse superblock) option to reduce the number of backup
|
||||
+superblocks, and since version 1.15 this is the default. Note
|
||||
+that this may mean that ext2 filesystems created by a recent
|
||||
+.B mke2fs
|
||||
+cannot be mounted r/w under Linux 2.0.*.)
|
||||
+The block number here uses 1\ k units. Thus, if you want to use logical
|
||||
+block 32768 on a filesystem with 4\ k blocks, use "sb=131072".
|
||||
+.TP
|
||||
+.BR user_xattr | nouser_xattr
|
||||
+Support "user." extended attributes (or not).
|
||||
+
|
||||
+
|
||||
+.SH "Mount options for ext3"
|
||||
+The ext3 filesystem is a version of the ext2 filesystem which has been
|
||||
+enhanced with journaling. It supports the same options as ext2 as
|
||||
+well as the following additions:
|
||||
+.TP
|
||||
+.B journal=update
|
||||
+Update the ext3 filesystem's journal to the current format.
|
||||
+.TP
|
||||
+.B journal=inum
|
||||
+When a journal already exists, this option is ignored. Otherwise, it
|
||||
+specifies the number of the inode which will represent the ext3 filesystem's
|
||||
+journal file; ext3 will create a new journal, overwriting the old contents
|
||||
+of the file whose inode number is
|
||||
+.IR inum .
|
||||
+.TP
|
||||
+.BR journal_dev=devnum / journal_path=path
|
||||
+When the external journal device's major/minor numbers
|
||||
+have changed, these options allow the user to specify
|
||||
+the new journal location. The journal device is
|
||||
+identified either through its new major/minor numbers encoded
|
||||
+in devnum, or via a path to the device.
|
||||
+.TP
|
||||
+.BR norecovery / noload
|
||||
+Don't load the journal on mounting. Note that
|
||||
+if the filesystem was not unmounted cleanly,
|
||||
+skipping the journal replay will lead to the
|
||||
+filesystem containing inconsistencies that can
|
||||
+lead to any number of problems.
|
||||
+.TP
|
||||
+.BR data= { journal | ordered | writeback }
|
||||
+Specifies the journaling mode for file data. Metadata is always journaled.
|
||||
+To use modes other than
|
||||
+.B ordered
|
||||
+on the root filesystem, pass the mode to the kernel as boot parameter, e.g.\&
|
||||
+.IR rootflags=data=journal .
|
||||
+.RS
|
||||
+.TP
|
||||
+.B journal
|
||||
+All data is committed into the journal prior to being written into the
|
||||
+main filesystem.
|
||||
+.TP
|
||||
+.B ordered
|
||||
+This is the default mode. All data is forced directly out to the main file
|
||||
+system prior to its metadata being committed to the journal.
|
||||
+.TP
|
||||
+.B writeback
|
||||
+Data ordering is not preserved \(en data may be written into the main
|
||||
+filesystem after its metadata has been committed to the journal.
|
||||
+This is rumoured to be the highest-throughput option. It guarantees
|
||||
+internal filesystem integrity, however it can allow old data to appear
|
||||
+in files after a crash and journal recovery.
|
||||
+.RE
|
||||
+.TP
|
||||
+.B data_err=ignore
|
||||
+Just print an error message if an error occurs in a file data buffer in
|
||||
+ordered mode.
|
||||
+.TP
|
||||
+.B data_err=abort
|
||||
+Abort the journal if an error occurs in a file data buffer in ordered mode.
|
||||
+.TP
|
||||
+.BR barrier=0 " / " barrier=1 "
|
||||
+This disables / enables the use of write barriers in the jbd code. barrier=0
|
||||
+disables, barrier=1 enables (default). This also requires an IO stack which can
|
||||
+support barriers, and if jbd gets an error on a barrier write, it will disable
|
||||
+barriers again with a warning. Write barriers enforce proper on-disk ordering
|
||||
+of journal commits, making volatile disk write caches safe to use, at some
|
||||
+performance penalty. If your disks are battery-backed in one way or another,
|
||||
+disabling barriers may safely improve performance.
|
||||
+.TP
|
||||
+.BI commit= nrsec
|
||||
+Sync all data and metadata every
|
||||
+.I nrsec
|
||||
+seconds. The default value is 5 seconds. Zero means default.
|
||||
+.TP
|
||||
+.B user_xattr
|
||||
+Enable Extended User Attributes. See the
|
||||
+.BR attr (5)
|
||||
+manual page.
|
||||
+.TP
|
||||
+.B acl
|
||||
+Enable POSIX Access Control Lists. See the
|
||||
+.BR acl (5)
|
||||
+manual page.
|
||||
+.TP
|
||||
+.BR usrjquota=aquota.user | grpjquota=aquota.group | jqfmt=vfsv0
|
||||
+Apart from the old quota system (as in ext2, jqfmt=vfsold aka version 1 quota)
|
||||
+ext3 also supports journaled quotas (version 2 quota). jqfmt=vfsv0
|
||||
+enables journaled quotas. For journaled quotas the mount options
|
||||
+usrjquota=aquota.user and grpjquota=aquota.group are required to tell the
|
||||
+quota system which quota database files to use. Journaled quotas have the
|
||||
+advantage that even after a crash no quota check is required.
|
||||
+
|
||||
+.SH "Mount options for ext4"
|
||||
+The ext4 filesystem is an advanced level of the ext3 filesystem which
|
||||
+incorporates scalability and reliability enhancements for supporting large
|
||||
+filesystem.
|
||||
+
|
||||
+The options
|
||||
+.B journal_dev, norecovery, noload, data, commit, orlov, oldalloc, [no]user_xattr
|
||||
+.B [no]acl, bsddf, minixdf, debug, errors, data_err, grpid, bsdgroups, nogrpid
|
||||
+.B sysvgroups, resgid, resuid, sb, quota, noquota, grpquota, usrquota
|
||||
+.B usrjquota, grpjquota and jqfmt
|
||||
+are backwardly compatible with ext3 or ext2.
|
||||
+.TP
|
||||
+.B journal_checksum
|
||||
+Enable checksumming of the journal transactions. This will allow the recovery
|
||||
+code in e2fsck and the kernel to detect corruption in the kernel. It is a
|
||||
+compatible change and will be ignored by older kernels.
|
||||
+.TP
|
||||
+.B journal_async_commit
|
||||
+Commit block can be written to disk without waiting for descriptor blocks. If
|
||||
+enabled older kernels cannot mount the device.
|
||||
+This will enable 'journal_checksum' internally.
|
||||
+.TP
|
||||
+.BR barrier=0 " / " barrier=1 " / " barrier " / " nobarrier
|
||||
+These mount options have the same effect as in ext3. The mount options
|
||||
+"barrier" and "nobarrier" are added for consistency with other ext4 mount
|
||||
+options.
|
||||
+
|
||||
+The ext4 filesystem enables write barriers by default.
|
||||
+.TP
|
||||
+.BI inode_readahead_blks= n
|
||||
+This tuning parameter controls the maximum number of inode table blocks that
|
||||
+ext4's inode table readahead algorithm will pre-read into the buffer cache.
|
||||
+The value must be a power of 2. The default value is 32 blocks.
|
||||
+.TP
|
||||
+.BI stripe= n
|
||||
+Number of filesystem blocks that mballoc will try to use for allocation size
|
||||
+and alignment. For RAID5/6 systems this should be the number of data disks *
|
||||
+RAID chunk size in filesystem blocks.
|
||||
+.TP
|
||||
+.B delalloc
|
||||
+Deferring block allocation until write-out time.
|
||||
+.TP
|
||||
+.B nodelalloc
|
||||
+Disable delayed allocation. Blocks are allocated when data is copied from user
|
||||
+to page cache.
|
||||
+.TP
|
||||
+.BI max_batch_time= usec
|
||||
+Maximum amount of time ext4 should wait for additional filesystem operations to
|
||||
+be batch together with a synchronous write operation. Since a synchronous
|
||||
+write operation is going to force a commit and then a wait for the I/O
|
||||
+complete, it doesn't cost much, and can be a huge throughput win, we wait for a
|
||||
+small amount of time to see if any other transactions can piggyback on the
|
||||
+synchronous write. The algorithm used is designed to automatically tune for
|
||||
+the speed of the disk, by measuring the amount of time (on average) that it
|
||||
+takes to finish committing a transaction. Call this time the "commit time".
|
||||
+If the time that the transaction has been running is less than the commit time,
|
||||
+ext4 will try sleeping for the commit time to see if other operations will join
|
||||
+the transaction. The commit time is capped by the max_batch_time, which
|
||||
+defaults to 15000\ \[mc]s (15\ ms). This optimization can be turned off entirely by
|
||||
+setting max_batch_time to 0.
|
||||
+.TP
|
||||
+.BI min_batch_time= usec
|
||||
+This parameter sets the commit time (as described above) to be at least
|
||||
+min_batch_time. It defaults to zero microseconds. Increasing this parameter
|
||||
+may improve the throughput of multi-threaded, synchronous workloads on very
|
||||
+fast disks, at the cost of increasing latency.
|
||||
+.TP
|
||||
+.BI journal_ioprio= prio
|
||||
+The I/O priority (from 0 to 7, where 0 is the highest priority) which should be
|
||||
+used for I/O operations submitted by kjournald2 during a commit operation.
|
||||
+This defaults to 3, which is a slightly higher priority than the default I/O
|
||||
+priority.
|
||||
+.TP
|
||||
+.B abort
|
||||
+Simulate the effects of calling ext4_abort() for
|
||||
+debugging purposes. This is normally used while
|
||||
+remounting a filesystem which is already mounted.
|
||||
+.TP
|
||||
+.BR auto_da_alloc | noauto_da_alloc
|
||||
+Many broken applications don't use fsync() when
|
||||
+replacing existing files via patterns such as
|
||||
+
|
||||
+fd = open("foo.new")/write(fd,...)/close(fd)/ rename("foo.new", "foo")
|
||||
+
|
||||
+or worse yet
|
||||
+
|
||||
+fd = open("foo", O_TRUNC)/write(fd,...)/close(fd).
|
||||
+
|
||||
+If auto_da_alloc is enabled, ext4 will detect the replace-via-rename and
|
||||
+replace-via-truncate patterns and force that any delayed allocation blocks are
|
||||
+allocated such that at the next journal commit, in the default data=ordered
|
||||
+mode, the data blocks of the new file are forced to disk before the rename()
|
||||
+operation is committed. This provides roughly the same level of guarantees as
|
||||
+ext3, and avoids the "zero-length" problem that can happen when a system
|
||||
+crashes before the delayed allocation blocks are forced to disk.
|
||||
+.TP
|
||||
+.B noinit_itable
|
||||
+Do not initialize any uninitialized inode table blocks in the background. This
|
||||
+feature may be used by installation CD's so that the install process can
|
||||
+complete as quickly as possible; the inode table initialization process would
|
||||
+then be deferred until the next time the filesystem is mounted.
|
||||
+.TP
|
||||
+.B init_itable=n
|
||||
+The lazy itable init code will wait n times the number of milliseconds it took
|
||||
+to zero out the previous block group's inode table. This minimizes the impact on
|
||||
+system performance while the filesystem's inode table is being initialized.
|
||||
+.TP
|
||||
+.BR discard / nodiscard
|
||||
+Controls whether ext4 should issue discard/TRIM commands to the underlying
|
||||
+block device when blocks are freed. This is useful for SSD devices and
|
||||
+sparse/thinly-provisioned LUNs, but it is off by default until sufficient
|
||||
+testing has been done.
|
||||
+.TP
|
||||
+.B nouid32
|
||||
+Disables 32-bit UIDs and GIDs. This is for
|
||||
+interoperability with older kernels which only
|
||||
+store and expect 16-bit values.
|
||||
+.TP
|
||||
+.BR block_validity / noblock_validity
|
||||
+This options allows to enables/disables the in-kernel facility for tracking
|
||||
+filesystem metadata blocks within internal data structures. This allows multi-\c
|
||||
+block allocator and other routines to quickly locate extents which might
|
||||
+overlap with filesystem metadata blocks. This option is intended for debugging
|
||||
+purposes and since it negatively affects the performance, it is off by default.
|
||||
+.TP
|
||||
+.BR dioread_lock / dioread_nolock
|
||||
+Controls whether or not ext4 should use the DIO read locking. If the
|
||||
+dioread_nolock option is specified ext4 will allocate uninitialized extent
|
||||
+before buffer write and convert the extent to initialized after IO completes.
|
||||
+This approach allows ext4 code to avoid using inode mutex, which improves
|
||||
+scalability on high speed storages. However this does not work with data
|
||||
+journaling and dioread_nolock option will be ignored with kernel warning.
|
||||
+Note that dioread_nolock code path is only used for extent-based files.
|
||||
+Because of the restrictions this options comprises it is off by default
|
||||
+(e.g.\& dioread_lock).
|
||||
+.TP
|
||||
+.B max_dir_size_kb=n
|
||||
+This limits the size of the directories so that any attempt to expand them
|
||||
+beyond the specified limit in kilobytes will cause an ENOSPC error. This is
|
||||
+useful in memory-constrained environments, where a very large directory can
|
||||
+cause severe performance problems or even provoke the Out Of Memory killer. (For
|
||||
+example, if there is only 512\ MB memory available, a 176\ MB directory may
|
||||
+seriously cramp the system's style.)
|
||||
+.TP
|
||||
+.B i_version
|
||||
+Enable 64-bit inode version support. This option is off by default.
|
||||
+
|
||||
.SH SEE ALSO
|
||||
.BR mke2fs (8),
|
||||
.BR mke2fs.conf (5),
|
||||
.BR e2fsck (8),
|
||||
.BR dumpe2fs (8),
|
||||
.BR tune2fs (8),
|
||||
-.BR debugfs (8)
|
||||
+.BR debugfs (8),
|
||||
+.BR mount (8)
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
[PATCH 2/6] e2fsprogs: fix endian handling of ext3_extent_header
|
||||
|
||||
This turned up when trying to resize a filesystem containing
|
||||
a file with many extents on PPC64.
|
||||
|
||||
Fix all locations where ext3_extent_header members aren't
|
||||
handled in an endian-safe manner.
|
||||
|
||||
(Note: inline data portion removed for rhel7 application)
|
||||
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
|
||||
---
|
||||
lib/ext2fs/ext3_extents.h | 15 ++++++++++-----
|
||||
2 files changed, 11 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/lib/ext2fs/ext3_extents.h b/lib/ext2fs/ext3_extents.h
|
||||
index 4163436..a18d705 100644
|
||||
--- a/lib/ext2fs/ext3_extents.h
|
||||
+++ b/lib/ext2fs/ext3_extents.h
|
||||
@@ -106,15 +106,20 @@ struct ext3_ext_path {
|
||||
((struct ext3_extent_idx *) (((char *) (__hdr__)) + \
|
||||
sizeof(struct ext3_extent_header)))
|
||||
#define EXT_HAS_FREE_INDEX(__path__) \
|
||||
- ((__path__)->p_hdr->eh_entries < (__path__)->p_hdr->eh_max)
|
||||
+ (ext2fs_le16_to_cpu((__path__)->p_hdr->eh_entries) < \
|
||||
+ ext2fs_le16_to_cpu((__path__)->p_hdr->eh_max))
|
||||
#define EXT_LAST_EXTENT(__hdr__) \
|
||||
- (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_entries - 1)
|
||||
+ (EXT_FIRST_EXTENT((__hdr__)) + \
|
||||
+ ext2fs_le16_to_cpu((__hdr__)->eh_entries) - 1)
|
||||
#define EXT_LAST_INDEX(__hdr__) \
|
||||
- (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_entries - 1)
|
||||
+ (EXT_FIRST_INDEX((__hdr__)) + \
|
||||
+ ext2fs_le16_to_cpu((__hdr__)->eh_entries) - 1)
|
||||
#define EXT_MAX_EXTENT(__hdr__) \
|
||||
- (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_max - 1)
|
||||
+ (EXT_FIRST_EXTENT((__hdr__)) + \
|
||||
+ ext2fs_le16_to_cpu((__hdr__)->eh_max) - 1)
|
||||
#define EXT_MAX_INDEX(__hdr__) \
|
||||
- (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_max - 1)
|
||||
+ (EXT_FIRST_INDEX((__hdr__)) + \
|
||||
+ ext2fs_le16_to_cpu((__hdr__)->eh_max) - 1)
|
||||
|
||||
#endif /* _LINUX_EXT3_EXTENTS */
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
commit 5fe2bd60844cfe5d805e62a4316afaa5cd9d7c83
|
||||
Author: Eric Sandeen <sandeen@redhat.com>
|
||||
Date: Thu Feb 20 20:18:41 2014 -0500
|
||||
|
||||
tune2fs: allow removal of dirty journal with two "-f" options
|
||||
|
||||
Jim pointed out that "tune2fs -f -O ^has_journal" won't remove the
|
||||
journal if the needs_recovery flag is set; the manpage seems to indicate
|
||||
that it should. And if you've lost an external journal and can no longer
|
||||
replay it, how should one proceed?
|
||||
|
||||
Change tune2fs so that two "-f" options will allow removal of a dirty
|
||||
journal from a filesystem, even if the filesystem needs recovery.
|
||||
|
||||
e2fsck can then do its best to pick up the pieces.
|
||||
|
||||
Addresses-Debian-Bug: #559301
|
||||
|
||||
Reported-by: Jim Faulkner <james.faulkner@yale.edu>
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
|
||||
Index: e2fsprogs-1.42.9/misc/tune2fs.8.in
|
||||
===================================================================
|
||||
--- e2fsprogs-1.42.9.orig/misc/tune2fs.8.in
|
||||
+++ e2fsprogs-1.42.9/misc/tune2fs.8.in
|
||||
@@ -248,7 +248,10 @@ option is useful when removing the
|
||||
filesystem feature from a filesystem which has
|
||||
an external journal (or is corrupted
|
||||
such that it appears to have an external journal), but that
|
||||
-external journal is not available.
|
||||
+external journal is not available. If the filesystem appears to require
|
||||
+journal replay, the
|
||||
+.B \-f
|
||||
+flag must be specified twice to proceed.
|
||||
.sp
|
||||
.B WARNING:
|
||||
Removing an external journal from a filesystem which was not cleanly unmounted
|
||||
Index: e2fsprogs-1.42.9/misc/tune2fs.c
|
||||
===================================================================
|
||||
--- e2fsprogs-1.42.9.orig/misc/tune2fs.c
|
||||
+++ e2fsprogs-1.42.9/misc/tune2fs.c
|
||||
@@ -436,8 +436,9 @@ static int update_feature_set(ext2_filsy
|
||||
"read-only.\n"), stderr);
|
||||
return 1;
|
||||
}
|
||||
- if (sb->s_feature_incompat &
|
||||
- EXT3_FEATURE_INCOMPAT_RECOVER) {
|
||||
+ if ((sb->s_feature_incompat &
|
||||
+ EXT3_FEATURE_INCOMPAT_RECOVER) &&
|
||||
+ f_flag < 2) {
|
||||
fputs(_("The needs_recovery flag is set. "
|
||||
"Please run e2fsck before clearing\n"
|
||||
"the has_journal flag.\n"), stderr);
|
||||
@@ -929,7 +930,7 @@ static void parse_tune2fs_options(int ar
|
||||
open_flag |= EXT2_FLAG_RW;
|
||||
break;
|
||||
case 'f': /* Force */
|
||||
- f_flag = 1;
|
||||
+ f_flag++;
|
||||
break;
|
||||
case 'g':
|
||||
resgid = strtoul(optarg, &tmp, 0);
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
commit f66e6ce4446738c2c7f43d41988a3eb73347e2f5
|
||||
Author: Theodore Ts'o <tytso@mit.edu>
|
||||
Date: Sat Aug 9 12:24:54 2014 -0400
|
||||
|
||||
libext2fs: avoid buffer overflow if s_first_meta_bg is too big
|
||||
|
||||
If s_first_meta_bg is greater than the of number block group
|
||||
descriptor blocks, then reading or writing the block group descriptors
|
||||
will end up overruning the memory buffer allocated for the
|
||||
descriptors. Fix this by limiting first_meta_bg to no more than
|
||||
fs->desc_blocks. This doesn't correct the bad s_first_meta_bg value,
|
||||
but it avoids causing the e2fsprogs userspace programs from
|
||||
potentially crashing.
|
||||
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
|
||||
Index: e2fsprogs-1.42.9/lib/ext2fs/closefs.c
|
||||
===================================================================
|
||||
--- e2fsprogs-1.42.9.orig/lib/ext2fs/closefs.c
|
||||
+++ e2fsprogs-1.42.9/lib/ext2fs/closefs.c
|
||||
@@ -336,9 +336,11 @@ errcode_t ext2fs_flush2(ext2_filsys fs,
|
||||
* superblocks and group descriptors.
|
||||
*/
|
||||
group_ptr = (char *) group_shadow;
|
||||
- if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
|
||||
+ if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) {
|
||||
old_desc_blocks = fs->super->s_first_meta_bg;
|
||||
- else
|
||||
+ if (old_desc_blocks > fs->super->s_first_meta_bg)
|
||||
+ old_desc_blocks = fs->desc_blocks;
|
||||
+ } else
|
||||
old_desc_blocks = fs->desc_blocks;
|
||||
|
||||
ext2fs_numeric_progress_init(fs, &progress, NULL,
|
||||
Index: e2fsprogs-1.42.9/lib/ext2fs/openfs.c
|
||||
===================================================================
|
||||
--- e2fsprogs-1.42.9.orig/lib/ext2fs/openfs.c
|
||||
+++ e2fsprogs-1.42.9/lib/ext2fs/openfs.c
|
||||
@@ -348,9 +348,11 @@ errcode_t ext2fs_open2(const char *name,
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
groups_per_block = EXT2_DESC_PER_BLOCK(fs->super);
|
||||
#endif
|
||||
- if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
|
||||
+ if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) {
|
||||
first_meta_bg = fs->super->s_first_meta_bg;
|
||||
- else
|
||||
+ if (first_meta_bg > fs->desc_blocks)
|
||||
+ first_meta_bg = fs->desc_blocks;
|
||||
+ } else
|
||||
first_meta_bg = fs->desc_blocks;
|
||||
if (first_meta_bg) {
|
||||
retval = io_channel_read_blk(fs->io, group_block+1,
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
commit 49d0fe2a14f2a23da2fe299643379b8c1d37df73
|
||||
Author: Theodore Ts'o <tytso@mit.edu>
|
||||
Date: Fri Feb 6 12:46:39 2015 -0500
|
||||
|
||||
libext2fs: fix potential buffer overflow in closefs()
|
||||
|
||||
The bug fix in f66e6ce4446: "libext2fs: avoid buffer overflow if
|
||||
s_first_meta_bg is too big" had a typo in the fix for
|
||||
ext2fs_closefs(). In practice most of the security exposure was from
|
||||
the openfs path, since this meant if there was a carefully crafted
|
||||
file system, buffer overrun would be triggered when the file system was
|
||||
opened.
|
||||
|
||||
However, if corrupted file system didn't trip over some corruption
|
||||
check, and then the file system was modified via tune2fs or debugfs,
|
||||
such that the superblock was marked dirty and then written out via the
|
||||
closefs() path, it's possible that the buffer overrun could be
|
||||
triggered when the file system is closed.
|
||||
|
||||
Also clear up a signed vs unsigned warning while we're at it.
|
||||
|
||||
Thanks to Nick Kralevich <nnk@google.com> for asking me to look at
|
||||
compiler warning in the code in question, which led me to notice the
|
||||
bug in f66e6ce4446.
|
||||
|
||||
Addresses: CVE-2015-1572
|
||||
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
|
||||
Index: e2fsprogs-1.42.9/lib/ext2fs/closefs.c
|
||||
===================================================================
|
||||
--- e2fsprogs-1.42.9.orig/lib/ext2fs/closefs.c
|
||||
+++ e2fsprogs-1.42.9/lib/ext2fs/closefs.c
|
||||
@@ -279,7 +279,7 @@ errcode_t ext2fs_flush2(ext2_filsys fs,
|
||||
dgrp_t j;
|
||||
#endif
|
||||
char *group_ptr;
|
||||
- int old_desc_blocks;
|
||||
+ blk64_t old_desc_blocks;
|
||||
struct ext2fs_numeric_progress_struct progress;
|
||||
|
||||
EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
|
||||
@@ -338,7 +338,7 @@ errcode_t ext2fs_flush2(ext2_filsys fs,
|
||||
group_ptr = (char *) group_shadow;
|
||||
if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) {
|
||||
old_desc_blocks = fs->super->s_first_meta_bg;
|
||||
- if (old_desc_blocks > fs->super->s_first_meta_bg)
|
||||
+ if (old_desc_blocks > fs->desc_blocks)
|
||||
old_desc_blocks = fs->desc_blocks;
|
||||
} else
|
||||
old_desc_blocks = fs->desc_blocks;
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
From 35da59eaf201d5935d7047657355f129f3791d9a Mon Sep 17 00:00:00 2001
|
||||
From: "Darrick J. Wong" <darrick.wong@oracle.com>
|
||||
Date: Sat, 11 Jan 2014 13:54:57 -0500
|
||||
Subject: [PATCH 1/2] libext2fs: detect correct superblock adjustments when
|
||||
loading backup groups
|
||||
|
||||
If ext2fs_descriptor_block_loc2() is called with a meta_bg filesystem
|
||||
and group_block is not the normal value, the function will return the
|
||||
location of the backup group descriptor block in the next block group.
|
||||
Unfortunately, it fails to account for the possibility that the backup
|
||||
group contains a backup superblock but the regular superblock does
|
||||
not. This is the case with block groups 48-49 on a meta_bg fs with 1k
|
||||
blocks; in this case, libext2fs will fail to open the filesystem.
|
||||
|
||||
Therefore, teach the function to adjust for superblocks in the backup
|
||||
group, if necessary.
|
||||
|
||||
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
lib/ext2fs/openfs.c | 19 +++++++++++++++----
|
||||
1 file changed, 15 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/lib/ext2fs/openfs.c b/lib/ext2fs/openfs.c
|
||||
index 2c6e10e..b27bf19 100644
|
||||
--- a/lib/ext2fs/openfs.c
|
||||
+++ b/lib/ext2fs/openfs.c
|
||||
@@ -47,7 +47,7 @@ blk64_t ext2fs_descriptor_block_loc2(ext2_filsys fs, blk64_t group_block,
|
||||
bg = EXT2_DESC_PER_BLOCK(fs->super) * i;
|
||||
if (ext2fs_bg_has_super(fs, bg))
|
||||
has_super = 1;
|
||||
- ret_blk = ext2fs_group_first_block2(fs, bg) + has_super;
|
||||
+ ret_blk = ext2fs_group_first_block2(fs, bg);
|
||||
/*
|
||||
* If group_block is not the normal value, we're trying to use
|
||||
* the backup group descriptors and superblock --- so use the
|
||||
@@ -57,10 +57,21 @@ blk64_t ext2fs_descriptor_block_loc2(ext2_filsys fs, blk64_t group_block,
|
||||
* have the infrastructure in place to do that.
|
||||
*/
|
||||
if (group_block != fs->super->s_first_data_block &&
|
||||
- ((ret_blk + fs->super->s_blocks_per_group) <
|
||||
- ext2fs_blocks_count(fs->super)))
|
||||
+ ((ret_blk + has_super + fs->super->s_blocks_per_group) <
|
||||
+ ext2fs_blocks_count(fs->super))) {
|
||||
ret_blk += fs->super->s_blocks_per_group;
|
||||
- return ret_blk;
|
||||
+
|
||||
+ /*
|
||||
+ * If we're going to jump forward a block group, make sure
|
||||
+ * that we adjust has_super to account for the next group's
|
||||
+ * backup superblock (or lack thereof).
|
||||
+ */
|
||||
+ if (ext2fs_bg_has_super(fs, bg + 1))
|
||||
+ has_super = 1;
|
||||
+ else
|
||||
+ has_super = 0;
|
||||
+ }
|
||||
+ return ret_blk + has_super;
|
||||
}
|
||||
|
||||
blk_t ext2fs_descriptor_block_loc(ext2_filsys fs, blk_t group_block, dgrp_t i)
|
||||
--
|
||||
2.17.1
|
||||
|
|
@ -0,0 +1,119 @@
|
|||
From 9a7df1b3a2d139ed930ff9ed606b804e71df1cce Mon Sep 17 00:00:00 2001
|
||||
From: "Darrick J. Wong" <darrick.wong@oracle.com>
|
||||
Date: Sat, 11 Jan 2014 13:58:15 -0500
|
||||
Subject: [PATCH 2/2] libext2fs: don't always read backup group descriptors on
|
||||
a 1k-block meta_bg fs
|
||||
|
||||
On a filesystem with 1K blocks and meta_bg enabled, opening a
|
||||
filesystem with automatic superblock detection tries to compensate for
|
||||
the fact that the superblock lives in block 1. However, the method by
|
||||
which this is done is later misinterpreted to mean "read the backup
|
||||
group descriptors", which is not what we want in this case.
|
||||
|
||||
Therefore, in ext2fs_open3() separate the 'group zero' adjustment into
|
||||
its own variable so that we don't get fed backup group descriptors
|
||||
when we try to load meta_bg group descriptors.
|
||||
|
||||
Furthermore, enhance ext2fs_descriptor_block_loc2() to perform its own
|
||||
group zero correction. The other caller of this function neglects to
|
||||
do any group-zero correction of their own, so this fixes them too.
|
||||
|
||||
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
lib/ext2fs/ext2fs.h | 5 +++++
|
||||
lib/ext2fs/openfs.c | 30 +++++++++++++++++++++++++-----
|
||||
2 files changed, 30 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
|
||||
index cb03ecf..380608b 100644
|
||||
--- a/lib/ext2fs/ext2fs.h
|
||||
+++ b/lib/ext2fs/ext2fs.h
|
||||
@@ -1376,6 +1376,11 @@ extern errcode_t ext2fs_open2(const char *name, const char *io_options,
|
||||
int flags, int superblock,
|
||||
unsigned int block_size, io_manager manager,
|
||||
ext2_filsys *ret_fs);
|
||||
+/*
|
||||
+ * The dgrp_t argument to these two functions is not actually a group number
|
||||
+ * but a block number offset within a group table! Convert with the formula
|
||||
+ * (group_number / groups_per_block).
|
||||
+ */
|
||||
extern blk64_t ext2fs_descriptor_block_loc2(ext2_filsys fs,
|
||||
blk64_t group_block, dgrp_t i);
|
||||
extern blk_t ext2fs_descriptor_block_loc(ext2_filsys fs, blk_t group_block,
|
||||
diff --git a/lib/ext2fs/openfs.c b/lib/ext2fs/openfs.c
|
||||
index b27bf19..ba501e6 100644
|
||||
--- a/lib/ext2fs/openfs.c
|
||||
+++ b/lib/ext2fs/openfs.c
|
||||
@@ -37,12 +37,19 @@ blk64_t ext2fs_descriptor_block_loc2(ext2_filsys fs, blk64_t group_block,
|
||||
dgrp_t i)
|
||||
{
|
||||
int bg;
|
||||
- int has_super = 0;
|
||||
+ int has_super = 0, group_zero_adjust = 0;
|
||||
blk64_t ret_blk;
|
||||
|
||||
+ /*
|
||||
+ * On a bigalloc FS with 1K blocks, block 0 is reserved for non-ext4
|
||||
+ * stuff, so adjust for that if we're being asked for group 0.
|
||||
+ */
|
||||
+ if (i == 0 && fs->blocksize == 1024 && EXT2FS_CLUSTER_RATIO(fs) > 1)
|
||||
+ group_zero_adjust = 1;
|
||||
+
|
||||
if (!(fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) ||
|
||||
(i < fs->super->s_first_meta_bg))
|
||||
- return (group_block + i + 1);
|
||||
+ return group_block + i + 1 + group_zero_adjust;
|
||||
|
||||
bg = EXT2_DESC_PER_BLOCK(fs->super) * i;
|
||||
if (ext2fs_bg_has_super(fs, bg))
|
||||
@@ -71,7 +78,7 @@ blk64_t ext2fs_descriptor_block_loc2(ext2_filsys fs, blk64_t group_block,
|
||||
else
|
||||
has_super = 0;
|
||||
}
|
||||
- return ret_blk + has_super;
|
||||
+ return ret_blk + has_super + group_zero_adjust;
|
||||
}
|
||||
|
||||
blk_t ext2fs_descriptor_block_loc(ext2_filsys fs, blk_t group_block, dgrp_t i)
|
||||
@@ -113,6 +120,7 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
|
||||
unsigned int blocks_per_group, io_flags;
|
||||
blk64_t group_block, blk;
|
||||
char *dest, *cp;
|
||||
+ int group_zero_adjust = 0;
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
unsigned int groups_per_block;
|
||||
struct ext2_group_desc *gdp;
|
||||
@@ -353,8 +361,19 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
|
||||
goto cleanup;
|
||||
if (!group_block)
|
||||
group_block = fs->super->s_first_data_block;
|
||||
+ /*
|
||||
+ * On a FS with a 1K blocksize, block 0 is reserved for bootloaders
|
||||
+ * so we must increment block numbers to any group 0 items.
|
||||
+ *
|
||||
+ * However, we cannot touch group_block directly because in the meta_bg
|
||||
+ * case, the ext2fs_descriptor_block_loc2() function will interpret
|
||||
+ * group_block != s_first_data_block to mean that we want to access the
|
||||
+ * backup group descriptors. This is not what we want if the caller
|
||||
+ * set superblock == 0 (i.e. auto-detect the superblock), which is
|
||||
+ * what's going on here.
|
||||
+ */
|
||||
if (group_block == 0 && fs->blocksize == 1024)
|
||||
- group_block = 1; /* Deal with 1024 blocksize && bigalloc */
|
||||
+ group_zero_adjust = 1;
|
||||
dest = (char *) fs->group_desc;
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
groups_per_block = EXT2_DESC_PER_BLOCK(fs->super);
|
||||
@@ -366,7 +385,8 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
|
||||
} else
|
||||
first_meta_bg = fs->desc_blocks;
|
||||
if (first_meta_bg) {
|
||||
- retval = io_channel_read_blk(fs->io, group_block+1,
|
||||
+ retval = io_channel_read_blk(fs->io, group_block +
|
||||
+ group_zero_adjust + 1,
|
||||
first_meta_bg, dest);
|
||||
if (retval)
|
||||
goto cleanup;
|
||||
--
|
||||
2.17.1
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
From 604a29de2a70e97264e169957a224412868ca64a Mon Sep 17 00:00:00 2001
|
||||
From: "Darrick J. Wong" <darrick.wong@oracle.com>
|
||||
Date: Thu, 6 Feb 2014 15:24:01 -0500
|
||||
Subject: [PATCH 1/8] mke2fs: clean up kernel version tests
|
||||
|
||||
Refactor the running kernel version checks to hide the details of
|
||||
version code checking, etc.
|
||||
|
||||
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
|
||||
Reviewed-by: Zheng Liu <wenqing.lz@taobao.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
misc/mke2fs.c | 40 ++++++++++++++++++++++++++--------------
|
||||
1 file changed, 26 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/misc/mke2fs.c b/misc/mke2fs.c
|
||||
index 2e8ba60..2afcb05 100644
|
||||
--- a/misc/mke2fs.c
|
||||
+++ b/misc/mke2fs.c
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <time.h>
|
||||
#ifdef __linux__
|
||||
#include <sys/utsname.h>
|
||||
+#include <linux/version.h>
|
||||
#endif
|
||||
#ifdef HAVE_GETOPT_H
|
||||
#include <getopt.h>
|
||||
@@ -168,7 +169,29 @@ static int parse_version_number(const char *s)
|
||||
rev = strtol(cp, &endptr, 10);
|
||||
if (cp == endptr)
|
||||
return 0;
|
||||
- return ((((major * 256) + minor) * 256) + rev);
|
||||
+ return KERNEL_VERSION(major, minor, rev);
|
||||
+}
|
||||
+
|
||||
+static int is_before_linux_ver(unsigned int major, unsigned int minor)
|
||||
+{
|
||||
+ struct utsname ut;
|
||||
+ static int linux_version_code = -1;
|
||||
+
|
||||
+ if (uname(&ut)) {
|
||||
+ perror("uname");
|
||||
+ exit(1);
|
||||
+ }
|
||||
+ if (linux_version_code < 0)
|
||||
+ linux_version_code = parse_version_number(ut.release);
|
||||
+ if (linux_version_code == 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ return linux_version_code < KERNEL_VERSION(major, minor, 0);
|
||||
+}
|
||||
+#else
|
||||
+static int is_before_linux_ver(unsigned int major, unsigned int minor)
|
||||
+{
|
||||
+ return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1306,9 +1329,6 @@ static void PRS(int argc, char *argv[])
|
||||
* Finally, we complain about fs_blocks_count > 2^32 on a non-64bit fs.
|
||||
*/
|
||||
blk64_t fs_blocks_count = 0;
|
||||
-#ifdef __linux__
|
||||
- struct utsname ut;
|
||||
-#endif
|
||||
long sysval;
|
||||
int s_opt = -1, r_opt = -1;
|
||||
char *fs_features = 0;
|
||||
@@ -1374,15 +1394,8 @@ profile_error:
|
||||
memset(&fs_param, 0, sizeof(struct ext2_super_block));
|
||||
fs_param.s_rev_level = 1; /* Create revision 1 filesystems now */
|
||||
|
||||
-#ifdef __linux__
|
||||
- if (uname(&ut)) {
|
||||
- perror("uname");
|
||||
- exit(1);
|
||||
- }
|
||||
- linux_version_code = parse_version_number(ut.release);
|
||||
- if (linux_version_code && linux_version_code < (2*65536 + 2*256))
|
||||
+ if (is_before_linux_ver(2, 2))
|
||||
fs_param.s_rev_level = 0;
|
||||
-#endif
|
||||
|
||||
if (argc && *argv) {
|
||||
program_name = get_progname(*argv);
|
||||
@@ -1790,8 +1803,7 @@ profile_error:
|
||||
|
||||
if (use_bsize == -1) {
|
||||
use_bsize = sys_page_size;
|
||||
- if ((linux_version_code < (2*65536 + 6*256)) &&
|
||||
- (use_bsize > 4096))
|
||||
+ if (is_before_linux_ver(2, 6) && use_bsize > 4096)
|
||||
use_bsize = 4096;
|
||||
}
|
||||
if (lsector_size && use_bsize < lsector_size)
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
commit 4b59352edb5ce783ba578d708de1fda981acfec6
|
||||
Author: Frank Sorenson <fsorenso@redhat.com>
|
||||
Date: Fri Jul 4 15:31:50 2014 -0400
|
||||
|
||||
mke2fs: prevent creation of filesystem with unsupported revision
|
||||
|
||||
It's a bit strange to accept revision levels higher than
|
||||
the code creating the filesystem can understand, so don't
|
||||
allow it.
|
||||
|
||||
At least the kernel will mount the fs readonly if it's too
|
||||
high, but no other utility will touch it, so you can't
|
||||
fix the error.
|
||||
|
||||
Just reject anything > EXT2_MAX_SUPP_REV at mkfs time.
|
||||
|
||||
Signed-off-by: Frank Sorenson <fsorenso@redhat.com>
|
||||
[sandeen@redhat.com: Add more verbose commit log]
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
|
||||
Index: e2fsprogs-1.42.9/misc/mke2fs.c
|
||||
===================================================================
|
||||
--- e2fsprogs-1.42.9.orig/misc/mke2fs.c
|
||||
+++ e2fsprogs-1.42.9/misc/mke2fs.c
|
||||
@@ -1570,6 +1570,11 @@ profile_error:
|
||||
_("bad revision level - %s"), optarg);
|
||||
exit(1);
|
||||
}
|
||||
+ if (r_opt > EXT2_MAX_SUPP_REV) {
|
||||
+ com_err(program_name, EXT2_ET_REV_TOO_HIGH,
|
||||
+ _("while trying to create revision %d"), r_opt);
|
||||
+ exit(1);
|
||||
+ }
|
||||
fs_param.s_rev_level = r_opt;
|
||||
break;
|
||||
case 's': /* deprecated */
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
Index: e2fsprogs-1.42.9/lib/ext2fs/Makefile.in
|
||||
===================================================================
|
||||
--- e2fsprogs-1.42.9.orig/lib/ext2fs/Makefile.in
|
||||
+++ e2fsprogs-1.42.9/lib/ext2fs/Makefile.in
|
||||
@@ -197,6 +197,10 @@ BSDLIB_INSTALL_DIR = $(root_libdir)
|
||||
|
||||
all:: ext2fs.pc
|
||||
|
||||
+ifdef PPC_NO_ALTIVEC
|
||||
+ALL_CFLAGS += -mno-altivec -mno-vsx
|
||||
+endif
|
||||
+
|
||||
.c.o:
|
||||
$(E) " CC $<"
|
||||
$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
commit f3745728bc254892da4c569ba3fd8801895f3524
|
||||
Author: Eric Sandeen <sandeen@redhat.com>
|
||||
Date: Sun Mar 6 21:51:23 2016 -0500
|
||||
|
||||
resize2fs: clear uninit BG if allocating from new group
|
||||
|
||||
If resize2fs_get_alloc_block() allocates from a BLOCK_UNINIT group, we
|
||||
need to make sure that the UNINIT flag is cleared on both file system
|
||||
structures which are maintained by resize2fs. This causes the
|
||||
modified bitmaps to not get written out, which leads to post-resize2fs
|
||||
e2fsck errors; used blocks in UNINIT groups, not marked in the block
|
||||
bitmap. This was seen on r_ext4_small_bg.
|
||||
|
||||
This patch uses clear_block_uninit() to clear the flag,
|
||||
and my problem goes away.
|
||||
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
|
||||
Reviewed-by: Andreas Dilger <adilger@dilger.ca>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
|
||||
Index: e2fsprogs-1.42.9/lib/ext2fs/alloc.c
|
||||
===================================================================
|
||||
--- e2fsprogs-1.42.9.orig/lib/ext2fs/alloc.c
|
||||
+++ e2fsprogs-1.42.9/lib/ext2fs/alloc.c
|
||||
@@ -27,6 +27,22 @@
|
||||
#include "ext2fs.h"
|
||||
|
||||
/*
|
||||
+ * Clear the uninit block bitmap flag if necessary
|
||||
+ */
|
||||
+void ext2fs_clear_block_uninit(ext2_filsys fs, dgrp_t group)
|
||||
+{
|
||||
+ if (!(ext2fs_bg_flags_test(fs, group, EXT2_BG_BLOCK_UNINIT)))
|
||||
+ return;
|
||||
+
|
||||
+ /* uninit block bitmaps are now initialized in read_bitmaps() */
|
||||
+
|
||||
+ ext2fs_bg_flags_clear(fs, group, EXT2_BG_BLOCK_UNINIT);
|
||||
+ ext2fs_group_desc_csum_set(fs, group);
|
||||
+ ext2fs_mark_super_dirty(fs);
|
||||
+ ext2fs_mark_bb_dirty(fs);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* Check for uninit block bitmaps and deal with them appropriately
|
||||
*/
|
||||
static void check_block_uninit(ext2_filsys fs, ext2fs_block_bitmap map,
|
||||
Index: e2fsprogs-1.42.9/lib/ext2fs/ext2fs.h
|
||||
===================================================================
|
||||
--- e2fsprogs-1.42.9.orig/lib/ext2fs/ext2fs.h
|
||||
+++ e2fsprogs-1.42.9/lib/ext2fs/ext2fs.h
|
||||
@@ -639,6 +639,7 @@ static inline int ext2fs_needs_large_fil
|
||||
}
|
||||
|
||||
/* alloc.c */
|
||||
+extern void ext2fs_clear_block_uninit(ext2_filsys fs, dgrp_t group);
|
||||
extern errcode_t ext2fs_new_inode(ext2_filsys fs, ext2_ino_t dir, int mode,
|
||||
ext2fs_inode_bitmap map, ext2_ino_t *ret);
|
||||
extern errcode_t ext2fs_new_block(ext2_filsys fs, blk_t goal,
|
||||
Index: e2fsprogs-1.42.9/resize/resize2fs.c
|
||||
===================================================================
|
||||
--- e2fsprogs-1.42.9.orig/resize/resize2fs.c
|
||||
+++ e2fsprogs-1.42.9/resize/resize2fs.c
|
||||
@@ -1196,6 +1196,7 @@ static errcode_t resize2fs_get_alloc_blo
|
||||
{
|
||||
ext2_resize_t rfs = (ext2_resize_t) fs->priv_data;
|
||||
blk64_t blk;
|
||||
+ int group;
|
||||
|
||||
blk = get_new_block(rfs);
|
||||
if (!blk)
|
||||
@@ -1208,6 +1209,12 @@ static errcode_t resize2fs_get_alloc_blo
|
||||
|
||||
ext2fs_mark_block_bitmap2(rfs->old_fs->block_map, blk);
|
||||
ext2fs_mark_block_bitmap2(rfs->new_fs->block_map, blk);
|
||||
+
|
||||
+ group = ext2fs_group_of_blk2(rfs->old_fs, blk);
|
||||
+ ext2fs_clear_block_uninit(rfs->old_fs, group);
|
||||
+ group = ext2fs_group_of_blk2(rfs->new_fs, blk);
|
||||
+ ext2fs_clear_block_uninit(rfs->new_fs, group);
|
||||
+
|
||||
*ret = (blk64_t) blk;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
commit 7d7a8fe4ea4d9162977a1a6b32c4737d9ca9dd1f
|
||||
Author: Eric Sandeen <sandeen@redhat.com>
|
||||
Date: Mon Jun 9 09:52:19 2014 -0400
|
||||
|
||||
resize2fs: don't attempt to calculate minimum size on fs with errors
|
||||
|
||||
My old patch:
|
||||
|
||||
resize2fs: don't print minimum size if fs is not clean
|
||||
|
||||
almost did this, but it still calculated the size; it just didn't print
|
||||
it. Which is a bit silly.
|
||||
|
||||
Jes had a pretty badly corrupted image which made the minimum size
|
||||
calculation go off into the weeds. It was corrupted, and also marked
|
||||
as having an error.
|
||||
|
||||
We'll eventually bail out for an unmounted filesystem if it's marked
|
||||
as being in an error state anyway; just move that test & bail-out
|
||||
to a much earlier point, and remove the now-duplicate one under the
|
||||
print_min_size block.
|
||||
|
||||
This will catch & block all resize operations on an offline filesystem
|
||||
with errors, in one central place.
|
||||
|
||||
Reported-by: Jes Sorensen <Jes.Sorensen@redhat.com>
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
|
||||
diff --git a/resize/main.c b/resize/main.c
|
||||
index 2b7abff..e65c8e4 100644
|
||||
--- a/resize/main.c
|
||||
+++ b/resize/main.c
|
||||
@@ -319,6 +319,17 @@ int main (int argc, char ** argv)
|
||||
exit (1);
|
||||
}
|
||||
|
||||
+ if (!(mount_flags & EXT2_MF_MOUNTED)) {
|
||||
+ if (!force && ((fs->super->s_lastcheck < fs->super->s_mtime) ||
|
||||
+ (fs->super->s_state & EXT2_ERROR_FS) ||
|
||||
+ ((fs->super->s_state & EXT2_VALID_FS) == 0))) {
|
||||
+ fprintf(stderr,
|
||||
+ _("Please run 'e2fsck -f %s' first.\n\n"),
|
||||
+ device_name);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* Check for compatibility with the feature sets. We need to
|
||||
* be more stringent than ext2fs_open().
|
||||
@@ -332,13 +343,6 @@ int main (int argc, char ** argv)
|
||||
min_size = calculate_minimum_resize_size(fs, flags);
|
||||
|
||||
if (print_min_size) {
|
||||
- if (!force && ((fs->super->s_state & EXT2_ERROR_FS) ||
|
||||
- ((fs->super->s_state & EXT2_VALID_FS) == 0))) {
|
||||
- fprintf(stderr,
|
||||
- _("Please run 'e2fsck -f %s' first.\n\n"),
|
||||
- device_name);
|
||||
- exit(1);
|
||||
- }
|
||||
printf(_("Estimated minimum size of the filesystem: %llu\n"),
|
||||
min_size);
|
||||
exit(0);
|
||||
@@ -444,14 +448,6 @@ int main (int argc, char ** argv)
|
||||
bigalloc_check(fs, force);
|
||||
retval = online_resize_fs(fs, mtpt, &new_size, flags);
|
||||
} else {
|
||||
- if (!force && ((fs->super->s_lastcheck < fs->super->s_mtime) ||
|
||||
- (fs->super->s_state & EXT2_ERROR_FS) ||
|
||||
- ((fs->super->s_state & EXT2_VALID_FS) == 0))) {
|
||||
- fprintf(stderr,
|
||||
- _("Please run 'e2fsck -f %s' first.\n\n"),
|
||||
- device_name);
|
||||
- exit(1);
|
||||
- }
|
||||
bigalloc_check(fs, force);
|
||||
printf(_("Resizing the filesystem on "
|
||||
"%s to %llu (%dk) blocks.\n"),
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
From 68ef8adcff3acc25ddac82b808c3036b4dddaf0b Mon Sep 17 00:00:00 2001
|
||||
From: Lukas Czerner <lczerner@redhat.com>
|
||||
Date: Thu, 20 Feb 2014 14:14:39 +0100
|
||||
Subject: [PATCH 8/8] e2fsprogs: Set pointer to NULL after ext2fs_free
|
||||
|
||||
ext2fs_free() does not set the ext2_filsys pointer to null so the caller
|
||||
is responsible to setting it himself if it is needed.
|
||||
|
||||
This patch fixes some places where caller did not set ext2_filsys
|
||||
pointer to NULL after ext2fs_free() which might result in use after
|
||||
free. Fix it.
|
||||
|
||||
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
|
||||
---
|
||||
lib/ext2fs/openfs.c | 7 ++++---
|
||||
resize/resize2fs.c | 5 ++++-
|
||||
2 files changed, 8 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/lib/ext2fs/openfs.c b/lib/ext2fs/openfs.c
|
||||
index 4cdbde1..ef67493 100644
|
||||
--- a/lib/ext2fs/openfs.c
|
||||
+++ b/lib/ext2fs/openfs.c
|
||||
@@ -419,10 +419,11 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
|
||||
|
||||
return 0;
|
||||
cleanup:
|
||||
- if (flags & EXT2_FLAG_NOFREE_ON_ERROR)
|
||||
- *ret_fs = fs;
|
||||
- else
|
||||
+ if (!(flags & EXT2_FLAG_NOFREE_ON_ERROR)) {
|
||||
ext2fs_free(fs);
|
||||
+ fs = NULL;
|
||||
+ }
|
||||
+ *ret_fs = fs;
|
||||
return retval;
|
||||
}
|
||||
|
||||
diff --git a/resize/resize2fs.c b/resize/resize2fs.c
|
||||
index 6b32bbf..a1fdefa 100644
|
||||
--- a/resize/resize2fs.c
|
||||
+++ b/resize/resize2fs.c
|
||||
@@ -202,6 +202,7 @@ errcode_t resize_fs(ext2_filsys fs, blk64_t *new_size, int flags,
|
||||
rfs->flags = flags;
|
||||
|
||||
ext2fs_free(rfs->old_fs);
|
||||
+ rfs->old_fs = NULL;
|
||||
if (rfs->itable_buf)
|
||||
ext2fs_free_mem(&rfs->itable_buf);
|
||||
if (rfs->reserve_blocks)
|
||||
@@ -213,8 +214,10 @@ errcode_t resize_fs(ext2_filsys fs, blk64_t *new_size, int flags,
|
||||
return 0;
|
||||
|
||||
errout:
|
||||
- if (rfs->new_fs)
|
||||
+ if (rfs->new_fs) {
|
||||
ext2fs_free(rfs->new_fs);
|
||||
+ rfs->new_fs = NULL;
|
||||
+ }
|
||||
if (rfs->itable_buf)
|
||||
ext2fs_free_mem(&rfs->itable_buf);
|
||||
ext2fs_free_mem(&rfs);
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
From 2ded6409b3a22e68c19236153f0456e1c079d0da Mon Sep 17 00:00:00 2001
|
||||
From: Eric Sandeen <sandeen@redhat.com>
|
||||
Date: Tue, 20 Dec 2016 09:23:29 -0600
|
||||
Subject: [PATCH] libext2fs: don't ignore fsync errors
|
||||
|
||||
Today, if mke2fs experiences IO errors (say, on a thin device
|
||||
which filled up during mkfs), mke2fs is silent and returns
|
||||
success even though the filesystem was not properly created.
|
||||
|
||||
Catch errors from the io_channel_flush() callchain to
|
||||
fix this up. Fix formatting of the printed error as
|
||||
well:
|
||||
|
||||
...
|
||||
Creating journal (262144 blocks): done
|
||||
Writing superblocks and filesystem accounting information:
|
||||
Warning, had trouble writing out superblocks.
|
||||
# echo $?
|
||||
5
|
||||
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
lib/ext2fs/closefs.c | 10 ++++++++--
|
||||
lib/ext2fs/unix_io.c | 3 ++-
|
||||
misc/mke2fs.c | 2 +-
|
||||
3 files changed, 11 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/lib/ext2fs/closefs.c b/lib/ext2fs/closefs.c
|
||||
index a73c53f..000ebd8 100644
|
||||
--- a/lib/ext2fs/closefs.c
|
||||
+++ b/lib/ext2fs/closefs.c
|
||||
@@ -410,16 +410,22 @@ write_primary_superblock_only:
|
||||
ext2fs_swap_super(super_shadow);
|
||||
#endif
|
||||
|
||||
- if (!(flags & EXT2_FLAG_FLUSH_NO_SYNC))
|
||||
+ if (!(flags & EXT2_FLAG_FLUSH_NO_SYNC)) {
|
||||
retval = io_channel_flush(fs->io);
|
||||
+ if (retval)
|
||||
+ goto errout;
|
||||
+ }
|
||||
retval = write_primary_superblock(fs, super_shadow);
|
||||
if (retval)
|
||||
goto errout;
|
||||
|
||||
fs->flags &= ~EXT2_FLAG_DIRTY;
|
||||
|
||||
- if (!(flags & EXT2_FLAG_FLUSH_NO_SYNC))
|
||||
+ if (!(flags & EXT2_FLAG_FLUSH_NO_SYNC)) {
|
||||
retval = io_channel_flush(fs->io);
|
||||
+ if (retval)
|
||||
+ goto errout;
|
||||
+ }
|
||||
errout:
|
||||
fs->super->s_state = fs_state;
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
diff --git a/lib/ext2fs/unix_io.c b/lib/ext2fs/unix_io.c
|
||||
index 19be630..a2069f0 100644
|
||||
--- a/lib/ext2fs/unix_io.c
|
||||
+++ b/lib/ext2fs/unix_io.c
|
||||
@@ -885,7 +885,8 @@ static errcode_t unix_flush(io_channel channel)
|
||||
#ifndef NO_IO_CACHE
|
||||
retval = flush_cached_blocks(channel, data, 0);
|
||||
#endif
|
||||
- fsync(data->dev);
|
||||
+ if (!retval && fsync(data->dev) != 0)
|
||||
+ return errno;
|
||||
return retval;
|
||||
}
|
||||
|
||||
diff --git a/misc/mke2fs.c b/misc/mke2fs.c
|
||||
index 3e3ef95..8952a5f 100644
|
||||
--- a/misc/mke2fs.c
|
||||
+++ b/misc/mke2fs.c
|
||||
@@ -2764,7 +2764,7 @@ no_journal:
|
||||
retval = ext2fs_close(fs);
|
||||
if (retval) {
|
||||
fprintf(stderr, "%s",
|
||||
- _("\nWarning, had trouble writing out superblocks."));
|
||||
+ _("\nWarning, had trouble writing out superblocks.\n"));
|
||||
} else if (!quiet) {
|
||||
printf("%s", _("done\n\n"));
|
||||
if (!getenv("MKE2FS_SKIP_CHECK_MSG"))
|
||||
--
|
||||
2.7.4
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
From 2f121a201133bf6b8efeda5d898c938d12bd6f65 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Sandeen <sandeen@redhat.com>
|
||||
Date: Sun, 23 Jul 2017 18:34:57 -0400
|
||||
Subject: [PATCH] tune2fs: edit dire warning about check intervals
|
||||
|
||||
Time & mount-count based checks have been off by default for quite some
|
||||
time now, but the dire warning about disabling them remains in the
|
||||
tune2fs manpage, which is confusing. We did "strongly consider
|
||||
the consequences" and disabled it by default, no need to scare the
|
||||
user about it now. Inform the user of the consequences in a more
|
||||
measured tone.
|
||||
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Reviewed-by: Andreas Dilger <adilger@dilger.ca>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
misc/tune2fs.8.in | 15 ++++++---------
|
||||
1 file changed, 6 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/misc/tune2fs.8.in b/misc/tune2fs.8.in
|
||||
index e07da28..8949f64 100644
|
||||
--- a/misc/tune2fs.8.in
|
||||
+++ b/misc/tune2fs.8.in
|
||||
@@ -122,7 +122,9 @@ Staggering the mount-counts at which filesystems are forcibly
|
||||
checked will avoid all filesystems being checked at one time
|
||||
when using journaled filesystems.
|
||||
.sp
|
||||
-You should strongly consider the consequences of disabling
|
||||
+Mount-count-dependent checking is disabled by default to avoid
|
||||
+unanticipated long reboots while e2fsck does its work. However,
|
||||
+you may wish to consider the consequences of disabling
|
||||
mount-count-dependent checking entirely. Bad disk drives, cables,
|
||||
memory, and kernel bugs could all corrupt a filesystem without
|
||||
marking the filesystem dirty or in error. If you are using
|
||||
@@ -277,15 +279,10 @@ as months, and
|
||||
.B w
|
||||
as weeks. A value of zero will disable the time-dependent checking.
|
||||
.sp
|
||||
-It is strongly recommended that either
|
||||
+There are pros and cons to disabling these periodic checks; see the
|
||||
+discussion under the
|
||||
.B \-c
|
||||
-(mount-count-dependent) or
|
||||
-.B \-i
|
||||
-(time-dependent) checking be enabled to force periodic full
|
||||
-.BR e2fsck (8)
|
||||
-checking of the filesystem. Failure to do so may lead to filesystem
|
||||
-corruption (due to bad disks, cables, memory, or kernel bugs) going
|
||||
-unnoticed, ultimately resulting in data loss or corruption.
|
||||
+(mount-count-dependent check) option for details.
|
||||
.TP
|
||||
.B \-j
|
||||
Add an ext3 journal to the filesystem. If the
|
||||
--
|
||||
2.7.5
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
From 086d0f865d08ec8f723ef6a7feeb8ec8d9f3e9b5 Mon Sep 17 00:00:00 2001
|
||||
From: Lukas Czerner <lczerner@redhat.com>
|
||||
Date: Sat, 14 Oct 2017 10:42:30 -0400
|
||||
Subject: [PATCH] libext2fs: skip start_blk adjustment when stride and flex_bg
|
||||
is set
|
||||
|
||||
Currently some stride optimization is done in
|
||||
ext2fs_allocate_group_table() by adjusting start_blk block where we
|
||||
start allocating block, or inode bitmaps.
|
||||
|
||||
However in flex_bg case this is currently useless since the values are
|
||||
going to be overridden anyway. Moreover in flex_bg case the group might
|
||||
already be full and the stride optimization will fail. As a result file
|
||||
system resize might fail needlessly in some situations.
|
||||
|
||||
It can be shown by this example:
|
||||
|
||||
mke2fs -b 1024 -i 1024 -E stride=8192 -t ext4 /dev/loop0 1024000
|
||||
resize2fs /dev/loop0 102400000
|
||||
resize2fs 1.43.5 (04-Aug-2017)
|
||||
Resizing the filesystem on /dev/loop0 to 102400000 (1k) blocks.
|
||||
./resize/resize2fs: Could not allocate block in ext2 filesystem while trying to resize /dev/loop0
|
||||
Please run 'e2fsck -fy /dev/loop0' to fix the filesystem
|
||||
after the aborted resize operation.
|
||||
|
||||
Fix this by not doing the stride adjustment in case of flex_bg.
|
||||
|
||||
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
lib/ext2fs/alloc_tables.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/ext2fs/alloc_tables.c b/lib/ext2fs/alloc_tables.c
|
||||
index 9f3d4e0..dd6015e 100644
|
||||
--- a/lib/ext2fs/alloc_tables.c
|
||||
+++ b/lib/ext2fs/alloc_tables.c
|
||||
@@ -108,7 +108,7 @@ errcode_t ext2fs_allocate_group_table(ext2_filsys fs, dgrp_t group,
|
||||
/*
|
||||
* Allocate the block and inode bitmaps, if necessary
|
||||
*/
|
||||
- if (fs->stride) {
|
||||
+ if (fs->stride && !flexbg_size) {
|
||||
retval = ext2fs_get_free_blocks2(fs, group_blk, last_blk,
|
||||
1, bmap, &start_blk);
|
||||
if (retval)
|
||||
--
|
||||
2.7.5
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
From 90f0190ac3d2f77a420aaf6ad78b0fb9b93f4698 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Sandeen <sandeen@redhat.com>
|
||||
Date: Mon, 9 Apr 2018 15:28:12 -0400
|
||||
Subject: [PATCH] e2fsck: warn if checkinterval and broken_system_clock both
|
||||
set
|
||||
|
||||
If broken_system_clock is set in e2fsck.conf and this causes
|
||||
the check interval to be ignored, make that clear to the user:
|
||||
|
||||
e2fsck 1.44.1 (24-Mar-2018)
|
||||
/dev/sda1: ignoring check interval, broken_system_clock set
|
||||
/dev/sda1: clean, 11/65536 files, 12955/262144 blocks
|
||||
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
Reviewed-by: Lukas Czerner <lczerner@redhat.com>
|
||||
---
|
||||
e2fsck/unix.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/e2fsck/unix.c b/e2fsck/unix.c
|
||||
index 6f94644..d94d5dc 100644
|
||||
--- a/e2fsck/unix.c
|
||||
+++ b/e2fsck/unix.c
|
||||
@@ -384,7 +384,12 @@ static void check_if_skip(e2fsck_t ctx)
|
||||
if (batt && ((ctx->now - fs->super->s_lastcheck) <
|
||||
fs->super->s_checkinterval*2))
|
||||
reason = 0;
|
||||
+ } else if (broken_system_clock && fs->super->s_checkinterval) {
|
||||
+ log_out(ctx, "%s: ", ctx->device_name);
|
||||
+ log_out(ctx, "%s",
|
||||
+ _("ignoring check interval, broken_system_clock set\n"));
|
||||
}
|
||||
+
|
||||
if (reason) {
|
||||
log_out(ctx, "%s", ctx->device_name);
|
||||
log_out(ctx, reason, reason_arg);
|
||||
--
|
||||
2.17.1
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
/* This file is here to prevent a file conflict on multiarch systems. A
|
||||
* conflict will occur because ext2_types.h has arch-specific definitions.
|
||||
*
|
||||
* DO NOT INCLUDE THE NEW FILE DIRECTLY -- ALWAYS INCLUDE THIS ONE INSTEAD. */
|
||||
|
||||
#if defined(__i386__)
|
||||
#include "ext2_types-i386.h"
|
||||
#elif defined(__powerpc64__)
|
||||
#include "ext2_types-ppc64.h"
|
||||
#elif defined(__powerpc__)
|
||||
#include "ext2_types-ppc.h"
|
||||
#elif defined(__s390x__)
|
||||
#include "ext2_types-s390x.h"
|
||||
#elif defined(__s390__)
|
||||
#include "ext2_types-s390.h"
|
||||
#elif defined(__x86_64__)
|
||||
#include "ext2_types-x86_64.h"
|
||||
#elif defined(__alpha__)
|
||||
#include "ext2_types-alpha.h"
|
||||
#elif defined(__arm__)
|
||||
#include "ext2_types-arm.h"
|
||||
#elif defined(__sparc__) && defined(__arch64__)
|
||||
#include "ext2_types-sparc64.h"
|
||||
#elif defined(__sparc__)
|
||||
#include "ext2_types-sparc.h"
|
||||
#else
|
||||
#error "This e2fsprogs-devel package does not work your architecture?"
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue