Compare commits

...

10 Commits

Author SHA1 Message Date
openeuler-ci-bot
82e4113f7d
!224 [sync] PR-212: e2fsck-fix-acl-block-leak-when-process-orphan-list.patch
From: @openeuler-sync-bot 
Reviewed-by: @swf504 
Signed-off-by: @swf504
2024-06-01 08:55:44 +00:00
zhangjian
f34a9635c9 backport patches from mailline
(cherry picked from commit f54403d3ad38439015d9f524cd0b22177cdd6a8a)
2024-05-30 19:48:50 +08:00
openeuler-ci-bot
46336b8de1
!220 [sync] PR-205: 回合上游社区补丁
From: @openeuler-sync-bot 
Reviewed-by: @swf504 
Signed-off-by: @swf504
2024-05-30 11:47:14 +00:00
zhangxingrong
1d8a9f90df e2fsprogs: modify dumpe2fs to report free block ranges for bigalloc
(cherry picked from commit 491eee61810b65846fa07ada00d5428e669782f4)
2024-05-30 17:30:56 +08:00
openeuler-ci-bot
9779ca6902
!218 [sync] PR-197: backport patch from mainlin
From: @openeuler-sync-bot 
Reviewed-by: @swf504 
Signed-off-by: @swf504
2024-05-30 09:30:03 +00:00
Wenchao Hao
123acfedcf Backport patches from mainline
Signed-off-by: Wenchao Hao <haowenchao2@huawei.com>
(cherry picked from commit 871ef2f92166cfa7c569eb4fb1c42e10944d1589)
2024-05-30 15:03:46 +08:00
openeuler-ci-bot
727f634059
!214 [sync] PR-192: debugfs: Fix infinite loop when dump log
From: @openeuler-sync-bot 
Reviewed-by: @swf504 
Signed-off-by: @swf504
2024-05-30 07:01:10 +00:00
Wenchao Hao
f920f49010 debugfs: Fix infinite loop when dump log
There are 2 scenarios which would trigger infinite loop:

1. None log is recorded, then dumplog with "-n", for example:
   debugfs -R "logdump -O -n 10" /dev/xxx
   while /dev/xxx has no valid log recorded.
2. The log area is full and cycle write is triggered, then dumplog with
   debugfs -R "logdump -aOS" /dev/xxx

This patch add a new flag "reverse_flag" to mark if logdump has reached
to tail of logarea, it is default false, and set in macro WRAP().

If reverse_flag is true, and we comes to first_transaction_blocknr
again, just break the logdump loop.

Signed-off-by: Wenchao Hao <haowenchao2@huawei.com>
(cherry picked from commit c45fdac18e07017351b6c102d16b71b253bf7007)
2024-05-30 11:18:35 +08:00
openeuler-ci-bot
0e8345d1c8
!186 [sync] PR-169: Fix rpmlint Provides/Obsoletes unversioned warnings
From: @xin3liang 
Reviewed-by: @liuzhiqiang26 
Signed-off-by: @liuzhiqiang26
2023-11-09 09:40:10 +00:00
Xinliang Liu
8ee7a34400 Fix rpmlint Provides/Obsoletes unversioned warnings
It is recommended to specify version info for Provides/Obsoletes tags,
see Fedora rpm guide[1] for more details about Obsolete tag usage.

This also can fix below dnf update failure after installing lustre version
e2fsprogs rpm.
$ sudo dnf update
Last metadata expiration check: 0:00:29 ago on Tue Jul  4 11:06:44 2023.
Error:
 Problem 1: cannot install both e2fsprogs-1.46.5-4.oe1.aarch64 and e2fsprogs-1.46.6.wc1-0.oe1.aarch64
  - cannot install the best update candidate for package e2fsprogs-libs-1.46.6.wc1-0.oe1.aarch64
  - cannot install the best update candidate for package e2fsprogs-1.46.6.wc1-0.oe1.aarch64
 Problem 2: problem with installed package e2fsprogs-1.46.6.wc1-0.oe1.aarch64
  - cannot install both e2fsprogs-1.46.5-4.oe1.aarch64 and e2fsprogs-1.46.6.wc1-0.oe1.aarch64
  - cannot install the best update candidate for package libcom_err-1.46.6.wc1-0.oe1.aarch64
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to us
e not only best candidate packages)

[1] https://docs.fedoraproject.org/en-US/packaging-guidelines/#renaming-or-replacing-existing-packages

Signed-off-by: Xinliang Liu <xinliang.liu@linaro.org>
2023-11-09 03:32:30 +00:00
9 changed files with 564 additions and 14 deletions

View File

@ -0,0 +1,70 @@
From a1530ed61778e99da315cb10cea2c46d215b096f Mon Sep 17 00:00:00 2001
From: Wenchao Hao <haowenchao2@huawei.com>
Date: Tue, 19 Dec 2023 17:23:57 +0800
Subject: [PATCH] debugfs: Fix infinite loop when dump log
There are 2 scenarios which would trigger infinite loop:
1. None log is recorded, then dumplog with "-n", for example:
debugfs -R "logdump -O -n 10" /dev/xxx
while /dev/xxx has no valid log recorded.
2. The log area is full and cycle write is triggered, then dumplog with
debugfs -R "logdump -aOS" /dev/xxx
This patch add a new flag "reverse_flag" to mark if logdump has reached
to tail of logarea, it is default false, and set in macro WRAP().
If reverse_flag is true, and we comes to first_transaction_blocknr
again, just break the logdump loop.
Signed-off-by: Wenchao Hao <haowenchao2@huawei.com>
---
debugfs/logdump.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/debugfs/logdump.c b/debugfs/logdump.c
index 853be41..c4686ae 100644
--- a/debugfs/logdump.c
+++ b/debugfs/logdump.c
@@ -45,6 +45,7 @@ static int64_t dump_counts;
static blk64_t block_to_dump, bitmap_to_dump, inode_block_to_dump;
static unsigned int group_to_dump, inode_offset_to_dump;
static ext2_ino_t inode_to_dump;
+static bool reverse_flag;
struct journal_source
{
@@ -73,8 +74,10 @@ static void dump_fc_block(FILE *out_file, char *buf, int blocksize,
static void do_hexdump (FILE *, char *, int);
#define WRAP(jsb, blocknr, maxlen) \
- if (blocknr >= (maxlen)) \
- blocknr -= (maxlen - be32_to_cpu((jsb)->s_first));
+ if (blocknr >= (maxlen)) { \
+ blocknr -= (maxlen - be32_to_cpu((jsb)->s_first)); \
+ reverse_flag = true; \
+ }
void do_logdump(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
void *infop EXT2FS_ATTR((unused)))
@@ -108,6 +111,7 @@ void do_logdump(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
inode_block_to_dump = ANY_BLOCK;
inode_to_dump = -1;
dump_counts = -1;
+ reverse_flag = false;
reset_getopt();
while ((c = getopt (argc, argv, "ab:ci:f:OsSn:")) != EOF) {
@@ -470,8 +474,7 @@ static void dump_journal(char *cmdname, FILE *out_file,
if (dump_old && (dump_counts != -1) && (cur_counts >= dump_counts))
break;
- if ((blocknr == first_transaction_blocknr) &&
- (cur_counts != 0) && dump_old && (dump_counts != -1)) {
+ if ((blocknr == first_transaction_blocknr) && dump_old && reverse_flag) {
fprintf(out_file, "Dump all %lld journal records.\n", cur_counts);
break;
}
--
2.32.0

View File

@ -0,0 +1,49 @@
From 29d83fef9e6eab139516afe433c03d975e85c25b Mon Sep 17 00:00:00 2001
From: Srivathsa Dara <srivathsa.d.dara@oracle.com>
Date: Thu, 24 Aug 2023 06:56:34 +0000
Subject: [PATCH] debugfs: Use the hash_version from superblock if a file
system is opened
The debugfs program's dx_hash command computes the hash for the given
filename, taking the hash_seed and hash_version (i.e hash algorithm)
as arguments. So the user has to refer to the superblock to get these
values used by the filesystem. So if debugfs has an opened file
system, use those values from the current file system.
[ Fixed patch to avoid crashing when a file system is not opened. --TYT ]
Signed-off-by: Srivathsa Dara <srivathsa.d.dara@oracle.com>
Link: https://lore.kernel.org/r/20230824065634.2662858-1-srivathsa.d.dara@oracle.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
debugfs/htree.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/debugfs/htree.c b/debugfs/htree.c
index a9f9211b..a3e95ddb 100644
--- a/debugfs/htree.c
+++ b/debugfs/htree.c
@@ -336,11 +336,18 @@ void do_dx_hash(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
errcode_t err;
int c;
int hash_version = 0;
- __u32 hash_seed[4];
+ __u32 hash_seed[4] = { 0, };
int hash_flags = 0;
const struct ext2fs_nls_table *encoding = NULL;
- hash_seed[0] = hash_seed[1] = hash_seed[2] = hash_seed[3] = 0;
+ if (current_fs) {
+ hash_seed[0] = current_fs->super->s_hash_seed[0];
+ hash_seed[1] = current_fs->super->s_hash_seed[1];
+ hash_seed[2] = current_fs->super->s_hash_seed[2];
+ hash_seed[3] = current_fs->super->s_hash_seed[3];
+
+ hash_version = current_fs->super->s_def_hash_version;
+ }
reset_getopt();
while ((c = getopt(argc, argv, "h:s:ce:")) != EOF) {
--
2.32.0

View File

@ -0,0 +1,76 @@
From d5296ff0c665c1f957252ee18f824ad666a34b78 Mon Sep 17 00:00:00 2001
From: Baokun Li <libaokun1@huawei.com>
Date: Fri, 17 Feb 2023 18:09:22 +0800
Subject: [PATCH] tune2fs/fuse2fs/debugfs: save error information during
journal replay
Saving error information during journal replay, as in the kernel,
prevents information loss from making problems difficult to locate.
We save these error information until someone uses e2fsck to check
for and fix possible errors.
Signed-off-by: Baokun Li <libaokun1@huawei.com>
Reviewed-by: zhanchengbin <zhanchengbin1@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20230217100922.588961-3-libaokun1@huawei.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
debugfs/journal.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/debugfs/journal.c b/debugfs/journal.c
index 5bac0d3b..79e3fff8 100644
--- a/debugfs/journal.c
+++ b/debugfs/journal.c
@@ -789,6 +789,8 @@ errcode_t ext2fs_run_ext3_journal(ext2_filsys *fsp)
char *fsname;
int fsflags;
int fsblocksize;
+ char *save;
+ __u16 s_error_state;
if (!(fs->flags & EXT2_FLAG_RW))
return EXT2_ET_FILE_RO;
@@ -808,6 +810,12 @@ errcode_t ext2fs_run_ext3_journal(ext2_filsys *fsp)
if (stats && stats->bytes_written)
kbytes_written = stats->bytes_written >> 10;
+ save = malloc(EXT4_S_ERR_LEN);
+ if (save)
+ memcpy(save, ((char *) fs->super) + EXT4_S_ERR_START,
+ EXT4_S_ERR_LEN);
+ s_error_state = fs->super->s_state & EXT2_ERROR_FS;
+
ext2fs_mmp_stop(fs);
fsname = fs->device_name;
fs->device_name = NULL;
@@ -818,11 +826,15 @@ errcode_t ext2fs_run_ext3_journal(ext2_filsys *fsp)
retval = ext2fs_open(fsname, fsflags, 0, fsblocksize, io_ptr, fsp);
ext2fs_free_mem(&fsname);
if (retval)
- return retval;
+ goto outfree;
fs = *fsp;
fs->flags |= EXT2_FLAG_MASTER_SB_ONLY;
fs->super->s_kbytes_written += kbytes_written;
+ fs->super->s_state |= s_error_state;
+ if (save)
+ memcpy(((char *) fs->super) + EXT4_S_ERR_START, save,
+ EXT4_S_ERR_LEN);
/* Set the superblock flags */
ext2fs_clear_recover(fs, recover_retval != 0);
@@ -832,6 +844,9 @@ errcode_t ext2fs_run_ext3_journal(ext2_filsys *fsp)
* the EXT2_ERROR_FS flag in the fs superblock if needed.
*/
retval = ext2fs_check_ext3_journal(fs);
+
+outfree:
+ free(save);
return retval ? retval : recover_retval;
}
--
2.32.0

View File

@ -0,0 +1,34 @@
From 43a498e938887956f393b5e45ea6ac79cc5f4b84 Mon Sep 17 00:00:00 2001
From: Theodore Ts'o <tytso@mit.edu>
Date: Thu, 15 Jun 2023 00:17:01 -0400
Subject: [PATCH] resize2fs: use Direct I/O when reading the superblock for
online resizes
If the file system is mounted, the superblock can be changing while
resize2fs is trying to read the superblock, resulting in checksum
failures. One way of avoiding this problem is read the superblock
using Direct I/O, since the kernel makes sure that what gets written
to disk is self-consistent.
Suggested-by: Krister Johansen <kjlx@templeofstupid.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
resize/main.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/resize/main.c b/resize/main.c
index 94f5ec6d..f914c050 100644
--- a/resize/main.c
+++ b/resize/main.c
@@ -403,6 +403,8 @@ int main (int argc, char ** argv)
if (!(mount_flags & EXT2_MF_MOUNTED))
io_flags = EXT2_FLAG_RW | EXT2_FLAG_EXCLUSIVE;
+ if (mount_flags & EXT2_MF_MOUNTED)
+ io_flags |= EXT2_FLAG_DIRECT_IO;
io_flags |= EXT2_FLAG_64BITS | EXT2_FLAG_THREADS;
if (undo_file) {
--
2.32.0

View File

@ -0,0 +1,66 @@
From b31d5b582b4189a0ed27bced22276dd3f68c50a7 Mon Sep 17 00:00:00 2001
From: Eric Whitney <enwlinux@gmail.com>
Date: Fri, 21 Jul 2023 14:55:06 -0400
Subject: [PATCH] e2fsprogs: modify dumpe2fs to report free block ranges for
bigalloc
dumpe2fs has never been modified to correctly report block ranges
corresponding to free clusters in block allocation bitmaps from bigalloc
file systems. Rather than reporting block ranges covering all the
blocks in free clusters found in a block bitmap, it either reports just
the first block number in a cluster for a single free cluster, or a
range beginning with the first block number in the first cluster in a
series of free clusters, and ending with the first block number in the
last cluster in that series.
This behavior causes xfstest shared/298 to fail when run on a bigalloc
file system with a 1k block size. The test uses dumpe2fs to collect
a list of the blocks freed when files are deleted from a file system.
When the test deletes a file containing blocks located after the first
block in the last cluster in a series of clusters, dumpe2fs does not
report those blocks as free per the test's expectations.
Modify dumpe2fs to report full block ranges for free clusters. At the
same time, fix a small bug causing unnecessary !in_use() retests while
iterating over a block bitmap.
Signed-off-by: Eric Whitney <enwlinux@gmail.com>
Link: https://lore.kernel.org/r/20230721185506.1020225-1-enwlinux@gmail.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
misc/dumpe2fs.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/misc/dumpe2fs.c b/misc/dumpe2fs.c
index 7c080ed9f..d2d57fb0a 100644
--- a/misc/dumpe2fs.c
+++ b/misc/dumpe2fs.c
@@ -84,8 +84,7 @@ static void print_free(unsigned long group, char * bitmap,
unsigned long num, unsigned long offset, int ratio)
{
int p = 0;
- unsigned long i;
- unsigned long j;
+ unsigned long i, j;
offset /= ratio;
offset += group * num;
@@ -95,13 +94,14 @@ static void print_free(unsigned long group, char * bitmap,
if (p)
printf (", ");
print_number((i + offset) * ratio);
- for (j = i; j < num && !in_use (bitmap, j); j++)
+ for (j = i + 1; j < num && !in_use(bitmap, j); j++)
;
- if (--j != i) {
+ if (j != i + 1 || ratio > 1) {
fputc('-', stdout);
- print_number((j + offset) * ratio);
- i = j;
+ print_number(((j - 1 + offset) * ratio) +
+ ratio - 1);
}
+ i = j;
p = 1;
}
}

View File

@ -0,0 +1,72 @@
From 9058e09ee8d1543a185acdf0af4f72cb4d1b2aa7 Mon Sep 17 00:00:00 2001
From: Ye Bin <yebin10@huawei.com>
Date: Sat, 20 Apr 2024 16:10:16 +0800
Subject: [PATCH] e2fsck: fix acl block leak when process orphan list
There's a issue:
[]$~/e2fsprogs/e2fsck/e2fsck -f scsi-disk2.img
e2fsck 1.47.0 (5-Feb-2023)
scsi-disk2.img: recovering journal
Clearing orphaned inode 12 (uid=0, gid=0, mode=0140777, size=0)
Pass 1: Checking inodes, blocks, and sizes
Extended attribute block 4247 has reference count 3, should be 2. Fix<y>? no
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (249189, counted=249188).
Fix<y>? no
Free inodes count wrong (65526, counted=65523).
Fix<y>? no
scsi-disk2.img: ***** FILE SYSTEM WAS MODIFIED *****
scsi-disk2.img: ********** WARNING: Filesystem still has errors **********
scsi-disk2.img: 10/65536 files (0.0% non-contiguous), 12955/262144 blocks
Above issue can reproduce as follows:
step1: socat UNIX-LISTEN:/home/test/mysocket.sock,mode=777,reuseaddr,fork EXEC:/home/test &
step2: setfacl some xattr for mysocket.sock
step3: cp -a /home/test/mysocket.sock /home/test/sock1
cp -a /home/test/mysocket.sock /home/test/sock2
step4: sync
step5: Power-off
step6: run e2fsck
As after commit 42475e281d22 add ext2fs_inode_has_valid_blocks() judgement in
release_inode_blocks() which means socket type file skip realse block include
ACL block. The kernel does not restrict the setting of extended attributes for
socket files. So this will lead to ACL block leak.
To solve above issue there's need to release ACL block for other kind of
special file.
Fixes: 42475e281d22 ("super.c (release_inode_blocks): Don't try to release the blocks if the orphaned inode is a device file, symlink, or some other kind of special file that doesn't have a block list.")
Signed-off-by: Ye Bin <yebin10@huawei.com>
---
e2fsck/super.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/e2fsck/super.c b/e2fsck/super.c
index ec28426..79460d9 100644
--- a/e2fsck/super.c
+++ b/e2fsck/super.c
@@ -196,7 +196,7 @@ static int release_inode_blocks(e2fsck_t ctx, ext2_ino_t ino,
__u32 count;
if (!ext2fs_inode_has_valid_blocks2(fs, EXT2_INODE(inode)))
- return 0;
+ goto release_acl;
pb.buf = block_buf + 3 * ctx->fs->blocksize;
pb.ctx = ctx;
@@ -240,6 +240,7 @@ static int release_inode_blocks(e2fsck_t ctx, ext2_ino_t ino,
if (inode->i_links_count)
return 0;
+release_acl:
blk = ext2fs_file_acl_block(fs, EXT2_INODE(inode));
if (blk) {
retval = ext2fs_adjust_ea_refcount3(fs, blk, block_buf, -1,
--
2.33.0

View File

@ -0,0 +1,35 @@
From 1bd16e790308f92e89a5dfbd40ab9e164fe88aa9 Mon Sep 17 00:00:00 2001
From: Theodore Ts'o <tytso@mit.edu>
Date: Thu, 11 Aug 2022 22:16:41 -0400
Subject: [PATCH] e2fsck: when mutating file name make sure its length never
exceeds 255
E2fsck will attempt to mutate filenames to ensure uniqueness if
necessary. If there are two unique filenames that are 254 or 255
characters in length and do not contain the '~' character, the
mutate_name() function would create a filename which is 256 bytes
long, which is not a legal filename in Linux. Adjust the mutate_name
function to avoid this possibility.
Addresses-Coverity-Bug: 1500768
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
e2fsck/rehash.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/e2fsck/rehash.c b/e2fsck/rehash.c
index 8cc36f24..210cfdf2 100644
--- a/e2fsck/rehash.c
+++ b/e2fsck/rehash.c
@@ -414,6 +414,8 @@ static void mutate_name(char *str, unsigned int *len)
l += 2;
else
l = (l+3) & ~3;
+ if (l > 255)
+ l = 255;
str[l-2] = '~';
str[l-1] = '0';
*len = l;
--
2.33.0

View File

@ -0,0 +1,126 @@
From 265f88904e8d47658852e8d41447e727d799cea8 Mon Sep 17 00:00:00 2001
From: Theodore Ts'o <tytso@mit.edu>
Date: Tue, 28 Dec 2021 12:33:15 -0500
Subject: [PATCH] reisze2fs: sanity check free block group counts when
calculating minimum size
If one or more block group descriptor's free blocks count is insane,
it's possible this can lead to a infinite loop in the function
calculate_minimum_resize_size(), which is called by resize2fs -P or
resize2fs -M.
Add some sanity checks to avoid this. In the case where the file
system is corrupt, this will result in resize2fs -P reporting an
incorrect value, but that's OK, since when we try to do an actual
resize operation, resize2fs requires that the file system be freshly
checked using e2fsck.
https://github.com/tytso/e2fsprogs/issues/94
Fixes: ac94445fc01f ("resize2fs: make minimum size estimates more reliable for mounted fs")
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
resize/resize2fs.c | 13 +++++++++--
tests/r_corrupt_fs/expect | 4 ++++
tests/r_corrupt_fs/name | 1 +
tests/r_corrupt_fs/script | 45 +++++++++++++++++++++++++++++++++++++++
4 files changed, 61 insertions(+), 2 deletions(-)
create mode 100644 tests/r_corrupt_fs/expect
create mode 100644 tests/r_corrupt_fs/name
create mode 100644 tests/r_corrupt_fs/script
diff --git a/resize/resize2fs.c b/resize/resize2fs.c
index 73174be0..b9783e8c 100644
--- a/resize/resize2fs.c
+++ b/resize/resize2fs.c
@@ -3002,8 +3002,17 @@ blk64_t calculate_minimum_resize_size(ext2_filsys fs, int flags)
/* calculate how many blocks are needed for data */
data_needed = ext2fs_blocks_count(fs->super);
for (grp = 0; grp < fs->group_desc_count; grp++) {
- data_needed -= calc_group_overhead(fs, grp, old_desc_blocks);
- data_needed -= ext2fs_bg_free_blocks_count(fs, grp);
+ __u32 n = ext2fs_bg_free_blocks_count(fs, grp);
+
+ if (n > EXT2_BLOCKS_PER_GROUP(fs->super))
+ n = EXT2_BLOCKS_PER_GROUP(fs->super);
+ n += calc_group_overhead(fs, grp, old_desc_blocks);
+ if (data_needed < n) {
+ if (flags & RESIZE_DEBUG_MIN_CALC)
+ printf("file system appears inconsistent?!?\n");
+ return ext2fs_blocks_count(fs->super);
+ }
+ data_needed -= n;
}
#ifdef RESIZE2FS_DEBUG
if (flags & RESIZE_DEBUG_MIN_CALC)
diff --git a/tests/r_corrupt_fs/expect b/tests/r_corrupt_fs/expect
new file mode 100644
index 00000000..fe0f2bc4
--- /dev/null
+++ b/tests/r_corrupt_fs/expect
@@ -0,0 +1,4 @@
+mke2fs -q -F -t ext4 -o Linux -b 1024 test.img 32M
+debugfs -w -R "set_bg 1 free_blocks_count 65536" /tmp/foo.img
+resize2fs -P /tmp/foo.img
+Estimated minimum size of the filesystem: 6604
diff --git a/tests/r_corrupt_fs/name b/tests/r_corrupt_fs/name
new file mode 100644
index 00000000..ed627419
--- /dev/null
+++ b/tests/r_corrupt_fs/name
@@ -0,0 +1 @@
+resize2fs -P of a corrupted file system
diff --git a/tests/r_corrupt_fs/script b/tests/r_corrupt_fs/script
new file mode 100644
index 00000000..08af91ed
--- /dev/null
+++ b/tests/r_corrupt_fs/script
@@ -0,0 +1,45 @@
+if ! test -x $RESIZE2FS_EXE -o ! -x $DEBUGFS_EXE; then
+ echo "$test_name: $test_description: skipped (no debugfs/resize2fs)"
+ return 0
+fi
+
+OUT=$test_name.log
+if [ -f $test_dir/expect.gz ]; then
+ EXP=$test_name.tmp
+ gunzip < $test_dir/expect.gz > $EXP1
+else
+ EXP=$test_dir/expect
+fi
+
+echo mke2fs -q -F -t ext4 -o Linux -b 1024 test.img 32M > $OUT.new
+$MKE2FS -q -F -t ext4 -o Linux -b 1024 $TMPFILE 32M >> $OUT.new 2>&1
+
+echo debugfs -w -R \"set_bg 1 free_blocks_count 65536\" /tmp/foo.img >> $OUT.new
+$DEBUGFS -w -R "set_bg 1 free_blocks_count 65536" $TMPFILE > /dev/null 2>&1
+
+if type timeout > /dev/null 2>&1 ; then
+ TIMEOUT="timeout -v 30s"
+else
+ TIMEOUT=
+fi
+
+echo resize2fs -P /tmp/foo.img >> $OUT.new
+$TIMEOUT $RESIZE2FS -P $TMPFILE >> $OUT.new 2>&1
+
+sed -f $cmd_dir/filter.sed < $OUT.new > $OUT
+
+rm -f $TMPFILE $OUT.new
+
+cmp -s $OUT $EXP
+status=$?
+
+if [ "$status" = 0 ] ; then
+ echo "$test_name: $test_description: ok"
+ touch $test_name.ok
+else
+ echo "$test_name: $test_description: failed"
+ diff $DIFF_OPTS $EXP $OUT > $test_name.failed
+ rm -f $test_name.tmp
+fi
+
+unset IMAGE OUT EXP TIMEOUT
--
2.33.0

View File

@ -1,6 +1,6 @@
Name: e2fsprogs
Version: 1.46.4
Release: 22
Release: 27
Summary: Second extended file system management tools
License: GPLv2+ and LGPLv2 and MIT
URL: http://e2fsprogs.sourceforge.net/
@ -47,19 +47,26 @@ Patch37: 0037-libext2fs-fix-ext2fs_compare_generic_bmap-logic.patch
Patch38: 0038-Quiet-unused-variable-warnings.patch
Patch39: 0039-ext2fs-Use-64bit-lseek-when-_FILE_OFFSET_BITS-is-64.patch
Patch40: 0040-e2fsck-fix-bad-htree-checksums-in-preen-mode.patch
Patch41: 0041-debugfs-Fix-infinite-loop-when-dump-log.patch
Patch42: 0042-debugfs-Use-the-hash_version-from-superblock-if-a-fi.patch
Patch43: 0043-tune2fs-fuse2fs-debugfs-save-error-information-durin.patch
Patch44: 0044-resize2fs-use-Direct-I-O-when-reading-the-superblock.patch
Patch45: 0045-modify-dumpe2fs-to-report-free-block-ranges-for-bigalloc.patch
Patch46: 0046-e2fsck-fix-acl-block-leak-when-process-orphan-list.patch
Patch47: 0047-e2fsck-when-mutating-file-name-make-sure-its-length-.patch
Patch48: 0048-reisze2fs-sanity-check-free-block-group-counts-when-.patch
BuildRequires: gcc pkgconfig texinfo
BuildRequires: fuse-devel libblkid-devel libuuid-devel
BuildRequires: audit
Recommends: %{name}-help = %{version}-%{release}
Provides: e2fsprogs-libs%{?_isa} e2fsprogs-libs
Obsoletes: e2fsprogs-libs
Provides: libcom_err%{?_isa} libcom_err
Obsoletes: libcom_err
Provides: libss%{?_isa} libss
Obsoletes: libss
Provides: e2fsprogs-libs%{?_isa} = %{version}-%{release} e2fsprogs-libs = %{version}-%{release}
Obsoletes: e2fsprogs-libs < %{version}
Provides: libcom_err%{?_isa} = %{version}-%{release} libcom_err = %{version}-%{release}
Obsoletes: libcom_err < %{version}
Provides: libss%{?_isa} = %{version}-%{release} libss = %{version}-%{release}
Obsoletes: libss < %{version}
%description
The e2fsprogs package consists of a lot of tools for users to create,
@ -74,12 +81,12 @@ Requires: gawk
Requires: pkgconfig
Requires(post): info
Requires(preun): info
Provides: libcom_err-devel%{?_isa} libcom_err-devel
Obsoletes: libcom_err-devel
Provides: libss-devel%{?_isa} libss-devel
Obsoletes: libss-devel
Provides: e2fsprogs-static{?_isa} e2fsprogs-static
Obsoletes: e2fsprogs-static
Provides: libcom_err-devel%{?_isa} = %{version}-%{release} libcom_err-devel = %{version}-%{release}
Obsoletes: libcom_err-devel < %{version}
Provides: libss-devel%{?_isa} = %{version}-%{release} libss-devel = %{version}-%{release}
Obsoletes: libss-devel < %{version}
Provides: e2fsprogs-static{?_isa} = %{version}-%{release} e2fsprogs-static = %{version}-%{release}
Obsoletes: e2fsprogs-static < %{version}
%description devel
This package provides libraries and header files to develop
@ -188,6 +195,21 @@ exit 0
%{_mandir}/man8/*
%changelog
* Thu May 30 2024 zhangjian <zhangjian496@huawei.com> - 1.46.4-27
- backport upstream patch
* Tue May 07 2024 zhangxingrong <zhangxingrong@uniontech.com> - 1.46.4-26
- backport upstream patch
* Sun Apr 7 2024 haowenchao <haowenchao2@huawei.com> - 1.46.4-25
- Backports from mainline
* Tue Dec 19 2023 haowenchao <haowenchao2@huawei.com> - 1.46.4-24
- debugfs: Fix infinite loop when dump log
* Thu Nov 09 2023 Xinliang Liu <xinliang.liu@linaro.org> - 1.46.4-23
- Fix rpmlint Provides/Obsoletes unversioned warnings to fix dnf update
* Mon Oct 30 2023 volcanodragon <linfeilong@huawei.com> - 1.46.4-22
- e2fsck fix bad htree checksum in preen mode