107 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
if ! test -x $DEBUGFS_EXE; then
 | 
						|
	echo "$test_name: $test_description: skipped (no debugfs)"
 | 
						|
	return 0
 | 
						|
fi
 | 
						|
 | 
						|
OUT=$test_name.log
 | 
						|
TIMESTAMPS=$test_name.timestamps.log
 | 
						|
EXP=$test_dir/expect
 | 
						|
FSCK_OPT=-yf
 | 
						|
 | 
						|
create_file_with_xtime_and_extra() {
 | 
						|
	name=$1
 | 
						|
	time=$2
 | 
						|
	extra=$3
 | 
						|
	{
 | 
						|
		echo "write /dev/null $name"
 | 
						|
		for xtime in atime ctime mtime crtime; do
 | 
						|
			echo "set_inode_field $name $xtime @$time"
 | 
						|
			echo "set_inode_field $name ${xtime}_extra $extra"
 | 
						|
		done
 | 
						|
	} | $DEBUGFS -w $TMPFILE >> $OUT 2>&1
 | 
						|
}
 | 
						|
 | 
						|
get_file_xtime_and_extra() {
 | 
						|
	name=$1
 | 
						|
	echo "times for $name =" >> $TIMESTAMPS
 | 
						|
	$DEBUGFS -R "stat $name" $TMPFILE 2>&1 | egrep '^( a| c| m|cr)time:' |
 | 
						|
		sed 's/ --.*//' >> $TIMESTAMPS
 | 
						|
}
 | 
						|
 | 
						|
rm -f $OUT $TIMESTAMPS
 | 
						|
 | 
						|
# create an empty ext4 filesystem with 256-byte inodes for testing
 | 
						|
> $TMPFILE
 | 
						|
echo mkfs.ext4 -b 1024 -q -I 256 $TMPFILE 5000 >> $OUT
 | 
						|
$MKE2FS -t ext4 -b 1024 -q -I 256 -F $TMPFILE 5000 >> $OUT 2>&1
 | 
						|
 | 
						|
# this is a pre-1970 file encoded with the old encoding.
 | 
						|
# fsck should repair this
 | 
						|
create_file_with_xtime_and_extra year-1909 -1907928000 3
 | 
						|
 | 
						|
# these are all already encoded correctly
 | 
						|
create_file_with_xtime_and_extra year-1979   299592000 0
 | 
						|
create_file_with_xtime_and_extra year-2039  2191752000 1
 | 
						|
create_file_with_xtime_and_extra year-2139  5345352000 1
 | 
						|
 | 
						|
# confirm that the xtime is wrong on the pre-1970 file
 | 
						|
get_file_xtime_and_extra year-1909
 | 
						|
 | 
						|
# and confirm that it is right on the remaining files
 | 
						|
get_file_xtime_and_extra year-1979
 | 
						|
get_file_xtime_and_extra year-2039
 | 
						|
get_file_xtime_and_extra year-2139
 | 
						|
 | 
						|
# before we repair the filesystem, save off a copy so that
 | 
						|
# we can use it later
 | 
						|
 | 
						|
cp -a $TMPFILE $TMPFILE.sav
 | 
						|
 | 
						|
# repair the filesystem
 | 
						|
E2FSCK_TIME=1386393539 $FSCK $FSCK_OPT $TMPFILE >> $OUT 2>&1
 | 
						|
 | 
						|
# check that the dates and xtime_extra on the file is now correct
 | 
						|
get_file_xtime_and_extra year-1909
 | 
						|
 | 
						|
# check that the remaining dates have not been altered
 | 
						|
get_file_xtime_and_extra year-1979
 | 
						|
get_file_xtime_and_extra year-2039
 | 
						|
get_file_xtime_and_extra year-2139
 | 
						|
 | 
						|
if test $SIZEOF_TIME_T -gt 4
 | 
						|
then
 | 
						|
  # now we need to check that after the year 2242, e2fsck does not
 | 
						|
  # modify dates with extra_xtime=3
 | 
						|
 | 
						|
  # restore the unrepaired filesystem
 | 
						|
  mv $TMPFILE.sav $TMPFILE
 | 
						|
 | 
						|
  #retry the repair
 | 
						|
  E2FSCK_TIME=9270393539 $FSCK $FSCK_OPT $TMPFILE >> $OUT 2>&1
 | 
						|
 | 
						|
  # check that the 1909 file is unaltered (i.e. it has a post-2378 date)
 | 
						|
  get_file_xtime_and_extra year-1909
 | 
						|
else
 | 
						|
  rm -f TMPFILE.sav
 | 
						|
cat << EOF >> $TIMESTAMPS
 | 
						|
times for year-1909 =
 | 
						|
 ctime: 0x8e475440:00000003
 | 
						|
 atime: 0x8e475440:00000003
 | 
						|
 mtime: 0x8e475440:00000003
 | 
						|
crtime: 0x8e475440:00000003
 | 
						|
EOF
 | 
						|
fi
 | 
						|
 | 
						|
cmp -s $TIMESTAMPS $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 $TIMESTAMPS > $test_name.failed
 | 
						|
fi
 | 
						|
 | 
						|
unset OUT TIMESTAMPS EXP FSCK_OPT
 |