forked from rpms/e2fsprogs
import e2fsprogs-1.44.6-3.el8
This commit is contained in:
parent
97bda23e8f
commit
0d4ae6a802
@ -1,2 +1 @@
|
||||
106e3ed9881c28fb01e11a51c86fe87cee6d6a2a SOURCES/e2fsprogs-1.44.3.tar.xz
|
||||
08f13fea79a589439a09fa5815e3dd34ceda9b2e SOURCES/tests-f_resize_inode_meta_bg-image.gz
|
||||
132ecc3dd92b3ac9e488b7c8bbe2e769001856d1 SOURCES/e2fsprogs-1.44.6.tar.xz
|
||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,2 +1 @@
|
||||
SOURCES/e2fsprogs-1.44.3.tar.xz
|
||||
SOURCES/tests-f_resize_inode_meta_bg-image.gz
|
||||
SOURCES/e2fsprogs-1.44.6.tar.xz
|
||||
|
@ -1,78 +0,0 @@
|
||||
From 9a504be9857c0c4e3b56cfbe4257ff88284469c7 Mon Sep 17 00:00:00 2001
|
||||
From: Jaco Kroon <jaco@uls.co.za>
|
||||
Date: Thu, 2 Aug 2018 20:06:46 +0200
|
||||
Subject: [PATCH 02/10] debugfs: fix ncheck so it handles hard links correctly
|
||||
|
||||
Due to hard links inodes can have multiple names (except for folders),
|
||||
ncheck should find all of the names (equal to the number of links to the
|
||||
inodes, directories excepted), not names to the count of the provided
|
||||
inodes.
|
||||
|
||||
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
debugfs/ncheck.c | 17 ++++++++++++-----
|
||||
1 file changed, 12 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/debugfs/ncheck.c b/debugfs/ncheck.c
|
||||
index dc4ab56d..158e8658 100644
|
||||
--- a/debugfs/ncheck.c
|
||||
+++ b/debugfs/ncheck.c
|
||||
@@ -28,7 +28,7 @@ extern char *optarg;
|
||||
struct inode_walk_struct {
|
||||
ext2_ino_t dir;
|
||||
ext2_ino_t *iarray;
|
||||
- int inodes_left;
|
||||
+ int names_left;
|
||||
int num_inodes;
|
||||
int position;
|
||||
char *parent;
|
||||
@@ -81,10 +81,10 @@ static int ncheck_proc(struct ext2_dir_entry *dirent,
|
||||
}
|
||||
}
|
||||
putc('\n', stdout);
|
||||
- iw->inodes_left--;
|
||||
+ iw->names_left--;
|
||||
}
|
||||
}
|
||||
- if (!iw->inodes_left)
|
||||
+ if (!iw->names_left)
|
||||
return DIRENT_ABORT;
|
||||
|
||||
return 0;
|
||||
@@ -131,15 +131,22 @@ void do_ncheck(int argc, char **argv)
|
||||
}
|
||||
memset(iw.iarray, 0, sizeof(ext2_ino_t) * argc);
|
||||
|
||||
+ iw.names_left = 0;
|
||||
for (i=0; i < argc; i++) {
|
||||
iw.iarray[i] = strtol(argv[i], &tmp, 0);
|
||||
if (*tmp) {
|
||||
com_err("ncheck", 0, "Bad inode - %s", argv[i]);
|
||||
goto error_out;
|
||||
}
|
||||
+ if (debugfs_read_inode(iw.iarray[i], &inode, *argv))
|
||||
+ goto error_out;
|
||||
+ if (LINUX_S_ISDIR(inode.i_mode))
|
||||
+ iw.names_left += 1;
|
||||
+ else
|
||||
+ iw.names_left += inode.i_links_count;
|
||||
}
|
||||
|
||||
- iw.num_inodes = iw.inodes_left = argc;
|
||||
+ iw.num_inodes = argc;
|
||||
|
||||
retval = ext2fs_open_inode_scan(current_fs, 0, &scan);
|
||||
if (retval) {
|
||||
@@ -183,7 +190,7 @@ void do_ncheck(int argc, char **argv)
|
||||
goto next;
|
||||
}
|
||||
|
||||
- if (iw.inodes_left == 0)
|
||||
+ if (iw.names_left == 0)
|
||||
break;
|
||||
|
||||
next:
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,30 +0,0 @@
|
||||
From 15daa63112e49f309d61083247bedd8f0b557b0c Mon Sep 17 00:00:00 2001
|
||||
From: Theodore Ts'o <tytso@mit.edu>
|
||||
Date: Sat, 11 Aug 2018 20:47:08 -0400
|
||||
Subject: [PATCH 05/10] e2fsck: fix fd leak in reserve_stdio_fds
|
||||
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
Reviewed-by: Lukas Czerner <lczerner@redhat.com>
|
||||
---
|
||||
e2fsck/unix.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/e2fsck/unix.c b/e2fsck/unix.c
|
||||
index 90065b39..2df22b17 100644
|
||||
--- a/e2fsck/unix.c
|
||||
+++ b/e2fsck/unix.c
|
||||
@@ -617,9 +617,10 @@ static void reserve_stdio_fds(void)
|
||||
fprintf(stderr, _("ERROR: Couldn't open "
|
||||
"/dev/null (%s)\n"),
|
||||
strerror(errno));
|
||||
- break;
|
||||
+ return;
|
||||
}
|
||||
}
|
||||
+ (void) close(fd);
|
||||
}
|
||||
|
||||
#ifdef HAVE_SIGNAL_H
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,79 +0,0 @@
|
||||
From b3105cb666a7a8447e08cf3ab49b8e60426b21cc Mon Sep 17 00:00:00 2001
|
||||
From: Lukas Czerner <lczerner@redhat.com>
|
||||
Date: Wed, 8 Aug 2018 13:52:56 +0200
|
||||
Subject: [PATCH 03/10] e2fsck: remove resize inode if both resize_inode and
|
||||
meta_bg are enabled
|
||||
|
||||
Previous e2fsprogs versions allowed to create a file system with both
|
||||
resize_inode and meta_bg enabled. This was fixed by upstream commit
|
||||
42e77d5d ("libext2fs: don't create filesystems with meta_bg and resize_inode")
|
||||
|
||||
However e2fsck still does not recognize the conflict and will attempt to
|
||||
clear and recreate resize_inode if it's corrupted due to this incompatible
|
||||
feature combination, though it will create it in the same wrong layout.
|
||||
|
||||
Fix it by teaching e2fsck to recognize resize_inode and meta_bg
|
||||
conflict and fixing it by disabling and clearing resize inode.
|
||||
|
||||
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
|
||||
Reviewed-by: Andreas Dilger <adilger@dilger.ca>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
e2fsck/problem.c | 6 ++++++
|
||||
e2fsck/problem.h | 3 +++
|
||||
e2fsck/super.c | 8 ++++++++
|
||||
3 files changed, 17 insertions(+)
|
||||
|
||||
diff --git a/e2fsck/problem.c b/e2fsck/problem.c
|
||||
index a0a3cfec..ddd8c1c4 100644
|
||||
--- a/e2fsck/problem.c
|
||||
+++ b/e2fsck/problem.c
|
||||
@@ -498,6 +498,12 @@ static struct e2fsck_problem problem_table[] = {
|
||||
N_("@S would have too many inodes (%N).\n"),
|
||||
PROMPT_NONE, PR_AFTER_CODE, PR_0_SB_CORRUPT },
|
||||
|
||||
+ /* Meta_bg and resize_inode are not compatible, disable resize_inode*/
|
||||
+ { PR_0_DISABLE_RESIZE_INODE,
|
||||
+ N_("Resize_@i and meta_bg features are enabled. Those features are\n"
|
||||
+ "not compatible. Resize @i should be disabled. "),
|
||||
+ PROMPT_FIX, 0 },
|
||||
+
|
||||
/* Pass 1 errors */
|
||||
|
||||
/* Pass 1: Checking inodes, blocks, and sizes */
|
||||
diff --git a/e2fsck/problem.h b/e2fsck/problem.h
|
||||
index 7db122ab..2c79169e 100644
|
||||
--- a/e2fsck/problem.h
|
||||
+++ b/e2fsck/problem.h
|
||||
@@ -285,6 +285,9 @@ struct problem_context {
|
||||
/* Inode count in the superblock incorrect */
|
||||
#define PR_0_INODE_COUNT_BIG 0x000050
|
||||
|
||||
+/* Meta_bg and resize_inode are not compatible, remove resize_inode*/
|
||||
+#define PR_0_DISABLE_RESIZE_INODE 0x000051
|
||||
+
|
||||
/*
|
||||
* Pass 1 errors
|
||||
*/
|
||||
diff --git a/e2fsck/super.c b/e2fsck/super.c
|
||||
index eb7ab0d1..e5932be6 100644
|
||||
--- a/e2fsck/super.c
|
||||
+++ b/e2fsck/super.c
|
||||
@@ -436,6 +436,14 @@ void check_resize_inode(e2fsck_t ctx)
|
||||
|
||||
clear_problem_context(&pctx);
|
||||
|
||||
+ if (ext2fs_has_feature_resize_inode(fs->super) &&
|
||||
+ ext2fs_has_feature_meta_bg(fs->super) &&
|
||||
+ fix_problem(ctx, PR_0_DISABLE_RESIZE_INODE, &pctx)) {
|
||||
+ ext2fs_clear_feature_resize_inode(fs->super);
|
||||
+ fs->super->s_reserved_gdt_blocks = 0;
|
||||
+ ext2fs_mark_super_dirty(fs);
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* If the resize inode feature isn't set, then
|
||||
* s_reserved_gdt_blocks must be zero.
|
||||
--
|
||||
2.17.2
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,53 +0,0 @@
|
||||
From 0b9577c7d8d40eaaa152f1aadec82f251b9486c2 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?G=C3=B6ran=20Uddeborg?= <goeran@uddeborg.se>
|
||||
Date: Sat, 18 Aug 2018 14:28:35 -0400
|
||||
Subject: [PATCH 10/10] po: update sv.po (from translationproject.org)
|
||||
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
po/sv.po | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/po/sv.po b/po/sv.po
|
||||
index fae0a347..c09ada6d 100644
|
||||
--- a/po/sv.po
|
||||
+++ b/po/sv.po
|
||||
@@ -4,7 +4,7 @@
|
||||
#
|
||||
# Göran Uddeborg <goeran@uddeborg.se>, 2003, 2005, 2006, 2008, 2009, 2010, 2011, 2012, 2014, 2016, 2017, 2018.
|
||||
#
|
||||
-# $Revision: 1.98 $
|
||||
+# $Revision: 1.99 $
|
||||
#
|
||||
#. The strings in e2fsck's problem.c can be very hard to translate,
|
||||
#. since the strings are expanded in two different ways. First of all,
|
||||
@@ -73,7 +73,7 @@ msgstr ""
|
||||
"Project-Id-Version: e2fsprogs 1.44.3-rc1\n"
|
||||
"Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
|
||||
"POT-Creation-Date: 2018-06-25 10:12-0400\n"
|
||||
-"PO-Revision-Date: 2018-06-26 22:56+0200\n"
|
||||
+"PO-Revision-Date: 2018-07-19 19:22+0200\n"
|
||||
"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
|
||||
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
|
||||
"Language: sv\n"
|
||||
@@ -3441,7 +3441,7 @@ msgid ""
|
||||
"'tune2fs -f -E clear_mmp %s'\n"
|
||||
msgstr ""
|
||||
"Om du är säker på att filsystemet inte används på någon nod, kör:\n"
|
||||
-"”tune2fs-f-E clear_mmp %s”\n"
|
||||
+"”tune2fs -f -E clear_mmp %s”\n"
|
||||
|
||||
#: e2fsck/unix.c:1274
|
||||
msgid "while reading MMP block"
|
||||
@@ -6646,7 +6646,7 @@ msgid ""
|
||||
"'tune2fs -f -E clear_mmp {device}'\n"
|
||||
msgstr ""
|
||||
"Om du är säker på att filsystemet inte används på någon nod, kör:\n"
|
||||
-"”tune2fs-f-E clear_mmp {enhet}”\n"
|
||||
+"”tune2fs -f -E clear_mmp {enhet}”\n"
|
||||
|
||||
#: misc/tune2fs.c:2942
|
||||
#, c-format
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,41 +0,0 @@
|
||||
From 0377ae0cbf2fe9174580aeaa78d8db1479796352 Mon Sep 17 00:00:00 2001
|
||||
From: Lukas Czerner <lczerner@redhat.com>
|
||||
Date: Thu, 9 Aug 2018 10:35:45 +0200
|
||||
Subject: [PATCH 04/10] remove unused datarootdir
|
||||
|
||||
Remove unused datarootdir variable from compile_et and mk_cmds.
|
||||
|
||||
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
lib/et/compile_et.sh.in | 1 -
|
||||
lib/ss/mk_cmds.sh.in | 1 -
|
||||
2 files changed, 2 deletions(-)
|
||||
|
||||
diff --git a/lib/et/compile_et.sh.in b/lib/et/compile_et.sh.in
|
||||
index 4c4ba17c..3cba7c7d 100644
|
||||
--- a/lib/et/compile_et.sh.in
|
||||
+++ b/lib/et/compile_et.sh.in
|
||||
@@ -2,7 +2,6 @@
|
||||
#
|
||||
#
|
||||
|
||||
-datarootdir=@datarootdir@
|
||||
AWK=@AWK@
|
||||
DIR=@datadir@/et
|
||||
|
||||
diff --git a/lib/ss/mk_cmds.sh.in b/lib/ss/mk_cmds.sh.in
|
||||
index 0abc19d7..6d487358 100644
|
||||
--- a/lib/ss/mk_cmds.sh.in
|
||||
+++ b/lib/ss/mk_cmds.sh.in
|
||||
@@ -2,7 +2,6 @@
|
||||
#
|
||||
#
|
||||
|
||||
-datarootdir=@datarootdir@
|
||||
DIR=@datadir@/ss
|
||||
AWK=@AWK@
|
||||
SED=@SED@
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,51 +0,0 @@
|
||||
From 7d802cb9cbcaccb178c7695024e53804a807cda1 Mon Sep 17 00:00:00 2001
|
||||
From: Lukas Czerner <lczerner@redhat.com>
|
||||
Date: Thu, 19 Jul 2018 10:39:38 +0200
|
||||
Subject: [PATCH 01/10] resize2fs: Remove the real kilobytes rant from man page
|
||||
|
||||
Remove the rant about the "real" kilobytes from the man page and just
|
||||
make it more clear that the suffixed units are representing power-of-two
|
||||
units as we do in mke2fs man page. Also add terabytes to the list.
|
||||
|
||||
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
resize/resize2fs.8.in | 16 ++++------------
|
||||
1 file changed, 4 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/resize/resize2fs.8.in b/resize/resize2fs.8.in
|
||||
index 3f0674ce..ae365770 100644
|
||||
--- a/resize/resize2fs.8.in
|
||||
+++ b/resize/resize2fs.8.in
|
||||
@@ -46,24 +46,16 @@ If no units are specified, the units of the
|
||||
parameter shall be the filesystem blocksize of the filesystem.
|
||||
Optionally, the
|
||||
.I size
|
||||
-parameter may be suffixed by one of the following the units
|
||||
-designators: 's', 'K', 'M', or 'G',
|
||||
-for 512 byte sectors, kilobytes, megabytes, or gigabytes, respectively.
|
||||
-The
|
||||
+parameter may be suffixed by one of the following units
|
||||
+designators: 'K', 'M', 'G', 'T' (either upper-case or lower-case) or 's'
|
||||
+for power-of-two kilobytes, megabytes, gigabytes, terabytes or 512 byte
|
||||
+sectors respectively. The
|
||||
.I size
|
||||
of the filesystem may never be larger than the size of the partition.
|
||||
If
|
||||
.I size
|
||||
parameter is not specified, it will default to the size of the partition.
|
||||
.PP
|
||||
-Note: when kilobytes is used above, I mean
|
||||
-.IR real ,
|
||||
-power-of-2 kilobytes, (i.e., 1024 bytes), which some politically correct
|
||||
-folks insist should be the stupid-sounding ``kibibytes''. The same
|
||||
-holds true for megabytes, also sometimes known as ``mebibytes'', or
|
||||
-gigabytes, as the amazingly silly ``gibibytes''. Makes you want to
|
||||
-gibber, doesn't it?
|
||||
-.PP
|
||||
The
|
||||
.B resize2fs
|
||||
program does not manipulate the size of partitions. If you wish to enlarge
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,120 +0,0 @@
|
||||
From 0c1b709edb72f100965045627f17365dbeeedb9e Mon Sep 17 00:00:00 2001
|
||||
From: Lukas Czerner <lczerner@redhat.com>
|
||||
Date: Mon, 13 Aug 2018 15:17:05 +0200
|
||||
Subject: [PATCH] tests: e2fsck must be able fix fs with resize_inode and
|
||||
meta_bg
|
||||
|
||||
Test if the e2fsck can fix file system with resize_inode and meta_bg
|
||||
features enabled simultaneously.
|
||||
|
||||
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
tests/f_resize_inode_meta_bg/expect.1 | 71 +++++++++++++++++++++++++++
|
||||
tests/f_resize_inode_meta_bg/expect.2 | 7 +++
|
||||
tests/f_resize_inode_meta_bg/name | 1 +
|
||||
3 files changed, 79 insertions(+)
|
||||
create mode 100644 tests/f_resize_inode_meta_bg/expect.1
|
||||
create mode 100644 tests/f_resize_inode_meta_bg/expect.2
|
||||
create mode 100644 tests/f_resize_inode_meta_bg/name
|
||||
|
||||
diff --git a/tests/f_resize_inode_meta_bg/expect.1 b/tests/f_resize_inode_meta_bg/expect.1
|
||||
new file mode 100644
|
||||
index 00000000..12055fc7
|
||||
--- /dev/null
|
||||
+++ b/tests/f_resize_inode_meta_bg/expect.1
|
||||
@@ -0,0 +1,71 @@
|
||||
+Resize_inode and meta_bg features are enabled. Those features are
|
||||
+not compatible. Resize inode should be disabled. Fix? yes
|
||||
+
|
||||
+Resize_inode not enabled, but the resize inode is non-zero. Clear? yes
|
||||
+
|
||||
+Pass 1: Checking inodes, blocks, and sizes
|
||||
+Pass 2: Checking directory structure
|
||||
+Directory inode 2, block #0, offset 0: directory has no checksum.
|
||||
+Fix? yes
|
||||
+
|
||||
+First entry '' (inode=348) in directory inode 2 (???) should be '.'
|
||||
+Fix? yes
|
||||
+
|
||||
+Setting filetype for entry '.' in ??? (2) to 2.
|
||||
+Missing '..' in directory inode 2.
|
||||
+Fix? yes
|
||||
+
|
||||
+Setting filetype for entry '..' in ??? (2) to 2.
|
||||
+Directory inode 2, block #0, offset 860: directory corrupted
|
||||
+Salvage? yes
|
||||
+
|
||||
+Directory inode 11, block #0, offset 0: directory corrupted
|
||||
+Salvage? yes
|
||||
+
|
||||
+Missing '.' in directory inode 11.
|
||||
+Fix? yes
|
||||
+
|
||||
+Setting filetype for entry '.' in ??? (11) to 2.
|
||||
+Missing '..' in directory inode 11.
|
||||
+Fix? yes
|
||||
+
|
||||
+Setting filetype for entry '..' in ??? (11) to 2.
|
||||
+Directory inode 11, block #1, offset 0: directory corrupted
|
||||
+Salvage? yes
|
||||
+
|
||||
+Directory inode 11, block #2, offset 0: directory corrupted
|
||||
+Salvage? yes
|
||||
+
|
||||
+Entry '' in ??? (11) has a zero-length name.
|
||||
+Clear? yes
|
||||
+
|
||||
+Directory inode 11, block #3, offset 864: directory corrupted
|
||||
+Salvage? yes
|
||||
+
|
||||
+Pass 3: Checking directory connectivity
|
||||
+'..' in / (2) is <The NULL inode> (0), should be / (2).
|
||||
+Fix? yes
|
||||
+
|
||||
+Unconnected directory inode 11 (/???)
|
||||
+Connect to /lost+found? yes
|
||||
+
|
||||
+/lost+found not found. Create? yes
|
||||
+
|
||||
+Pass 3A: Optimizing directories
|
||||
+Pass 4: Checking reference counts
|
||||
+Inode 11 ref count is 3, should be 2. Fix? yes
|
||||
+
|
||||
+Pass 5: Checking group summary information
|
||||
+Block bitmap differences: -246
|
||||
+Fix? yes
|
||||
+
|
||||
+Free blocks count wrong for group #0 (160, counted=161).
|
||||
+Fix? yes
|
||||
+
|
||||
+Free blocks count wrong (2714, counted=2715).
|
||||
+Fix? yes
|
||||
+
|
||||
+
|
||||
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
+test_filesys: 12/960 files (0.0% non-contiguous), 1125/3840 blocks
|
||||
+Exit status is 1
|
||||
diff --git a/tests/f_resize_inode_meta_bg/expect.2 b/tests/f_resize_inode_meta_bg/expect.2
|
||||
new file mode 100644
|
||||
index 00000000..0df9a40a
|
||||
--- /dev/null
|
||||
+++ b/tests/f_resize_inode_meta_bg/expect.2
|
||||
@@ -0,0 +1,7 @@
|
||||
+Pass 1: Checking inodes, blocks, and sizes
|
||||
+Pass 2: Checking directory structure
|
||||
+Pass 3: Checking directory connectivity
|
||||
+Pass 4: Checking reference counts
|
||||
+Pass 5: Checking group summary information
|
||||
+test_filesys: 12/960 files (0.0% non-contiguous), 1125/3840 blocks
|
||||
+Exit status is 0
|
||||
diff --git a/tests/f_resize_inode_meta_bg/name b/tests/f_resize_inode_meta_bg/name
|
||||
new file mode 100644
|
||||
index 00000000..94936549
|
||||
--- /dev/null
|
||||
+++ b/tests/f_resize_inode_meta_bg/name
|
||||
@@ -0,0 +1 @@
|
||||
+conflicting features resize_inode and meta_bg
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,212 +0,0 @@
|
||||
From f1c5aa0c1bf38d6cf606404686555e81cb24c458 Mon Sep 17 00:00:00 2001
|
||||
From: Lukas Czerner <lczerner@redhat.com>
|
||||
Date: Mon, 13 Aug 2018 15:17:06 +0200
|
||||
Subject: [PATCH 07/10] tests: mke2fs must not create fs with resize_inode and
|
||||
meta_bg
|
||||
|
||||
Test that mke2fs does not allow to create file system with both
|
||||
resize_inode and meta_bg features enabled.
|
||||
|
||||
This was fixes with commit 42e77d5d ("libext2fs: don't create
|
||||
filesystems with meta_bg and resize_inode").
|
||||
|
||||
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
tests/m_resize_inode_meta_bg/expect.1 | 169 ++++++++++++++++++++++++++
|
||||
tests/m_resize_inode_meta_bg/script | 7 ++
|
||||
2 files changed, 176 insertions(+)
|
||||
create mode 100644 tests/m_resize_inode_meta_bg/expect.1
|
||||
create mode 100644 tests/m_resize_inode_meta_bg/script
|
||||
|
||||
diff --git a/tests/m_resize_inode_meta_bg/expect.1 b/tests/m_resize_inode_meta_bg/expect.1
|
||||
new file mode 100644
|
||||
index 00000000..d36f9730
|
||||
--- /dev/null
|
||||
+++ b/tests/m_resize_inode_meta_bg/expect.1
|
||||
@@ -0,0 +1,169 @@
|
||||
+Creating filesystem with 3840 4k blocks and 960 inodes
|
||||
+Superblock backups stored on blocks:
|
||||
+ 256, 768, 1280, 1792, 2304
|
||||
+
|
||||
+Allocating group tables: done
|
||||
+Writing inode tables: done
|
||||
+Creating journal (1024 blocks): done
|
||||
+Writing superblocks and filesystem accounting information: done
|
||||
+
|
||||
+Filesystem features: has_journal ext_attr dir_index filetype meta_bg extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
|
||||
+Pass 1: Checking inodes, blocks, and sizes
|
||||
+Pass 2: Checking directory structure
|
||||
+Pass 3: Checking directory connectivity
|
||||
+Pass 4: Checking reference counts
|
||||
+Pass 5: Checking group summary information
|
||||
+test_filesys: 11/960 files (0.0% non-contiguous), 1127/3840 blocks
|
||||
+Exit status is 0
|
||||
+Filesystem volume name: <none>
|
||||
+Last mounted on: <not available>
|
||||
+Filesystem magic number: 0xEF53
|
||||
+Filesystem revision #: 1 (dynamic)
|
||||
+Filesystem features: has_journal ext_attr dir_index filetype meta_bg extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
|
||||
+Default mount options: (none)
|
||||
+Filesystem state: clean
|
||||
+Errors behavior: Continue
|
||||
+Filesystem OS type: Linux
|
||||
+Inode count: 960
|
||||
+Block count: 3840
|
||||
+Reserved block count: 192
|
||||
+Free blocks: 2713
|
||||
+Free inodes: 949
|
||||
+First block: 0
|
||||
+Block size: 4096
|
||||
+Fragment size: 4096
|
||||
+Group descriptor size: 64
|
||||
+Blocks per group: 256
|
||||
+Fragments per group: 256
|
||||
+Inodes per group: 64
|
||||
+Inode blocks per group: 4
|
||||
+Flex block group size: 16
|
||||
+Mount count: 0
|
||||
+Check interval: 15552000 (6 months)
|
||||
+Reserved blocks uid: 0
|
||||
+Reserved blocks gid: 0
|
||||
+First inode: 11
|
||||
+Inode size: 256
|
||||
+Required extra isize: 32
|
||||
+Desired extra isize: 32
|
||||
+Journal inode: 8
|
||||
+Default directory hash: half_md4
|
||||
+Journal backup: inode blocks
|
||||
+Journal features: (none)
|
||||
+Journal size: 4096k
|
||||
+Journal length: 1024
|
||||
+Journal sequence: 0x00000001
|
||||
+Journal start: 0
|
||||
+
|
||||
+
|
||||
+Group 0: (Blocks 0-255) [ITABLE_ZEROED]
|
||||
+ Primary superblock at 0, Group descriptor at 1
|
||||
+ Block bitmap at 2 (+2)
|
||||
+ Inode bitmap at 17 (+17)
|
||||
+ Inode table at 32-35 (+32)
|
||||
+ 159 free blocks, 53 free inodes, 2 directories, 53 unused inodes
|
||||
+ Free blocks: 97-255
|
||||
+ Free inodes: 12-64
|
||||
+Group 1: (Blocks 256-511) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
|
||||
+ Backup superblock at 256, Group descriptor at 257
|
||||
+ Block bitmap at 3 (bg #0 + 3)
|
||||
+ Inode bitmap at 18 (bg #0 + 18)
|
||||
+ Inode table at 36-39 (bg #0 + 36)
|
||||
+ 254 free blocks, 64 free inodes, 0 directories, 64 unused inodes
|
||||
+ Free blocks: 258-511
|
||||
+ Free inodes: 65-128
|
||||
+Group 2: (Blocks 512-767) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
|
||||
+ Block bitmap at 4 (bg #0 + 4)
|
||||
+ Inode bitmap at 19 (bg #0 + 19)
|
||||
+ Inode table at 40-43 (bg #0 + 40)
|
||||
+ 256 free blocks, 64 free inodes, 0 directories, 64 unused inodes
|
||||
+ Free blocks: 512-767
|
||||
+ Free inodes: 129-192
|
||||
+Group 3: (Blocks 768-1023) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
|
||||
+ Backup superblock at 768
|
||||
+ Block bitmap at 5 (bg #0 + 5)
|
||||
+ Inode bitmap at 20 (bg #0 + 20)
|
||||
+ Inode table at 44-47 (bg #0 + 44)
|
||||
+ 255 free blocks, 64 free inodes, 0 directories, 64 unused inodes
|
||||
+ Free blocks: 769-1023
|
||||
+ Free inodes: 193-256
|
||||
+Group 4: (Blocks 1024-1279) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
|
||||
+ Block bitmap at 6 (bg #0 + 6)
|
||||
+ Inode bitmap at 21 (bg #0 + 21)
|
||||
+ Inode table at 48-51 (bg #0 + 48)
|
||||
+ 256 free blocks, 64 free inodes, 0 directories, 64 unused inodes
|
||||
+ Free blocks: 1024-1279
|
||||
+ Free inodes: 257-320
|
||||
+Group 5: (Blocks 1280-1535) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
|
||||
+ Backup superblock at 1280
|
||||
+ Block bitmap at 7 (bg #0 + 7)
|
||||
+ Inode bitmap at 22 (bg #0 + 22)
|
||||
+ Inode table at 52-55 (bg #0 + 52)
|
||||
+ 255 free blocks, 64 free inodes, 0 directories, 64 unused inodes
|
||||
+ Free blocks: 1281-1535
|
||||
+ Free inodes: 321-384
|
||||
+Group 6: (Blocks 1536-1791) [INODE_UNINIT, ITABLE_ZEROED]
|
||||
+ Block bitmap at 8 (bg #0 + 8)
|
||||
+ Inode bitmap at 23 (bg #0 + 23)
|
||||
+ Inode table at 56-59 (bg #0 + 56)
|
||||
+ 0 free blocks, 64 free inodes, 0 directories, 64 unused inodes
|
||||
+ Free blocks:
|
||||
+ Free inodes: 385-448
|
||||
+Group 7: (Blocks 1792-2047) [INODE_UNINIT, ITABLE_ZEROED]
|
||||
+ Backup superblock at 1792
|
||||
+ Block bitmap at 9 (bg #0 + 9)
|
||||
+ Inode bitmap at 24 (bg #0 + 24)
|
||||
+ Inode table at 60-63 (bg #0 + 60)
|
||||
+ 0 free blocks, 64 free inodes, 0 directories, 64 unused inodes
|
||||
+ Free blocks:
|
||||
+ Free inodes: 449-512
|
||||
+Group 8: (Blocks 2048-2303) [INODE_UNINIT, ITABLE_ZEROED]
|
||||
+ Block bitmap at 10 (bg #0 + 10)
|
||||
+ Inode bitmap at 25 (bg #0 + 25)
|
||||
+ Inode table at 64-67 (bg #0 + 64)
|
||||
+ 0 free blocks, 64 free inodes, 0 directories, 64 unused inodes
|
||||
+ Free blocks:
|
||||
+ Free inodes: 513-576
|
||||
+Group 9: (Blocks 2304-2559) [INODE_UNINIT, ITABLE_ZEROED]
|
||||
+ Backup superblock at 2304
|
||||
+ Block bitmap at 11 (bg #0 + 11)
|
||||
+ Inode bitmap at 26 (bg #0 + 26)
|
||||
+ Inode table at 68-71 (bg #0 + 68)
|
||||
+ 0 free blocks, 64 free inodes, 0 directories, 64 unused inodes
|
||||
+ Free blocks:
|
||||
+ Free inodes: 577-640
|
||||
+Group 10: (Blocks 2560-2815) [INODE_UNINIT, ITABLE_ZEROED]
|
||||
+ Block bitmap at 12 (bg #0 + 12)
|
||||
+ Inode bitmap at 27 (bg #0 + 27)
|
||||
+ Inode table at 72-75 (bg #0 + 72)
|
||||
+ 254 free blocks, 64 free inodes, 0 directories, 64 unused inodes
|
||||
+ Free blocks: 2562-2815
|
||||
+ Free inodes: 641-704
|
||||
+Group 11: (Blocks 2816-3071) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
|
||||
+ Block bitmap at 13 (bg #0 + 13)
|
||||
+ Inode bitmap at 28 (bg #0 + 28)
|
||||
+ Inode table at 76-79 (bg #0 + 76)
|
||||
+ 256 free blocks, 64 free inodes, 0 directories, 64 unused inodes
|
||||
+ Free blocks: 2816-3071
|
||||
+ Free inodes: 705-768
|
||||
+Group 12: (Blocks 3072-3327) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
|
||||
+ Block bitmap at 14 (bg #0 + 14)
|
||||
+ Inode bitmap at 29 (bg #0 + 29)
|
||||
+ Inode table at 80-83 (bg #0 + 80)
|
||||
+ 256 free blocks, 64 free inodes, 0 directories, 64 unused inodes
|
||||
+ Free blocks: 3072-3327
|
||||
+ Free inodes: 769-832
|
||||
+Group 13: (Blocks 3328-3583) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
|
||||
+ Block bitmap at 15 (bg #0 + 15)
|
||||
+ Inode bitmap at 30 (bg #0 + 30)
|
||||
+ Inode table at 84-87 (bg #0 + 84)
|
||||
+ 256 free blocks, 64 free inodes, 0 directories, 64 unused inodes
|
||||
+ Free blocks: 3328-3583
|
||||
+ Free inodes: 833-896
|
||||
+Group 14: (Blocks 3584-3839) [INODE_UNINIT, ITABLE_ZEROED]
|
||||
+ Block bitmap at 16 (bg #0 + 16)
|
||||
+ Inode bitmap at 31 (bg #0 + 31)
|
||||
+ Inode table at 88-91 (bg #0 + 88)
|
||||
+ 256 free blocks, 64 free inodes, 0 directories, 64 unused inodes
|
||||
+ Free blocks: 3584-3839
|
||||
+ Free inodes: 897-960
|
||||
diff --git a/tests/m_resize_inode_meta_bg/script b/tests/m_resize_inode_meta_bg/script
|
||||
new file mode 100644
|
||||
index 00000000..41ffb32a
|
||||
--- /dev/null
|
||||
+++ b/tests/m_resize_inode_meta_bg/script
|
||||
@@ -0,0 +1,7 @@
|
||||
+DESCRIPTION="resize_inode and meta_bg enabled"
|
||||
+FS_SIZE=15360
|
||||
+MKE2FS_DEVICE_SECTSIZE=4096
|
||||
+export MKE2FS_DEVICE_SECTSIZE
|
||||
+MKE2FS_OPTS="-T ext4 -g256 -O 64bit"
|
||||
+. $cmd_dir/run_mke2fs
|
||||
+unset MKE2FS_DEVICE_SECTSIZE
|
||||
--
|
||||
2.17.2
|
||||
|
@ -0,0 +1,29 @@
|
||||
From 563d63dbf762c41f908b5e10deb1b115def93bcc Mon Sep 17 00:00:00 2001
|
||||
From: Theodore Ts'o <tytso@mit.edu>
|
||||
Date: Tue, 26 Mar 2019 09:36:53 -0400
|
||||
Subject: [PATCH 4/4] debugfs: fix printing of xattrs with ea_in_inode values
|
||||
|
||||
Due to a missing "else" debugfs was printing (garbage) from the xattr
|
||||
buffer which could potentially overrun the end of the buffer.
|
||||
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
debugfs/xattrs.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/debugfs/xattrs.c b/debugfs/xattrs.c
|
||||
index c29761ec..dde9af2f 100644
|
||||
--- a/debugfs/xattrs.c
|
||||
+++ b/debugfs/xattrs.c
|
||||
@@ -448,7 +448,7 @@ static void dump_xattr_raw_entries(FILE *f, unsigned char *buf,
|
||||
else if (ent.e_value_offs >= len ||
|
||||
(vstart + ent.e_value_size) > len)
|
||||
fprintf(f, "<runs off end>");
|
||||
- if (is_mostly_printable((char *)(buf + vstart),
|
||||
+ else if (is_mostly_printable((char *)(buf + vstart),
|
||||
ent.e_value_size))
|
||||
safe_print(f, (char *)(buf + vstart),
|
||||
ent.e_value_size);
|
||||
--
|
||||
2.20.1
|
||||
|
@ -0,0 +1,244 @@
|
||||
From 5862f45c314aaf97ce098add06c42b5d592dc984 Mon Sep 17 00:00:00 2001
|
||||
From: Theodore Ts'o <tytso@mit.edu>
|
||||
Date: Thu, 13 Dec 2018 00:53:16 -0500
|
||||
Subject: [PATCH 2/4] debugfs: fix set_inode_field so it can set the checksum
|
||||
field
|
||||
|
||||
Previously, setting the inode field was a no-op, since the library
|
||||
function ext2fs_write_inode_full() would override whatever value was
|
||||
set by debugfs. Use the new ext2fs_write_inode2() interface so we can
|
||||
in fact set the checksum to a potentially wrong value. Also, ignore
|
||||
the inode checksum failures if we are setting the checksum, and if the
|
||||
checksum value is "calc", set the inode checksum to the correct value.
|
||||
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
debugfs/debugfs.c | 12 +++----
|
||||
debugfs/debugfs.h | 8 ++---
|
||||
debugfs/set_fields.c | 84 +++++++++++++++++++++++++++++++++++++++-----
|
||||
debugfs/util.c | 17 +++++----
|
||||
4 files changed, 94 insertions(+), 27 deletions(-)
|
||||
|
||||
diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c
|
||||
index faae12da..06a93270 100644
|
||||
--- a/debugfs/debugfs.c
|
||||
+++ b/debugfs/debugfs.c
|
||||
@@ -985,8 +985,8 @@ void do_stat(int argc, char *argv[])
|
||||
return;
|
||||
}
|
||||
|
||||
- if (debugfs_read_inode_full(inode, inode_buf, argv[0],
|
||||
- EXT2_INODE_SIZE(current_fs->super))) {
|
||||
+ if (debugfs_read_inode2(inode, inode_buf, argv[0],
|
||||
+ EXT2_INODE_SIZE(current_fs->super), 0)) {
|
||||
free(inode_buf);
|
||||
return;
|
||||
}
|
||||
@@ -1608,12 +1608,12 @@ void do_copy_inode(int argc, char *argv[])
|
||||
if (!dest_ino)
|
||||
return;
|
||||
|
||||
- if (debugfs_read_inode_full(src_ino, (struct ext2_inode *) buf,
|
||||
- argv[0], sizeof(buf)))
|
||||
+ if (debugfs_read_inode2(src_ino, (struct ext2_inode *) buf,
|
||||
+ argv[0], sizeof(buf), 0))
|
||||
return;
|
||||
|
||||
- if (debugfs_write_inode_full(dest_ino, (struct ext2_inode *) buf,
|
||||
- argv[0], sizeof(buf)))
|
||||
+ if (debugfs_write_inode2(dest_ino, (struct ext2_inode *) buf,
|
||||
+ argv[0], sizeof(buf), 0))
|
||||
return;
|
||||
}
|
||||
|
||||
diff --git a/debugfs/debugfs.h b/debugfs/debugfs.h
|
||||
index 93f036de..97fdde7e 100644
|
||||
--- a/debugfs/debugfs.h
|
||||
+++ b/debugfs/debugfs.h
|
||||
@@ -54,12 +54,12 @@ extern int common_block_args_process(int argc, char *argv[],
|
||||
blk64_t *block, blk64_t *count);
|
||||
extern int debugfs_read_inode(ext2_ino_t ino, struct ext2_inode * inode,
|
||||
const char *cmd);
|
||||
-extern int debugfs_read_inode_full(ext2_ino_t ino, struct ext2_inode * inode,
|
||||
- const char *cmd, int bufsize);
|
||||
+extern int debugfs_read_inode2(ext2_ino_t ino, struct ext2_inode * inode,
|
||||
+ const char *cmd, int bufsize, int flags);
|
||||
extern int debugfs_write_inode(ext2_ino_t ino, struct ext2_inode * inode,
|
||||
const char *cmd);
|
||||
-extern int debugfs_write_inode_full(ext2_ino_t ino, struct ext2_inode * inode,
|
||||
- const char *cmd, int bufsize);
|
||||
+extern int debugfs_write_inode2(ext2_ino_t ino, struct ext2_inode * inode,
|
||||
+ const char *cmd, int bufsize, int flags);
|
||||
extern int debugfs_write_new_inode(ext2_ino_t ino, struct ext2_inode * inode,
|
||||
const char *cmd);
|
||||
extern int ext2_file_type(unsigned int mode);
|
||||
diff --git a/debugfs/set_fields.c b/debugfs/set_fields.c
|
||||
index 3cdf617c..4f033249 100644
|
||||
--- a/debugfs/set_fields.c
|
||||
+++ b/debugfs/set_fields.c
|
||||
@@ -53,6 +53,7 @@ static int array_idx;
|
||||
|
||||
#define FLAG_ARRAY 0x0001
|
||||
#define FLAG_ALIAS 0x0002 /* Data intersects with other field */
|
||||
+#define FLAG_CSUM 0x0004
|
||||
|
||||
struct field_set_info {
|
||||
const char *name;
|
||||
@@ -72,6 +73,8 @@ static errcode_t parse_hashalg(struct field_set_info *info, char *field, char *a
|
||||
static errcode_t parse_time(struct field_set_info *info, char *field, char *arg);
|
||||
static errcode_t parse_bmap(struct field_set_info *info, char *field, char *arg);
|
||||
static errcode_t parse_gd_csum(struct field_set_info *info, char *field, char *arg);
|
||||
+static errcode_t parse_inode_csum(struct field_set_info *info, char *field,
|
||||
+ char *arg);
|
||||
static errcode_t parse_mmp_clear(struct field_set_info *info, char *field,
|
||||
char *arg);
|
||||
|
||||
@@ -218,7 +221,7 @@ static struct field_set_info inode_fields[] = {
|
||||
{ "frag", &set_inode.osd2.hurd2.h_i_frag, NULL, 1, parse_uint, FLAG_ALIAS },
|
||||
{ "fsize", &set_inode.osd2.hurd2.h_i_fsize, NULL, 1, parse_uint },
|
||||
{ "checksum", &set_inode.osd2.linux2.l_i_checksum_lo,
|
||||
- &set_inode.i_checksum_hi, 2, parse_uint },
|
||||
+ &set_inode.i_checksum_hi, 2, parse_inode_csum, FLAG_CSUM },
|
||||
{ "author", &set_inode.osd2.hurd2.h_i_author, NULL,
|
||||
4, parse_uint, FLAG_ALIAS },
|
||||
{ "extra_isize", &set_inode.i_extra_isize, NULL,
|
||||
@@ -665,6 +668,68 @@ static errcode_t parse_gd_csum(struct field_set_info *info, char *field,
|
||||
return parse_uint(info, field, arg);
|
||||
}
|
||||
|
||||
+static errcode_t parse_inode_csum(struct field_set_info *info, char *field,
|
||||
+ char *arg)
|
||||
+{
|
||||
+ errcode_t retval = 0;
|
||||
+ __u32 crc;
|
||||
+ int is_large_inode = 0;
|
||||
+ struct ext2_inode_large *tmp_inode;
|
||||
+
|
||||
+ if (strcmp(arg, "calc") == 0) {
|
||||
+ size_t sz = EXT2_INODE_SIZE(current_fs->super);
|
||||
+ struct ext2_inode_large *tmp_inode = NULL;
|
||||
+
|
||||
+ retval = ext2fs_get_mem(sz, &tmp_inode);
|
||||
+ if (retval)
|
||||
+ goto out;
|
||||
+
|
||||
+ retval = ext2fs_read_inode_full(current_fs, set_ino,
|
||||
+ (struct ext2_inode *) tmp_inode,
|
||||
+ sz);
|
||||
+ if (retval)
|
||||
+ goto out;
|
||||
+
|
||||
+#ifdef WORDS_BIGENDIAN
|
||||
+ ext2fs_swap_inode_full(current_fs, tmp_inode,
|
||||
+ tmp_inode, 1, sz);
|
||||
+#endif
|
||||
+
|
||||
+ if (sz > EXT2_GOOD_OLD_INODE_SIZE)
|
||||
+ is_large_inode = 1;
|
||||
+
|
||||
+ retval = ext2fs_inode_csum_set(current_fs, set_ino,
|
||||
+ tmp_inode);
|
||||
+ if (retval)
|
||||
+ goto out;
|
||||
+#ifdef WORDS_BIGENDIAN
|
||||
+ crc = set_inode.i_checksum_lo =
|
||||
+ ext2fs_swab16(tmp_inode->i_checksum_lo);
|
||||
+
|
||||
+#else
|
||||
+ crc = set_inode.i_checksum_lo = tmp_inode->i_checksum_lo;
|
||||
+#endif
|
||||
+ if (is_large_inode &&
|
||||
+ set_inode.i_extra_isize >=
|
||||
+ (offsetof(struct ext2_inode_large,
|
||||
+ i_checksum_hi) -
|
||||
+ EXT2_GOOD_OLD_INODE_SIZE)) {
|
||||
+#ifdef WORDS_BIGENDIAN
|
||||
+ set_inode.i_checksum_lo =
|
||||
+ ext2fs_swab16(tmp_inode->i_checksum_lo);
|
||||
+#else
|
||||
+ set_inode.i_checksum_hi = tmp_inode->i_checksum_hi;
|
||||
+#endif
|
||||
+ crc |= ((__u32)set_inode.i_checksum_hi) << 16;
|
||||
+ }
|
||||
+ printf("Checksum set to 0x%08x\n", crc);
|
||||
+ out:
|
||||
+ ext2fs_free_mem(&tmp_inode);
|
||||
+ return retval;
|
||||
+ }
|
||||
+ return parse_uint(info, field, arg);
|
||||
+}
|
||||
+
|
||||
static void print_possible_fields(struct field_set_info *fields)
|
||||
{
|
||||
struct field_set_info *ss;
|
||||
@@ -775,16 +840,19 @@ void do_set_inode(int argc, char *argv[])
|
||||
if (!set_ino)
|
||||
return;
|
||||
|
||||
- if (debugfs_read_inode_full(set_ino,
|
||||
- (struct ext2_inode *) &set_inode, argv[1],
|
||||
- sizeof(set_inode)))
|
||||
+ if (debugfs_read_inode2(set_ino,
|
||||
+ (struct ext2_inode *) &set_inode, argv[1],
|
||||
+ sizeof(set_inode),
|
||||
+ (ss->flags & FLAG_CSUM) ?
|
||||
+ READ_INODE_NOCSUM : 0))
|
||||
return;
|
||||
|
||||
if (ss->func(ss, argv[2], argv[3]) == 0) {
|
||||
- if (debugfs_write_inode_full(set_ino,
|
||||
- (struct ext2_inode *) &set_inode,
|
||||
- argv[1], sizeof(set_inode)))
|
||||
- return;
|
||||
+ debugfs_write_inode2(set_ino,
|
||||
+ (struct ext2_inode *) &set_inode,
|
||||
+ argv[1], sizeof(set_inode),
|
||||
+ (ss->flags & FLAG_CSUM) ?
|
||||
+ WRITE_INODE_NOCSUM : 0);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/debugfs/util.c b/debugfs/util.c
|
||||
index 452de749..759bb392 100644
|
||||
--- a/debugfs/util.c
|
||||
+++ b/debugfs/util.c
|
||||
@@ -420,12 +420,12 @@ int common_block_args_process(int argc, char *argv[],
|
||||
return 0;
|
||||
}
|
||||
|
||||
-int debugfs_read_inode_full(ext2_ino_t ino, struct ext2_inode * inode,
|
||||
- const char *cmd, int bufsize)
|
||||
+int debugfs_read_inode2(ext2_ino_t ino, struct ext2_inode * inode,
|
||||
+ const char *cmd, int bufsize, int flags)
|
||||
{
|
||||
int retval;
|
||||
|
||||
- retval = ext2fs_read_inode_full(current_fs, ino, inode, bufsize);
|
||||
+ retval = ext2fs_read_inode2(current_fs, ino, inode, bufsize, flags);
|
||||
if (retval) {
|
||||
com_err(cmd, retval, "while reading inode %u", ino);
|
||||
return 1;
|
||||
@@ -446,15 +446,14 @@ int debugfs_read_inode(ext2_ino_t ino, struct ext2_inode * inode,
|
||||
return 0;
|
||||
}
|
||||
|
||||
-int debugfs_write_inode_full(ext2_ino_t ino,
|
||||
- struct ext2_inode *inode,
|
||||
- const char *cmd,
|
||||
- int bufsize)
|
||||
+int debugfs_write_inode2(ext2_ino_t ino,
|
||||
+ struct ext2_inode *inode,
|
||||
+ const char *cmd,
|
||||
+ int bufsize, int flags)
|
||||
{
|
||||
int retval;
|
||||
|
||||
- retval = ext2fs_write_inode_full(current_fs, ino,
|
||||
- inode, bufsize);
|
||||
+ retval = ext2fs_write_inode2(current_fs, ino, inode, bufsize, flags);
|
||||
if (retval) {
|
||||
com_err(cmd, retval, "while writing inode %u", ino);
|
||||
return 1;
|
||||
--
|
||||
2.20.1
|
||||
|
@ -0,0 +1,28 @@
|
||||
From 68c586c2b58cfb1677a1b37f6e55025d905228ed Mon Sep 17 00:00:00 2001
|
||||
From: Eric Biggers <ebiggers@google.com>
|
||||
Date: Sun, 28 Apr 2019 20:37:21 -0400
|
||||
Subject: [PATCH 1/4] debugfs: remove unused variable 'tmp_inode'
|
||||
|
||||
In parse_inode_csum(), the outer 'tmp_inode' variable is never used.
|
||||
|
||||
Signed-off-by: Eric Biggers <ebiggers@google.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
debugfs/set_fields.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/debugfs/set_fields.c b/debugfs/set_fields.c
|
||||
index 4f033249..9cf8c735 100644
|
||||
--- a/debugfs/set_fields.c
|
||||
+++ b/debugfs/set_fields.c
|
||||
@@ -674,7 +674,6 @@ static errcode_t parse_inode_csum(struct field_set_info *info, char *field,
|
||||
errcode_t retval = 0;
|
||||
__u32 crc;
|
||||
int is_large_inode = 0;
|
||||
- struct ext2_inode_large *tmp_inode;
|
||||
|
||||
if (strcmp(arg, "calc") == 0) {
|
||||
size_t sz = EXT2_INODE_SIZE(current_fs->super);
|
||||
--
|
||||
2.20.1
|
||||
|
@ -0,0 +1,568 @@
|
||||
From 6e44ff6678a96b2bc5ddc42c5bf2cbad09b71af2 Mon Sep 17 00:00:00 2001
|
||||
From: Theodore Ts'o <tytso@mit.edu>
|
||||
Date: Sun, 5 May 2019 16:43:33 -0400
|
||||
Subject: [PATCH 3/4] e2fsck: check and fix tails of all bitmap blocks
|
||||
|
||||
Currently, e2fsck effectively checks only tail of the last inode and
|
||||
block bitmap in the filesystem. Thus if some previous bitmap has unset
|
||||
bits it goes unnoticed. Mostly these tail bits in the bitmap are
|
||||
ignored; however, if blocks_per_group are smaller than 8*blocksize,
|
||||
the multi-block allocator in the kernel can get confused when the tail
|
||||
bits are unset and return bogus free extent.
|
||||
|
||||
Add support to libext2fs to check these bitmap tails when loading
|
||||
bitmaps (as that's about the only place which has access to the bitmap
|
||||
tail bits) and make e2fsck use this functionality to detect buggy bitmap
|
||||
tails and fix them (by rewriting the bitmaps).
|
||||
|
||||
Reported-by: Jan Kara <jack@suse.cz>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
Reviewed-by: Jan Kara <jack@suse.cz>
|
||||
---
|
||||
e2fsck/pass5.c | 40 ++++++++++++++++---
|
||||
lib/ext2fs/ext2fs.h | 2 +
|
||||
lib/ext2fs/rw_bitmaps.c | 26 +++++++++++-
|
||||
tests/f_bitmaps/expect.1 | 2 +
|
||||
tests/f_dup/expect.1 | 2 +
|
||||
tests/f_dup2/expect.1 | 2 +
|
||||
tests/f_dup3/expect.1 | 2 +
|
||||
tests/f_end-bitmap/expect.1 | 2 +
|
||||
tests/f_illbbitmap/expect.1 | 2 +
|
||||
tests/f_illibitmap/expect.1 | 2 +
|
||||
tests/f_illitable_flexbg/expect.1 | 2 +
|
||||
tests/f_lpf/expect.1 | 2 +
|
||||
tests/f_overfsblks/expect.1 | 2 +
|
||||
tests/f_super_bad_csum/expect.1 | 4 +-
|
||||
tests/j_corrupt_ext_jnl_sb_csum/expect | 2 +
|
||||
tests/j_ext_long_trans/expect | 2 +
|
||||
tests/j_long_trans/expect | 2 +
|
||||
tests/j_long_trans_mcsum_32bit/expect | 2 +
|
||||
tests/j_long_trans_mcsum_64bit/expect | 2 +
|
||||
tests/j_recover_csum2_32bit/expect.1 | 2 +
|
||||
tests/j_recover_csum2_64bit/expect.1 | 2 +
|
||||
tests/j_short_trans/expect | 2 +
|
||||
tests/j_short_trans_64bit/expect | 2 +
|
||||
tests/j_short_trans_mcsum_64bit/expect | 2 +
|
||||
tests/j_short_trans_old_csum/expect | 2 +
|
||||
tests/j_short_trans_open_recover/expect | 2 +
|
||||
tests/j_short_trans_recover/expect | 2 +
|
||||
.../j_short_trans_recover_mcsum_64bit/expect | 2 +
|
||||
tests/t_replay_and_set/expect | 2 +
|
||||
29 files changed, 113 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/e2fsck/pass5.c b/e2fsck/pass5.c
|
||||
index 7803e8b8..81009097 100644
|
||||
--- a/e2fsck/pass5.c
|
||||
+++ b/e2fsck/pass5.c
|
||||
@@ -838,6 +838,7 @@ static void check_inode_end(e2fsck_t ctx)
|
||||
ext2_filsys fs = ctx->fs;
|
||||
ext2_ino_t end, save_inodes_count, i;
|
||||
struct problem_context pctx;
|
||||
+ int asked = 0;
|
||||
|
||||
clear_problem_context(&pctx);
|
||||
|
||||
@@ -851,11 +852,12 @@ static void check_inode_end(e2fsck_t ctx)
|
||||
return;
|
||||
}
|
||||
if (save_inodes_count == end)
|
||||
- return;
|
||||
+ goto check_intra_bg_tail;
|
||||
|
||||
/* protect loop from wrap-around if end is maxed */
|
||||
for (i = save_inodes_count + 1; i <= end && i > save_inodes_count; i++) {
|
||||
if (!ext2fs_test_inode_bitmap(fs->inode_map, i)) {
|
||||
+ asked = 1;
|
||||
if (fix_problem(ctx, PR_5_INODE_BMAP_PADDING, &pctx)) {
|
||||
for (; i <= end; i++)
|
||||
ext2fs_mark_inode_bitmap(fs->inode_map,
|
||||
@@ -875,6 +877,20 @@ static void check_inode_end(e2fsck_t ctx)
|
||||
ctx->flags |= E2F_FLAG_ABORT; /* fatal */
|
||||
return;
|
||||
}
|
||||
+ /*
|
||||
+ * If the number of inodes per block group != blocksize, we
|
||||
+ * can also have a potential problem with the tail bits in
|
||||
+ * each individual inode bitmap block. If there is a problem,
|
||||
+ * it would have been noticed when the bitmap was loaded. And
|
||||
+ * fixing this is easy; all we need to do force the bitmap to
|
||||
+ * be written back to disk.
|
||||
+ */
|
||||
+check_intra_bg_tail:
|
||||
+ if (!asked && fs->flags & EXT2_FLAG_IBITMAP_TAIL_PROBLEM)
|
||||
+ if (fix_problem(ctx, PR_5_INODE_BMAP_PADDING, &pctx))
|
||||
+ ext2fs_mark_ib_dirty(fs);
|
||||
+ else
|
||||
+ ext2fs_unmark_valid(fs);
|
||||
}
|
||||
|
||||
static void check_block_end(e2fsck_t ctx)
|
||||
@@ -882,6 +898,7 @@ static void check_block_end(e2fsck_t ctx)
|
||||
ext2_filsys fs = ctx->fs;
|
||||
blk64_t end, save_blocks_count, i;
|
||||
struct problem_context pctx;
|
||||
+ int asked = 0;
|
||||
|
||||
clear_problem_context(&pctx);
|
||||
|
||||
@@ -896,12 +913,13 @@ static void check_block_end(e2fsck_t ctx)
|
||||
return;
|
||||
}
|
||||
if (save_blocks_count == end)
|
||||
- return;
|
||||
+ goto check_intra_bg_tail;
|
||||
|
||||
/* Protect loop from wrap-around if end is maxed */
|
||||
for (i = save_blocks_count + 1; i <= end && i > save_blocks_count; i++) {
|
||||
if (!ext2fs_test_block_bitmap2(fs->block_map,
|
||||
EXT2FS_C2B(fs, i))) {
|
||||
+ asked = 1;
|
||||
if (fix_problem(ctx, PR_5_BLOCK_BMAP_PADDING, &pctx)) {
|
||||
for (; i <= end; i++)
|
||||
ext2fs_mark_block_bitmap2(fs->block_map,
|
||||
@@ -921,7 +939,19 @@ static void check_block_end(e2fsck_t ctx)
|
||||
ctx->flags |= E2F_FLAG_ABORT; /* fatal */
|
||||
return;
|
||||
}
|
||||
+ /*
|
||||
+ * If the number of blocks per block group != blocksize, we
|
||||
+ * can also have a potential problem with the tail bits in
|
||||
+ * each individual block bitmap block. If there is a problem,
|
||||
+ * it would have been noticed when the bitmap was loaded. And
|
||||
+ * fixing this is easy; all we need to do force the bitmap to
|
||||
+ * be written back to disk.
|
||||
+ */
|
||||
+check_intra_bg_tail:
|
||||
+ if (!asked && fs->flags & EXT2_FLAG_BBITMAP_TAIL_PROBLEM) {
|
||||
+ if (fix_problem(ctx, PR_5_BLOCK_BMAP_PADDING, &pctx))
|
||||
+ ext2fs_mark_bb_dirty(fs);
|
||||
+ else
|
||||
+ ext2fs_unmark_valid(fs);
|
||||
+ }
|
||||
}
|
||||
-
|
||||
-
|
||||
-
|
||||
diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
|
||||
index 96735c8e..285eb5e1 100644
|
||||
--- a/lib/ext2fs/ext2fs.h
|
||||
+++ b/lib/ext2fs/ext2fs.h
|
||||
@@ -199,6 +199,8 @@ typedef struct ext2_file *ext2_file_t;
|
||||
#define EXT2_FLAG_IGNORE_CSUM_ERRORS 0x200000
|
||||
#define EXT2_FLAG_SHARE_DUP 0x400000
|
||||
#define EXT2_FLAG_IGNORE_SB_ERRORS 0x800000
|
||||
+#define EXT2_FLAG_BBITMAP_TAIL_PROBLEM 0x1000000
|
||||
+#define EXT2_FLAG_IBITMAP_TAIL_PROBLEM 0x2000000
|
||||
|
||||
/*
|
||||
* Special flag in the ext2 inode i_flag field that means that this is
|
||||
diff --git a/lib/ext2fs/rw_bitmaps.c b/lib/ext2fs/rw_bitmaps.c
|
||||
index e86bacd5..f1c4188b 100644
|
||||
--- a/lib/ext2fs/rw_bitmaps.c
|
||||
+++ b/lib/ext2fs/rw_bitmaps.c
|
||||
@@ -195,6 +195,16 @@ static errcode_t mark_uninit_bg_group_blocks(ext2_filsys fs)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int bitmap_tail_verify(unsigned char *bitmap, int first, int last)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = first; i <= last; i++)
|
||||
+ if (bitmap[i] != 0xff)
|
||||
+ return 0;
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
|
||||
{
|
||||
dgrp_t i;
|
||||
@@ -203,6 +213,7 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
|
||||
errcode_t retval;
|
||||
int block_nbytes = EXT2_CLUSTERS_PER_GROUP(fs->super) / 8;
|
||||
int inode_nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8;
|
||||
+ int tail_flags = 0;
|
||||
int csum_flag;
|
||||
unsigned int cnt;
|
||||
blk64_t blk;
|
||||
@@ -315,6 +326,9 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
|
||||
EXT2_ET_BLOCK_BITMAP_CSUM_INVALID;
|
||||
goto cleanup;
|
||||
}
|
||||
+ if (!bitmap_tail_verify((unsigned char *) block_bitmap,
|
||||
+ block_nbytes, fs->blocksize - 1))
|
||||
+ tail_flags |= EXT2_FLAG_BBITMAP_TAIL_PROBLEM;
|
||||
} else
|
||||
memset(block_bitmap, 0, block_nbytes);
|
||||
cnt = block_nbytes << 3;
|
||||
@@ -347,6 +361,9 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
|
||||
EXT2_ET_INODE_BITMAP_CSUM_INVALID;
|
||||
goto cleanup;
|
||||
}
|
||||
+ if (!bitmap_tail_verify((unsigned char *) inode_bitmap,
|
||||
+ inode_nbytes, fs->blocksize - 1))
|
||||
+ tail_flags |= EXT2_FLAG_IBITMAP_TAIL_PROBLEM;
|
||||
} else
|
||||
memset(inode_bitmap, 0, inode_nbytes);
|
||||
cnt = inode_nbytes << 3;
|
||||
@@ -366,10 +383,15 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
|
||||
}
|
||||
|
||||
success_cleanup:
|
||||
- if (inode_bitmap)
|
||||
+ if (inode_bitmap) {
|
||||
ext2fs_free_mem(&inode_bitmap);
|
||||
- if (block_bitmap)
|
||||
+ fs->flags &= ~EXT2_FLAG_IBITMAP_TAIL_PROBLEM;
|
||||
+ }
|
||||
+ if (block_bitmap) {
|
||||
ext2fs_free_mem(&block_bitmap);
|
||||
+ fs->flags &= ~EXT2_FLAG_BBITMAP_TAIL_PROBLEM;
|
||||
+ }
|
||||
+ fs->flags |= tail_flags;
|
||||
return 0;
|
||||
|
||||
cleanup:
|
||||
diff --git a/tests/f_bitmaps/expect.1 b/tests/f_bitmaps/expect.1
|
||||
index 715984d4..2e91113d 100644
|
||||
--- a/tests/f_bitmaps/expect.1
|
||||
+++ b/tests/f_bitmaps/expect.1
|
||||
@@ -11,6 +11,8 @@ Fix? yes
|
||||
Inode bitmap differences: +11 -15
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/32 files (9.1% non-contiguous), 22/100 blocks
|
||||
diff --git a/tests/f_dup/expect.1 b/tests/f_dup/expect.1
|
||||
index 075e62c1..635a0dfc 100644
|
||||
--- a/tests/f_dup/expect.1
|
||||
+++ b/tests/f_dup/expect.1
|
||||
@@ -30,6 +30,8 @@ Fix? yes
|
||||
Free blocks count wrong (62, counted=60).
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
Padding at end of block bitmap is not set. Fix? yes
|
||||
|
||||
|
||||
diff --git a/tests/f_dup2/expect.1 b/tests/f_dup2/expect.1
|
||||
index 69aa21b4..04d7304b 100644
|
||||
--- a/tests/f_dup2/expect.1
|
||||
+++ b/tests/f_dup2/expect.1
|
||||
@@ -37,6 +37,8 @@ Fix? yes
|
||||
Free blocks count wrong (26, counted=22).
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
Padding at end of block bitmap is not set. Fix? yes
|
||||
|
||||
|
||||
diff --git a/tests/f_dup3/expect.1 b/tests/f_dup3/expect.1
|
||||
index eab75a8d..5f79cb89 100644
|
||||
--- a/tests/f_dup3/expect.1
|
||||
+++ b/tests/f_dup3/expect.1
|
||||
@@ -39,6 +39,8 @@ Fix? yes
|
||||
Free blocks count wrong (20, counted=19).
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 16/16 files (25.0% non-contiguous), 81/100 blocks
|
||||
diff --git a/tests/f_end-bitmap/expect.1 b/tests/f_end-bitmap/expect.1
|
||||
index 87e2fd64..85c7e67f 100644
|
||||
--- a/tests/f_end-bitmap/expect.1
|
||||
+++ b/tests/f_end-bitmap/expect.1
|
||||
@@ -8,6 +8,8 @@ Pass 5: Checking group summary information
|
||||
Free blocks count wrong for group #0 (44, counted=63).
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
Padding at end of block bitmap is not set. Fix? yes
|
||||
|
||||
|
||||
diff --git a/tests/f_illbbitmap/expect.1 b/tests/f_illbbitmap/expect.1
|
||||
index 8746d23a..40996cd6 100644
|
||||
--- a/tests/f_illbbitmap/expect.1
|
||||
+++ b/tests/f_illbbitmap/expect.1
|
||||
@@ -22,6 +22,8 @@ Fix? yes
|
||||
Inode bitmap differences: -(12--21)
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/32 files (0.0% non-contiguous), 22/100 blocks
|
||||
diff --git a/tests/f_illibitmap/expect.1 b/tests/f_illibitmap/expect.1
|
||||
index 5bae25d1..bf21df7a 100644
|
||||
--- a/tests/f_illibitmap/expect.1
|
||||
+++ b/tests/f_illibitmap/expect.1
|
||||
@@ -19,6 +19,8 @@ Pass 5: Checking group summary information
|
||||
Inode bitmap differences: +(1--11)
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/32 files (0.0% non-contiguous), 22/100 blocks
|
||||
diff --git a/tests/f_illitable_flexbg/expect.1 b/tests/f_illitable_flexbg/expect.1
|
||||
index fa42a0f8..4ac12463 100644
|
||||
--- a/tests/f_illitable_flexbg/expect.1
|
||||
+++ b/tests/f_illitable_flexbg/expect.1
|
||||
@@ -18,6 +18,8 @@ Pass 5: Checking group summary information
|
||||
Inode bitmap differences: -(65--128)
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 12/256 files (0.0% non-contiguous), 31163/32768 blocks
|
||||
diff --git a/tests/f_lpf/expect.1 b/tests/f_lpf/expect.1
|
||||
index 4f2853c5..6ef996bb 100644
|
||||
--- a/tests/f_lpf/expect.1
|
||||
+++ b/tests/f_lpf/expect.1
|
||||
@@ -42,6 +42,8 @@ Fix? yes
|
||||
Free inodes count wrong (1, counted=0).
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 16/16 files (12.5% non-contiguous), 67/100 blocks
|
||||
diff --git a/tests/f_overfsblks/expect.1 b/tests/f_overfsblks/expect.1
|
||||
index e5b93f0d..bc8f2a87 100644
|
||||
--- a/tests/f_overfsblks/expect.1
|
||||
+++ b/tests/f_overfsblks/expect.1
|
||||
@@ -13,6 +13,8 @@ Pass 5: Checking group summary information
|
||||
Inode bitmap differences: -(12--21)
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/32 files (0.0% non-contiguous), 22/100 blocks
|
||||
diff --git a/tests/f_super_bad_csum/expect.1 b/tests/f_super_bad_csum/expect.1
|
||||
index 25ced5c8..12adee97 100644
|
||||
--- a/tests/f_super_bad_csum/expect.1
|
||||
+++ b/tests/f_super_bad_csum/expect.1
|
||||
@@ -5,8 +5,8 @@ Pass 2: Checking directory structure
|
||||
Pass 3: Checking directory connectivity
|
||||
Pass 4: Checking reference counts
|
||||
Pass 5: Checking group summary information
|
||||
-Inode bitmap differences: Group 1 inode bitmap does not match checksum.
|
||||
-FIXED.
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/1024 files (0.0% non-contiguous), 1557/16384 blocks
|
||||
diff --git a/tests/j_corrupt_ext_jnl_sb_csum/expect b/tests/j_corrupt_ext_jnl_sb_csum/expect
|
||||
index 70a4fe72..4212a000 100644
|
||||
--- a/tests/j_corrupt_ext_jnl_sb_csum/expect
|
||||
+++ b/tests/j_corrupt_ext_jnl_sb_csum/expect
|
||||
@@ -12,6 +12,8 @@ Fix? yes
|
||||
Inode bitmap differences: +(1--11)
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/128 files (0.0% non-contiguous), 66/2048 blocks
|
||||
diff --git a/tests/j_ext_long_trans/expect b/tests/j_ext_long_trans/expect
|
||||
index d379610e..ea3c87fc 100644
|
||||
--- a/tests/j_ext_long_trans/expect
|
||||
+++ b/tests/j_ext_long_trans/expect
|
||||
@@ -98,6 +98,8 @@ Fix? yes
|
||||
Free inodes count wrong (16372, counted=16373).
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/16384 files (0.0% non-contiguous), 6228/262144 blocks
|
||||
diff --git a/tests/j_long_trans/expect b/tests/j_long_trans/expect
|
||||
index 7a175414..82b3caf1 100644
|
||||
--- a/tests/j_long_trans/expect
|
||||
+++ b/tests/j_long_trans/expect
|
||||
@@ -96,6 +96,8 @@ Fix? yes
|
||||
Free inodes count wrong (16372, counted=16373).
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
Recreate journal? yes
|
||||
|
||||
Creating journal (8192 blocks): Done.
|
||||
diff --git a/tests/j_long_trans_mcsum_32bit/expect b/tests/j_long_trans_mcsum_32bit/expect
|
||||
index a808d9f4..ffae07a6 100644
|
||||
--- a/tests/j_long_trans_mcsum_32bit/expect
|
||||
+++ b/tests/j_long_trans_mcsum_32bit/expect
|
||||
@@ -135,6 +135,8 @@ Fix? yes
|
||||
Free inodes count wrong (32756, counted=32757).
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
Recreate journal? yes
|
||||
|
||||
Creating journal (16384 blocks): Done.
|
||||
diff --git a/tests/j_long_trans_mcsum_64bit/expect b/tests/j_long_trans_mcsum_64bit/expect
|
||||
index 76e109a4..e891def1 100644
|
||||
--- a/tests/j_long_trans_mcsum_64bit/expect
|
||||
+++ b/tests/j_long_trans_mcsum_64bit/expect
|
||||
@@ -134,6 +134,8 @@ Fix? yes
|
||||
Free inodes count wrong (32756, counted=32757).
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
Recreate journal? yes
|
||||
|
||||
Creating journal (16384 blocks): Done.
|
||||
diff --git a/tests/j_recover_csum2_32bit/expect.1 b/tests/j_recover_csum2_32bit/expect.1
|
||||
index 491784a2..fdbda36e 100644
|
||||
--- a/tests/j_recover_csum2_32bit/expect.1
|
||||
+++ b/tests/j_recover_csum2_32bit/expect.1
|
||||
@@ -10,6 +10,8 @@ Fix? yes
|
||||
Inode bitmap differences: +(1--11)
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/8192 files (0.0% non-contiguous), 7739/131072 blocks
|
||||
diff --git a/tests/j_recover_csum2_64bit/expect.1 b/tests/j_recover_csum2_64bit/expect.1
|
||||
index 491784a2..fdbda36e 100644
|
||||
--- a/tests/j_recover_csum2_64bit/expect.1
|
||||
+++ b/tests/j_recover_csum2_64bit/expect.1
|
||||
@@ -10,6 +10,8 @@ Fix? yes
|
||||
Inode bitmap differences: +(1--11)
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/8192 files (0.0% non-contiguous), 7739/131072 blocks
|
||||
diff --git a/tests/j_short_trans/expect b/tests/j_short_trans/expect
|
||||
index bcc8fe82..2bd0e506 100644
|
||||
--- a/tests/j_short_trans/expect
|
||||
+++ b/tests/j_short_trans/expect
|
||||
@@ -32,6 +32,8 @@ Fix? yes
|
||||
Inode bitmap differences: +(1--11)
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
|
||||
diff --git a/tests/j_short_trans_64bit/expect b/tests/j_short_trans_64bit/expect
|
||||
index f9971eba..808dc61d 100644
|
||||
--- a/tests/j_short_trans_64bit/expect
|
||||
+++ b/tests/j_short_trans_64bit/expect
|
||||
@@ -34,6 +34,8 @@ Fix? yes
|
||||
Inode bitmap differences: +(1--11)
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/16384 files (0.0% non-contiguous), 5196/65536 blocks
|
||||
diff --git a/tests/j_short_trans_mcsum_64bit/expect b/tests/j_short_trans_mcsum_64bit/expect
|
||||
index d876ff09..d73e2829 100644
|
||||
--- a/tests/j_short_trans_mcsum_64bit/expect
|
||||
+++ b/tests/j_short_trans_mcsum_64bit/expect
|
||||
@@ -34,6 +34,8 @@ Fix? yes
|
||||
Inode bitmap differences: +(1--11)
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/32768 files (0.0% non-contiguous), 6353/131072 blocks
|
||||
diff --git a/tests/j_short_trans_old_csum/expect b/tests/j_short_trans_old_csum/expect
|
||||
index 29ac27fb..6cf06d4a 100644
|
||||
--- a/tests/j_short_trans_old_csum/expect
|
||||
+++ b/tests/j_short_trans_old_csum/expect
|
||||
@@ -34,6 +34,8 @@ Fix? yes
|
||||
Inode bitmap differences: +(1--11)
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
|
||||
diff --git a/tests/j_short_trans_open_recover/expect b/tests/j_short_trans_open_recover/expect
|
||||
index be6e363d..3e868197 100644
|
||||
--- a/tests/j_short_trans_open_recover/expect
|
||||
+++ b/tests/j_short_trans_open_recover/expect
|
||||
@@ -37,6 +37,8 @@ Fix? yes
|
||||
Inode bitmap differences: +(1--11)
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
|
||||
diff --git a/tests/j_short_trans_recover/expect b/tests/j_short_trans_recover/expect
|
||||
index 75867337..508858c9 100644
|
||||
--- a/tests/j_short_trans_recover/expect
|
||||
+++ b/tests/j_short_trans_recover/expect
|
||||
@@ -34,6 +34,8 @@ Fix? yes
|
||||
Inode bitmap differences: +(1--11)
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
|
||||
diff --git a/tests/j_short_trans_recover_mcsum_64bit/expect b/tests/j_short_trans_recover_mcsum_64bit/expect
|
||||
index 9cc33097..8c637f12 100644
|
||||
--- a/tests/j_short_trans_recover_mcsum_64bit/expect
|
||||
+++ b/tests/j_short_trans_recover_mcsum_64bit/expect
|
||||
@@ -36,6 +36,8 @@ Fix? yes
|
||||
Inode bitmap differences: +(1--11)
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/32768 files (0.0% non-contiguous), 6353/131072 blocks
|
||||
diff --git a/tests/t_replay_and_set/expect b/tests/t_replay_and_set/expect
|
||||
index f63a73af..3e19d92e 100644
|
||||
--- a/tests/t_replay_and_set/expect
|
||||
+++ b/tests/t_replay_and_set/expect
|
||||
@@ -30,6 +30,8 @@ Fix? yes
|
||||
Inode bitmap differences: +(1--11)
|
||||
Fix? yes
|
||||
|
||||
+Padding at end of inode bitmap is not set. Fix? yes
|
||||
+
|
||||
|
||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
||||
test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
|
||||
--
|
||||
2.20.1
|
||||
|
@ -0,0 +1,35 @@
|
||||
From 90557d26c6282e8171b422966860eb5594b82eb5 Mon Sep 17 00:00:00 2001
|
||||
From: Theodore Ts'o <tytso@mit.edu>
|
||||
Date: Fri, 10 May 2019 19:21:03 -0400
|
||||
Subject: [PATCH 4/4] e2fsck: remove an potentially ambiguous dangling else
|
||||
clause
|
||||
|
||||
This doesn't actually fix a bug or change behavior, but it removes a
|
||||
clang warning.
|
||||
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
e2fsck/pass5.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/e2fsck/pass5.c b/e2fsck/pass5.c
|
||||
index 81009097..3a5c88da 100644
|
||||
--- a/e2fsck/pass5.c
|
||||
+++ b/e2fsck/pass5.c
|
||||
@@ -886,11 +886,12 @@ static void check_inode_end(e2fsck_t ctx)
|
||||
* be written back to disk.
|
||||
*/
|
||||
check_intra_bg_tail:
|
||||
- if (!asked && fs->flags & EXT2_FLAG_IBITMAP_TAIL_PROBLEM)
|
||||
+ if (!asked && fs->flags & EXT2_FLAG_IBITMAP_TAIL_PROBLEM) {
|
||||
if (fix_problem(ctx, PR_5_INODE_BMAP_PADDING, &pctx))
|
||||
ext2fs_mark_ib_dirty(fs);
|
||||
else
|
||||
ext2fs_unmark_valid(fs);
|
||||
+ }
|
||||
}
|
||||
|
||||
static void check_block_end(e2fsck_t ctx)
|
||||
--
|
||||
2.20.1
|
||||
|
@ -0,0 +1,187 @@
|
||||
From c86892cb20129e3925fb16c228fb7433332371ce Mon Sep 17 00:00:00 2001
|
||||
From: Artem Blagodarenko <artem.blagodarenko@gmail.com>
|
||||
Date: Wed, 6 Mar 2019 11:52:13 -0500
|
||||
Subject: [PATCH 3/4] e2image: add -b and -B options to specify where to find
|
||||
the superblock
|
||||
|
||||
e2image has no ability to use superblock backup to copy metadata.
|
||||
This feature can be useful if someone wants to make partition
|
||||
image and fix it using e2fsck utility.
|
||||
|
||||
New -b option allows to pass superblock number, like e2fsck utility does.
|
||||
e2image doesn't change primary superblock and store it as is, so
|
||||
it can be fixed using e2fsck latter. Option -B allows setting
|
||||
superblock size.
|
||||
|
||||
Signed-off-by: Artem Blagodarenko <c17828@cray.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
misc/e2image.8.in | 33 +++++++++++++++++++++++++++++++++
|
||||
misc/e2image.c | 43 +++++++++++++++++++++++++++++++++++++------
|
||||
2 files changed, 70 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/misc/e2image.8.in b/misc/e2image.8.in
|
||||
index a7bfdf24..bbbb57ae 100644
|
||||
--- a/misc/e2image.8.in
|
||||
+++ b/misc/e2image.8.in
|
||||
@@ -12,6 +12,15 @@ e2image \- Save critical ext2/ext3/ext4 filesystem metadata to a file
|
||||
]
|
||||
[
|
||||
.B \-f
|
||||
+.B \-b
|
||||
+.I superblock
|
||||
+]
|
||||
+[
|
||||
+.B \-B
|
||||
+.I blocksize
|
||||
+]
|
||||
+[
|
||||
+.B \-fr
|
||||
]
|
||||
.I device
|
||||
.I image-file
|
||||
@@ -167,6 +176,22 @@ the
|
||||
option will prevent analysis of problems related to hash-tree indexed
|
||||
directories.
|
||||
.PP
|
||||
+Option
|
||||
+.B \-b
|
||||
+.I superblock
|
||||
+can be used to get image from partition with broken primary superblock.
|
||||
+The partition is copied as-is including broken primary superblock.
|
||||
+.PP
|
||||
+Option
|
||||
+.B \-B
|
||||
+.I blocksize
|
||||
+can be used to set superblock block size. Normally, e2fsck will search
|
||||
+for the superblock at various different block sizes in an attempt to find
|
||||
+the appropriate blocksize. This search can be fooled in some cases. This
|
||||
+option forces e2fsck to only try locating the superblock at a particular
|
||||
+blocksize. If the superblock is not found, e2fsck will terminate with a
|
||||
+fatal error.
|
||||
+.PP
|
||||
Note that this will work even if you substitute "/dev/hda1" for another raw
|
||||
disk image, or QCOW2 image previously created by
|
||||
.BR e2image .
|
||||
@@ -217,6 +242,14 @@ This can be useful to write a qcow2 image containing all data to a
|
||||
sparse image file where it can be loop mounted, or to a disk partition.
|
||||
Note that this may not work with qcow2 images not generated by e2image.
|
||||
.PP
|
||||
+Options
|
||||
+.B \-b
|
||||
+.I superblock
|
||||
+and
|
||||
+.B \-B
|
||||
+.I blocksize
|
||||
+can be used same way as for raw images.
|
||||
+.PP
|
||||
.SH INCLUDING DATA
|
||||
Normally
|
||||
.B e2image
|
||||
diff --git a/misc/e2image.c b/misc/e2image.c
|
||||
index 9e21d0db..3c881fee 100644
|
||||
--- a/misc/e2image.c
|
||||
+++ b/misc/e2image.c
|
||||
@@ -104,7 +104,8 @@ static int get_bits_from_size(size_t size)
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
- fprintf(stderr, _("Usage: %s [ -r|Q ] [ -f ] device image-file\n"),
|
||||
+ fprintf(stderr, _("Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize]"
|
||||
+ "[ -fr ] device image-file\n"),
|
||||
program_name);
|
||||
fprintf(stderr, _(" %s -I device image-file\n"), program_name);
|
||||
fprintf(stderr, _(" %s -ra [ -cfnp ] [ -o src_offset ] "
|
||||
@@ -1267,7 +1268,8 @@ static void output_qcow2_meta_data_blocks(ext2_filsys fs, int fd)
|
||||
free_qcow2_image(img);
|
||||
}
|
||||
|
||||
-static void write_raw_image_file(ext2_filsys fs, int fd, int type, int flags)
|
||||
+static void write_raw_image_file(ext2_filsys fs, int fd, int type, int flags,
|
||||
+ blk64_t superblock)
|
||||
{
|
||||
struct process_block_struct pb;
|
||||
struct ext2_inode inode;
|
||||
@@ -1295,6 +1297,22 @@ static void write_raw_image_file(ext2_filsys fs, int fd, int type, int flags)
|
||||
}
|
||||
}
|
||||
|
||||
+ if (superblock) {
|
||||
+ int j;
|
||||
+
|
||||
+ ext2fs_mark_block_bitmap2(meta_block_map, superblock);
|
||||
+ meta_blocks_count++;
|
||||
+
|
||||
+ /*
|
||||
+ * Mark the backup superblock descriptors
|
||||
+ */
|
||||
+ for (j = 0; j < fs->desc_blocks; j++) {
|
||||
+ ext2fs_mark_block_bitmap2(meta_block_map,
|
||||
+ ext2fs_descriptor_block_loc2(fs, superblock, j));
|
||||
+ }
|
||||
+ meta_blocks_count += fs->desc_blocks;
|
||||
+ }
|
||||
+
|
||||
mark_table_blocks(fs);
|
||||
if (show_progress)
|
||||
fprintf(stderr, "%s", _("Scanning inodes...\n"));
|
||||
@@ -1474,6 +1492,8 @@ int main (int argc, char ** argv)
|
||||
int ignore_rw_mount = 0;
|
||||
int check = 0;
|
||||
struct stat st;
|
||||
+ blk64_t superblock = 0;
|
||||
+ int blocksize = 0;
|
||||
|
||||
#ifdef ENABLE_NLS
|
||||
setlocale(LC_MESSAGES, "");
|
||||
@@ -1487,8 +1507,14 @@ int main (int argc, char ** argv)
|
||||
if (argc && *argv)
|
||||
program_name = *argv;
|
||||
add_error_table(&et_ext2_error_table);
|
||||
- while ((c = getopt(argc, argv, "nrsIQafo:O:pc")) != EOF)
|
||||
+ while ((c = getopt(argc, argv, "b:B:nrsIQafo:O:pc")) != EOF)
|
||||
switch (c) {
|
||||
+ case 'b':
|
||||
+ superblock = strtoull(optarg, NULL, 0);
|
||||
+ break;
|
||||
+ case 'B':
|
||||
+ blocksize = strtoul(optarg, NULL, 0);
|
||||
+ break;
|
||||
case 'I':
|
||||
flags |= E2IMAGE_INSTALL_FLAG;
|
||||
break;
|
||||
@@ -1540,6 +1566,11 @@ int main (int argc, char ** argv)
|
||||
"with raw or QCOW2 images."));
|
||||
exit(1);
|
||||
}
|
||||
+ if (superblock && !img_type) {
|
||||
+ com_err(program_name, 0, "%s", _("-b option can only be used "
|
||||
+ "with raw or QCOW2 images."));
|
||||
+ exit(1);
|
||||
+ }
|
||||
if ((source_offset || dest_offset) && img_type != E2IMAGE_RAW) {
|
||||
com_err(program_name, 0, "%s",
|
||||
_("Offsets are only allowed with raw images."));
|
||||
@@ -1590,8 +1621,8 @@ int main (int argc, char ** argv)
|
||||
}
|
||||
}
|
||||
sprintf(offset_opt, "offset=%llu", source_offset);
|
||||
- retval = ext2fs_open2(device_name, offset_opt, open_flag, 0, 0,
|
||||
- unix_io_manager, &fs);
|
||||
+ retval = ext2fs_open2(device_name, offset_opt, open_flag,
|
||||
+ superblock, blocksize, unix_io_manager, &fs);
|
||||
if (retval) {
|
||||
com_err (program_name, retval, _("while trying to open %s"),
|
||||
device_name);
|
||||
@@ -1681,7 +1712,7 @@ skip_device:
|
||||
exit(1);
|
||||
}
|
||||
if (img_type)
|
||||
- write_raw_image_file(fs, fd, img_type, flags);
|
||||
+ write_raw_image_file(fs, fd, img_type, flags, superblock);
|
||||
else
|
||||
write_image_file(fs, fd);
|
||||
|
||||
--
|
||||
2.20.1
|
||||
|
@ -0,0 +1,162 @@
|
||||
From 5fef457767fa876e29a5277e6c7428aa36c9ac61 Mon Sep 17 00:00:00 2001
|
||||
From: Theodore Ts'o <tytso@mit.edu>
|
||||
Date: Thu, 13 Dec 2018 00:51:51 -0500
|
||||
Subject: [PATCH 1/4] libext2fs: add ext2fs_{read,write}_inode2()
|
||||
|
||||
Add new library interface which allows the caller to control whether
|
||||
the inode checksum should be checked on inode read, or set on inode
|
||||
write.
|
||||
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
lib/ext2fs/ext2fs.h | 18 +++++++++++++++-
|
||||
lib/ext2fs/inode.c | 50 +++++++++++++++++++++++++++++----------------
|
||||
2 files changed, 49 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
|
||||
index c86596a6..96735c8e 100644
|
||||
--- a/lib/ext2fs/ext2fs.h
|
||||
+++ b/lib/ext2fs/ext2fs.h
|
||||
@@ -570,6 +570,16 @@ typedef struct ext2_icount *ext2_icount_t;
|
||||
*/
|
||||
#define BMAP_RET_UNINIT 0x0001
|
||||
|
||||
+/*
|
||||
+ * Flags for ext2fs_read_inode2
|
||||
+ */
|
||||
+#define READ_INODE_NOCSUM 0x0001
|
||||
+
|
||||
+/*
|
||||
+ * Flags for ext2fs_write_inode2
|
||||
+ */
|
||||
+#define WRITE_INODE_NOCSUM 0x0001
|
||||
+
|
||||
/*
|
||||
* Flags for imager.c functions
|
||||
*/
|
||||
@@ -1514,13 +1524,19 @@ extern int ext2fs_inode_scan_flags(ext2_inode_scan scan, int set_flags,
|
||||
extern errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
||||
struct ext2_inode * inode,
|
||||
int bufsize);
|
||||
-extern errcode_t ext2fs_read_inode (ext2_filsys fs, ext2_ino_t ino,
|
||||
+extern errcode_t ext2fs_read_inode(ext2_filsys fs, ext2_ino_t ino,
|
||||
struct ext2_inode * inode);
|
||||
+extern errcode_t ext2fs_read_inode2(ext2_filsys fs, ext2_ino_t ino,
|
||||
+ struct ext2_inode * inode,
|
||||
+ int bufsize, int flags);
|
||||
extern errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
||||
struct ext2_inode * inode,
|
||||
int bufsize);
|
||||
extern errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino,
|
||||
struct ext2_inode * inode);
|
||||
+extern errcode_t ext2fs_write_inode2(ext2_filsys fs, ext2_ino_t ino,
|
||||
+ struct ext2_inode * inode,
|
||||
+ int bufsize, int flags);
|
||||
extern errcode_t ext2fs_write_new_inode(ext2_filsys fs, ext2_ino_t ino,
|
||||
struct ext2_inode * inode);
|
||||
extern errcode_t ext2fs_get_blocks(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks);
|
||||
diff --git a/lib/ext2fs/inode.c b/lib/ext2fs/inode.c
|
||||
index 013c658e..2a4be739 100644
|
||||
--- a/lib/ext2fs/inode.c
|
||||
+++ b/lib/ext2fs/inode.c
|
||||
@@ -740,8 +740,9 @@ errcode_t ext2fs_get_next_inode(ext2_inode_scan scan, ext2_ino_t *ino,
|
||||
/*
|
||||
* Functions to read and write a single inode.
|
||||
*/
|
||||
-errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
||||
- struct ext2_inode * inode, int bufsize)
|
||||
+errcode_t ext2fs_read_inode2(ext2_filsys fs, ext2_ino_t ino,
|
||||
+ struct ext2_inode * inode, int bufsize,
|
||||
+ int flags)
|
||||
{
|
||||
blk64_t block_nr;
|
||||
dgrp_t group;
|
||||
@@ -850,21 +851,29 @@ errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
||||
}
|
||||
memcpy(inode, iptr, (bufsize > length) ? length : bufsize);
|
||||
|
||||
- if (!(fs->flags & EXT2_FLAG_IGNORE_CSUM_ERRORS) && fail_csum)
|
||||
+ if (!(fs->flags & EXT2_FLAG_IGNORE_CSUM_ERRORS) &&
|
||||
+ !(flags & READ_INODE_NOCSUM) && fail_csum)
|
||||
return EXT2_ET_INODE_CSUM_INVALID;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
+errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
||||
+ struct ext2_inode * inode, int bufsize)
|
||||
+{
|
||||
+ return ext2fs_read_inode2(fs, ino, inode, bufsize, 0);
|
||||
+}
|
||||
+
|
||||
errcode_t ext2fs_read_inode(ext2_filsys fs, ext2_ino_t ino,
|
||||
struct ext2_inode * inode)
|
||||
{
|
||||
- return ext2fs_read_inode_full(fs, ino, inode,
|
||||
- sizeof(struct ext2_inode));
|
||||
+ return ext2fs_read_inode2(fs, ino, inode,
|
||||
+ sizeof(struct ext2_inode), 0);
|
||||
}
|
||||
|
||||
-errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
||||
- struct ext2_inode * inode, int bufsize)
|
||||
+errcode_t ext2fs_write_inode2(ext2_filsys fs, ext2_ino_t ino,
|
||||
+ struct ext2_inode * inode, int bufsize,
|
||||
+ int flags)
|
||||
{
|
||||
blk64_t block_nr;
|
||||
dgrp_t group;
|
||||
@@ -895,12 +904,9 @@ errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
||||
|
||||
if (bufsize < length) {
|
||||
int old_flags = fs->flags;
|
||||
- fs->flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS;
|
||||
- retval = ext2fs_read_inode_full(fs, ino,
|
||||
- (struct ext2_inode *)w_inode,
|
||||
- length);
|
||||
- fs->flags = (old_flags & EXT2_FLAG_IGNORE_CSUM_ERRORS) |
|
||||
- (fs->flags & ~EXT2_FLAG_IGNORE_CSUM_ERRORS);
|
||||
+ retval = ext2fs_read_inode2(fs, ino,
|
||||
+ (struct ext2_inode *)w_inode,
|
||||
+ length, READ_INODE_NOCSUM);
|
||||
if (retval)
|
||||
goto errout;
|
||||
}
|
||||
@@ -930,9 +936,11 @@ errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
||||
ext2fs_swap_inode_full(fs, w_inode, w_inode, 1, length);
|
||||
#endif
|
||||
|
||||
- retval = ext2fs_inode_csum_set(fs, ino, w_inode);
|
||||
- if (retval)
|
||||
- goto errout;
|
||||
+ if ((flags & WRITE_INODE_NOCSUM) == 0) {
|
||||
+ retval = ext2fs_inode_csum_set(fs, ino, w_inode);
|
||||
+ if (retval)
|
||||
+ goto errout;
|
||||
+ }
|
||||
|
||||
group = (ino - 1) / EXT2_INODES_PER_GROUP(fs->super);
|
||||
offset = ((ino - 1) % EXT2_INODES_PER_GROUP(fs->super)) *
|
||||
@@ -989,11 +997,17 @@ errout:
|
||||
return retval;
|
||||
}
|
||||
|
||||
+errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
||||
+ struct ext2_inode * inode, int bufsize)
|
||||
+{
|
||||
+ return ext2fs_write_inode2(fs, ino, inode, bufsize, 0);
|
||||
+}
|
||||
+
|
||||
errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino,
|
||||
struct ext2_inode *inode)
|
||||
{
|
||||
- return ext2fs_write_inode_full(fs, ino, inode,
|
||||
- sizeof(struct ext2_inode));
|
||||
+ return ext2fs_write_inode2(fs, ino, inode,
|
||||
+ sizeof(struct ext2_inode), 0);
|
||||
}
|
||||
|
||||
/*
|
||||
--
|
||||
2.20.1
|
||||
|
@ -0,0 +1,28 @@
|
||||
From 75fceeee449a3a2ee158fee2a084d383f7360d1e Mon Sep 17 00:00:00 2001
|
||||
From: Eric Biggers <ebiggers@google.com>
|
||||
Date: Sun, 28 Apr 2019 20:37:45 -0400
|
||||
Subject: [PATCH 2/4] libext2fs: remove unused variable 'old_flags'
|
||||
|
||||
In ext2fs_write_inode2(), the 'old_flags' variable is never used.
|
||||
|
||||
Signed-off-by: Eric Biggers <ebiggers@google.com>
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
lib/ext2fs/inode.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/lib/ext2fs/inode.c b/lib/ext2fs/inode.c
|
||||
index 2a4be739..75df418d 100644
|
||||
--- a/lib/ext2fs/inode.c
|
||||
+++ b/lib/ext2fs/inode.c
|
||||
@@ -903,7 +903,6 @@ errcode_t ext2fs_write_inode2(ext2_filsys fs, ext2_ino_t ino,
|
||||
return retval;
|
||||
|
||||
if (bufsize < length) {
|
||||
- int old_flags = fs->flags;
|
||||
retval = ext2fs_read_inode2(fs, ino,
|
||||
(struct ext2_inode *)w_inode,
|
||||
length, READ_INODE_NOCSUM);
|
||||
--
|
||||
2.20.1
|
||||
|
@ -0,0 +1,51 @@
|
||||
From 0e1bff5983c675544e79ee9e449e597f397c15b0 Mon Sep 17 00:00:00 2001
|
||||
From: Theodore Ts'o <tytso@mit.edu>
|
||||
Date: Mon, 27 May 2019 19:36:15 -0400
|
||||
Subject: [PATCH] mke2fs: accept the english yes character to the proceed
|
||||
question
|
||||
|
||||
In some cases if the translation file is missing some translations,
|
||||
mke2fs can end up printing an English message, e.g.:
|
||||
|
||||
% LANG=it_IT.UTF-8 ./mke2fs /tmp/foo.img 8M
|
||||
mke2fs 1.45.1 (12-May-2019)
|
||||
/tmp/foo.img contiene un file system ext4
|
||||
created on Mon May 27 19:35:48 2019
|
||||
Proceed anyway? (y,N)
|
||||
|
||||
However, if there is a translation for string to match with "yY"
|
||||
(e.g., to "sS" for Italian), then 'y' won't work. Fix this by falling
|
||||
back to the english 'yY' characters.
|
||||
|
||||
Addresses-Debian-Bug: #907034
|
||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
||||
---
|
||||
misc/util.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/misc/util.c b/misc/util.c
|
||||
index 1d33883d..77991589 100644
|
||||
--- a/misc/util.c
|
||||
+++ b/misc/util.c
|
||||
@@ -91,6 +91,7 @@ void proceed_question(int delay)
|
||||
{
|
||||
char buf[256];
|
||||
const char *short_yes = _("yY");
|
||||
+ const char *english_yes = "yY";
|
||||
|
||||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
@@ -108,7 +109,9 @@ void proceed_question(int delay)
|
||||
fputs(_("Proceed anyway? (y,N) "), stdout);
|
||||
buf[0] = 0;
|
||||
if (!fgets(buf, sizeof(buf), stdin) ||
|
||||
- strchr(short_yes, buf[0]) == 0) {
|
||||
+ strchr(_("nN"), buf[0]) ||
|
||||
+ !(strchr(short_yes, buf[0]) ||
|
||||
+ strchr(english_yes, buf[0]))) {
|
||||
putc('\n', stdout);
|
||||
exit(1);
|
||||
}
|
||||
--
|
||||
2.20.1
|
||||
|
@ -1,13 +1,12 @@
|
||||
Summary: Utilities for managing ext2, ext3, and ext4 file systems
|
||||
Name: e2fsprogs
|
||||
Version: 1.44.3
|
||||
Release: 2%{?dist}
|
||||
Version: 1.44.6
|
||||
Release: 3%{?dist}
|
||||
|
||||
# License tags based on COPYING file distinctions for various components
|
||||
License: GPLv2
|
||||
Group: System Environment/Base
|
||||
Source0: https://www.kernel.org/pub/linux/kernel/people/tytso/%{name}/v%{version}/%{name}-%{version}.tar.xz
|
||||
Source1: tests-f_resize_inode_meta_bg-image.gz
|
||||
|
||||
Url: http://e2fsprogs.sourceforge.net/
|
||||
Requires: e2fsprogs-libs%{?_isa} = %{version}-%{release}
|
||||
@ -28,16 +27,15 @@ BuildRequires: libuuid-devel
|
||||
BuildRequires: gettext
|
||||
BuildRequires: multilib-rpm-config
|
||||
|
||||
Patch0: e2fsprogs-1.44.4-resize2fs-Remove-the-real-kilobytes-rant-from-man-pa.patch
|
||||
Patch1: e2fsprogs-1.44.4-debugfs-fix-ncheck-so-it-handles-hard-links-correctl.patch
|
||||
Patch2: e2fsprogs-1.44.4-e2fsck-remove-resize-inode-if-both-resize_inode-and-.patch
|
||||
Patch3: e2fsprogs-1.44.4-remove-unused-datarootdir.patch
|
||||
Patch4: e2fsprogs-1.44.4-e2fsck-fix-fd-leak-in-reserve_stdio_fds.patch
|
||||
Patch5: e2fsprogs-1.44.4-tests-e2fsck-must-be-able-fix-fs-with-resize_inode-a.patch
|
||||
Patch6: e2fsprogs-1.44.4-tests-mke2fs-must-not-create-fs-with-resize_inode-an.patch
|
||||
Patch7: e2fsprogs-1.44.4-po-update-da.po-from-translationproject.org.patch
|
||||
Patch8: e2fsprogs-1.44.4-po-update-es.po-from-translationproject.org.patch
|
||||
Patch9: e2fsprogs-1.44.4-po-update-sv.po-from-translationproject.org.patch
|
||||
Patch0: e2fsprogs-1.44.6-libext2fs-add-ext2fs_-read-write-_inode2.patch
|
||||
Patch1: e2fsprogs-1.44.6-debugfs-fix-set_inode_field-so-it-can-set-the-checks.patch
|
||||
Patch2: e2fsprogs-1.44.6-e2image-add-b-and-B-options-to-specify-where-to-find.patch
|
||||
Patch3: e2fsprogs-1.44.6-debugfs-fix-printing-of-xattrs-with-ea_in_inode-valu.patch
|
||||
Patch4: e2fsprogs-1.44.6-debugfs-remove-unused-variable-tmp_inode.patch
|
||||
Patch5: e2fsprogs-1.44.6-libext2fs-remove-unused-variable-old_flags.patch
|
||||
Patch6: e2fsprogs-1.44.6-e2fsck-check-and-fix-tails-of-all-bitmap-blocks.patch
|
||||
Patch7: e2fsprogs-1.44.6-e2fsck-remove-an-potentially-ambiguous-dangling-else.patch
|
||||
Patch8: e2fsprogs-1.44.6-mke2fs-accept-the-english-yes-character-to-the-proce.patch
|
||||
|
||||
%description
|
||||
The e2fsprogs package contains a number of utilities for creating,
|
||||
@ -165,10 +163,6 @@ It was originally inspired by the Multics SubSystem library.
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
%patch9 -p1
|
||||
|
||||
# Copy the image for the f_resize_inode_meta_bg test
|
||||
cp %{SOURCE1} tests/f_resize_inode_meta_bg/image.gz
|
||||
|
||||
%build
|
||||
%configure CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" \
|
||||
@ -216,7 +210,7 @@ exit 0
|
||||
%postun -n libss -p /sbin/ldconfig
|
||||
|
||||
%files -f %{name}.lang
|
||||
%doc README RELEASE-NOTES
|
||||
%doc README
|
||||
%{!?_licensedir:%global license %%doc}
|
||||
|
||||
%config(noreplace) /etc/mke2fs.conf
|
||||
@ -331,6 +325,18 @@ exit 0
|
||||
%{_libdir}/pkgconfig/ss.pc
|
||||
|
||||
%changelog
|
||||
* Wed May 29 2019 Lukas Czerner <lczerner@redhat.com> 1.44.6-3
|
||||
- Backport fixes from 1.45.2 (#1714927)
|
||||
- Fix errors in rpmdiff (#1714923)
|
||||
|
||||
* Wed May 15 2019 Lukas Czerner <lczerner@redhat.com> 1.44.6-2
|
||||
- Backport fixes from 1.45.1
|
||||
|
||||
* Tue Apr 2 2019 Lukas Czerner <lczerner@redhat.com> 1.44.6-1
|
||||
- Rebase to the release 1.44.6 (#1695147)
|
||||
- Backport fixes from 1.45.0
|
||||
- Add gating.yaml (#1679654)
|
||||
|
||||
* Fri Dec 14 2018 Lukas Czerner <lczerner@redhat.com> 1.44.3-2
|
||||
- Backport fixes from upstream version 1.44.4 (#1659526)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user