mirror of https://github.com/vitalif/e2fsprogs
misc: fix infinite loop when finding the start of the hugefile start range
When looking for the start of the hugefile range, the 'next' variable is incorrectly decremented. If we happened to find a single free block, the effect of this decrement is that blk == next, which means that we never modify the loop control variable, so get_start_block never returns. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>test-maint
parent
5da8912008
commit
63b4cbb8bc
|
@ -437,7 +437,6 @@ static blk64_t get_start_block(ext2_filsys fs, blk64_t slack)
|
|||
blk, last_blk, &next);
|
||||
if (retval)
|
||||
next = last_blk;
|
||||
next--;
|
||||
|
||||
if (next - blk > slack) {
|
||||
blk += slack;
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
tune2fs test
|
||||
Creating filesystem with 786432 1k blocks and 98304 inodes
|
||||
Superblock backups stored on blocks:
|
||||
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409, 663553
|
||||
|
||||
Allocating group tables: done
|
||||
Writing inode tables: done
|
||||
Creating journal (16384 blocks): done
|
||||
Creating 6368 huge file(s) with 117 blocks each: done
|
||||
Writing superblocks and filesystem accounting information: done
|
||||
|
||||
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
|
||||
|
||||
Exit status is 0
|
|
@ -0,0 +1 @@
|
|||
mke2fs creating a hugefile fs with a lot of slack
|
|
@ -0,0 +1,61 @@
|
|||
if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
|
||||
|
||||
FSCK_OPT=-fn
|
||||
OUT=$test_name.log
|
||||
EXP=$test_dir/expect
|
||||
CONF=$TMPFILE.conf
|
||||
|
||||
#gzip -d < $EXP.gz > $EXP
|
||||
|
||||
cat > $CONF << ENDL
|
||||
[fs_types]
|
||||
ext4h = {
|
||||
features = has_journal,extent,huge_file,uninit_bg,dir_nlink,extra_isize,sparse_super,filetype,dir_index,ext_attr,^resize_inode,^meta_bg,^flex_bg,64bit
|
||||
blocksize = 1024
|
||||
inode_size = 256
|
||||
make_hugefiles = true
|
||||
hugefiles_dir = /
|
||||
hugefiles_slack = 12000K
|
||||
hugefiles_name = aaaaa
|
||||
hugefiles_digits = 4
|
||||
hugefiles_size = 117K
|
||||
zero_hugefiles = false
|
||||
}
|
||||
ENDL
|
||||
|
||||
echo "tune2fs test" > $OUT
|
||||
|
||||
MKE2FS_CONFIG=$CONF $MKE2FS -F -T ext4h -I 128 $TMPFILE 786432 >> $OUT 2>&1
|
||||
rm -rf $CONF
|
||||
|
||||
# dump and check. if we get this far, we succeeded...
|
||||
$FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT 2>&1
|
||||
status=$?
|
||||
echo Exit status is $status >> $OUT
|
||||
|
||||
rm $TMPFILE
|
||||
|
||||
#
|
||||
# Do the verification
|
||||
#
|
||||
|
||||
sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" -e 's/test_filesys:.*//g' < $OUT > $OUT.new
|
||||
mv $OUT.new $OUT
|
||||
|
||||
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
|
||||
fi
|
||||
|
||||
unset IMAGE FSCK_OPT OUT EXP CONF
|
||||
|
||||
else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
|
||||
echo "$test_name: $test_description: skipped"
|
||||
fi
|
||||
|
Loading…
Reference in New Issue