[Ocfs2-test-devel] [PATCH 1/1] Ocfs2-tests: Add additional func tests for xattr.

tristan.ye tristan.ye at oracle.com
Fri Dec 5 01:19:34 PST 2008


On Fri, 2008-12-05 at 16:55 +0800, Tao Ma wrote:
> Tristan,
> 	Glad to see you complete my test plan so quickly. The result is cool.
> 	But Since this is based on tiger's temporary debugfs patch, I would 
> suggest to defer its commit after Tiger's patch is committed to 
> ocfs2-tools first so that we won't give the user an uncompleted one.

Yes,that sounds reasonable, anyway, you can take it to perform a
boundary check when you making any changes/patches for xattr.


Tristan.

> 
> Regards,
> Tao
> 
> Tristan Ye wrote:
> > Thanks to tiger's patch set for debugfs.ocfs2 to make these
> > extreme boundary tests become a reality. Currently it includes
> > following testcases suggested by Tao's testplan.
> > 
> > 1. Non-xattr test.
> > 2. Simple in-inode-xattr test(it will include set a small xattr, a large
> > xattr).
> > 3. In-inode-xattr-extension test. it will fill up the in-inode space and
> > then extend the xattr to an outside xattr block. you need to test t4
> > scenarios at least.
> >    1) insert a small xattr.
> >    2) insert a large xattr.
> >    3) replace a small xattr in-inode to a large one(value_size>80)(which
> > will remove the old in-inode xattr and add it in outside block).
> >    4) replace a small xattr in-inode to a large one(value_size<80).
> > 4. Outside-xattr-block test.
> >    1) insert a small xattr.
> >    2) insert a large xattr.
> >    3) replace xattr to a small one((value_size<80)) which then can be
> > inserted into in-inode and deleted from xattr block.
> >    4) replace xattr to a value(value_size>80) but the old one has a size
> > of(48~80).
> > 5. Basic bucket-extension test.
> >    1) insert a small xattr.
> >    2) insert a large xattr.
> >    3) replace a small xattr in-inode to a large one(value_size>80)(which
> > will remove the old in-inode xattr and add it in outside bucket).
> >    4) replace a small xattr in-inode to a large one(value_size<80).
> > 6. Basic bucket insert test.
> >    1) insert a small xattr.
> >    2) insert a large xattr.
> >    3) replace xattr to a small one((value_size<80)) which then can be
> > inserted into in-inode and deleted from xattr bucket.
> >    4) replace xattr to a value(value_size>80) but the old one has a size
> > of(48~80).
> > 
> > Actually, the above testcases have exposed the bugs 1052,1054 and 1055 on
> > bugzilla. We're also planning testcases of combination-test for inline-xattr
> > and inline-data.
> > 
> > Signed-off-by: Tristan Ye <tristan.ye at oracle.com>
> > ---
> >  programs/xattr_tests/xattr-single-run.sh |  408 +++++++++++++++++++++++++++++-
> >  1 files changed, 407 insertions(+), 1 deletions(-)
> > 
> > diff --git a/programs/xattr_tests/xattr-single-run.sh b/programs/xattr_tests/xattr-single-run.sh
> > index 4a54caa..bfc370b 100755
> > --- a/programs/xattr_tests/xattr-single-run.sh
> > +++ b/programs/xattr_tests/xattr-single-run.sh
> > @@ -35,6 +35,7 @@ TOUCH_BIN="`which touch`"
> >  MOUNT_BIN="`which sudo` -u root `which mount`"
> >  UMOUNT_BIN="`which sudo` -u root `which umount`"
> >  MKFS_BIN="`which sudo` -u root `which mkfs.ocfs2`"
> > +DEBUGFS_BIN="`which sudo` -u root `which debugfs.ocfs2`"
> >  XATTR_TEST_BIN="`which sudo` -u root ${BINDIR}/xattr-test"
> >  
> >  DEFAULT_LOG="xattr-test-logs"
> > @@ -59,6 +60,8 @@ declare -i EA_NUMS
> >  declare -i EA_NAME_LEN
> >  declare -i EA_VALUE_SIZE
> >  
> > +declare -i i
> > +
> >  set -o pipefail
> >  
> >  BOOTUP=color
> > @@ -111,7 +114,6 @@ exit_or_not()
> >          fi
> >  }
> >  
> > -
> >  ################################################################################
> >  # Utility Functions
> >  ################################################################################
> > @@ -218,6 +220,396 @@ f_do_umount()
> >          exit_or_not ${RET}
> >  }
> >  
> > +f_is_xattr_inlined()
> > +{
> > +	#${1} is test file
> > +	#${2} is target volume
> > +
> > +	${DEBUGFS_BIN} -R "xattr ${1}" ${2}|grep -qi "block" || {
> > +		return 0
> > +	}
> > +
> > +	return 1
> > +}
> > +
> > +f_is_xattr_bucketed()
> > +{
> > +	#${1} is test file
> > +	#${2} is target volume
> > +
> > +	${DEBUGFS_BIN} -R "xattr ${1}" ${2}|grep -qi "bucket" || {
> > +		return 0
> > +	}
> > +
> > +	return 1
> > +}
> > +
> > +#
> > +# Insert xattr entries with given number and mode
> > +# ${1} specify entry type(small or large)
> > +# ${2} specify file name
> > +# ${3} specify entry number
> > +#
> > +f_insert_xattrs()
> > +{
> > +	local XATTR_NAME_PREFIX=
> > +	local XATTR_VALUE_PREFIX=
> > +	local FILENAME=${2}
> > +	local ENTRY_NUM=${3}
> > +	local XATTR_NAME=
> > +	local XATTR_VALUE=
> > +	local LARGE_VALUE_LESS_THAN_80="largelargelargelargelargelargelargelargelargelargelargelargelargelargelarge."
> > +	
> > +
> > +	if [ "x${1}" = "xsmall" ];then
> > +		XATTR_NAME_PREFIX="user."
> > +		XATTR_VALUE_PREFIX=""
> > +	else
> > +		XATTR_NAME_PREFIX="user.large."
> > +		XATTR_VALUE_PREFIX=${LARGE_VALUE_LESS_THAN_80}
> > +		
> > +	fi
> > +
> > +	for i in $(seq ${ENTRY_NUM});do
> > +		XATTR_NAME="${XATTR_NAME_PREFIX}${i}"
> > +		XATTR_VALUE="${XATTR_VALUE_PREFIX}${i}"
> > +		${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +		exit_or_not $?
> > +	done
> > +
> > +	return $?
> > +	
> > +}
> > +
> > +#
> > +# Make inline-xattr firstly extented with small or large files increasing.
> > +# ${1} stands for entry type(small or large)
> > +# ${2} stands for file name
> > +# ${3} should be block or bucket
> > +#	block:	extend inlined xattr to block.
> > +#	xattr: 	extend block to bucket.
> > +#
> > +f_extend_xattr()
> > +{
> > +	local XATTR_NAME_PREFIX=
> > +	local XATTR_VALUE_PREFIX=
> > +	local FILENAME=${2}
> > +	local EXTEND_TYPE=${3}
> > +	local XATTR_NAME=
> > +	local XATTR_VALUE=
> > +	local LARGE_VALUE_LESS_THAN_80="largelargelargelargelargelargelargelargelargelargelargelargelargelargelarge."
> > +	
> > +
> > +	if [ "x${1}" = "xsmall" ];then
> > +		XATTR_NAME_PREFIX="user."
> > +		XATTR_VALUE_PREFIX=""
> > +	else
> > +		XATTR_NAME_PREFIX="user.large."
> > +		XATTR_VALUE_PREFIX=${LARGE_VALUE_LESS_THAN_80}
> > +		
> > +	fi
> > +
> > +	i=1
> > +	while : ;do
> > +		XATTR_NAME="${XATTR_NAME_PREFIX}${i}"
> > +		XATTR_VALUE="${XATTR_VALUE_PREFIX}${i}"
> > +		${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +		exit_or_not $?
> > +		sync
> > +
> > +		if [ "x${EXTEND_TYPE}" = "xblock" ];then
> > +			f_is_xattr_inlined ${DEBUG_TEST_FILE} ${OCFS2_DEVICE} || {
> > +				break
> > +			}
> > +		else
> > +
> > +			f_is_xattr_bucketed ${DEBUG_TEST_FILE} ${OCFS2_DEVICE} || {
> > +				break
> > +			}
> > +			
> > +		fi
> > +
> > +		((i++))
> > +	done
> > +
> > +	return $?
> > +}
> > +
> > +f_add_func_test()
> > +{
> > +	SUB_TESTNO=1
> > +	TEST_FILE=${WORKPLACE}/additional-func-test-file
> > +	DEBUG_TEST_FILE=/xattr_test_place/additional-func-test-file
> > +	LARGE_VALUE_LESS_THAN_80="largelargelargelargelargelargelargelargelargelargelargelargelargelargelarge"
> > +	LARGE_VALUE_MORE_THAN_80="largelargelargelargelargelargelargelargelargelargelargelargelargelargelargelargelarge"
> > +	declare -i MAX_SMALL_INLINE_XATTR
> > +	declare -i MAX_LARGE_INLINE_XATTR
> > +	declare -i MAX_SMALL_BLOCK_XATTR
> > +	declare -i MAX_LARGE_BLOCK_XATTR
> > +	
> > +	${TOUCH_BIN} ${TEST_FILE}
> > +
> > +	echo "Test ${SUB_TESTNO}: None Xattr Test.">>${DETAIL_LOG_FILE}
> > +
> > +	DUMMY_NAME="user.dummy"
> > +	EMPTY_NAME=" "
> > +	INVALID_NAME="user."
> > +
> > +	for ea_name in ${DUMMY_NAME} ${EMPTY_NAME} ${INVALID_NAME};do
> > +		${GETXATTR} -n ${ea_name} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +		RET=$?
> > +		#if [ "${RET}" = "0" ];then
> > +		#	echo "Should not get a entry from a None-xattr file.">>${DETAIL_LOG_FILE} 2>&1
> > +		#	echo_failure | tee -a ${RUN_LOG_FILE}
> > +		#	echo | tee -a ${RUN_LOG_FILE}
> > +		#	exit 1
> > +
> > +		#fi
> > +	done;
> > +
> > +	((SUB_TESTNO++))
> > +	
> > +	echo "Test ${SUB_TESTNO}: Simple In-inode-xattr Test.">>${DETAIL_LOG_FILE}
> > +	# Add a small ea in inode
> > +	XATTR_NAME="user.small"
> > +	XATTR_VALUE="smallvalue"
> > +
> > +	${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	${SETXATTR} -x ${XATTR_NAME} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	# Add a large ea in inode
> > +	XATTR_NAME="user.large"
> > +	XATTR_VALUE=${LARGE_VALUE_LESS_THAN_80}
> > +
> > +	${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	${SETXATTR} -x ${XATTR_NAME} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	((SUB_TESTNO++))
> > +
> > +	echo "Test ${SUB_TESTNO}: In inode EA extension test.">>${DETAIL_LOG_FILE}
> > +	# Get very ready for extension after a small ea insertion
> > +	f_extend_xattr "small" ${TEST_FILE} "block"
> > +	MAX_SMALL_INLINE_XATTR=$((${i}-1))
> > +	exit_or_not $?
> > +
> > +	${RM} -rf ${TEST_FILE}
> > +	${TOUCH_BIN} ${TEST_FILE}
> > +
> > +	# Get very ready for extension after a large ea insertion
> > +	f_extend_xattr "large" ${TEST_FILE} "block"
> > +	MAX_LARGE_INLINE_XATTR=$((${i}-1))
> > +	exit_or_not $?
> > +
> > +	${RM} -rf ${TEST_FILE}
> > +	${TOUCH_BIN} ${TEST_FILE}
> > +
> > +	# Replace a small ea to a large one to extend 
> > +	f_extend_xattr "small" ${TEST_FILE} "block"
> > +	exit_or_not $?
> > +
> > +	XATTR_NAME="user.${i}"
> > +
> > +	${SETXATTR} -x ${XATTR_NAME} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	#Large xattr value less than 80
> > +	XATTR_VALUE=${LARGE_VALUE_LESS_THAN_80}${i}
> > +
> > +	${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	${RM} -rf ${TEST_FILE}
> > +	${TOUCH_BIN} ${TEST_FILE}
> > +	
> > +	f_extend_xattr "small" ${TEST_FILE} "block"
> > +	exit_or_not $?
> > +
> > +	XATTR_NAME="user.${i}"
> > +
> > +	${SETXATTR} -x ${XATTR_NAME} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	#Large xattr value more than 80
> > +	XATTR_VALUE=${LARGE_VALUE_MORE_THAN_80}${i}
> > +	${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	${RM} -rf ${TEST_FILE}
> > +	${TOUCH_BIN} ${TEST_FILE}
> > +
> > +	((SUB_TESTNO++))
> > +
> > +	echo "Test ${SUB_TESTNO}: Outside Xattr Shrink Test.">>${DETAIL_LOG_FILE}
> > +	f_extend_xattr "small" ${TEST_FILE} "block"
> > +	exit_or_not $?
> > +
> > +	# Add a small ea in external block
> > +	XATTR_NAME="user.small"
> > +	XATTR_VALUE="SMALL"
> > +
> > +	${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	# Add a large ea in external block
> > +	XATTR_NAME="user.large"
> > +	XATTR_VALUE=${LARGE_VALUE_LESS_THAN_80}
> > +
> > +	${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	${RM} -rf ${TEST_FILE}
> > +	${TOUCH_BIN} ${TEST_FILE}
> > +
> > +	# Replace a large entry with a small one to shrink
> > +	f_extend_xattr "large" ${TEST_FILE} "block"
> > +
> > +	# Here we verify a bug when updating a boundary entry without shrinking.
> > +	XATTR_NAME="user.large.${i}"
> > +	XATTR_VALUE="${LARGE_VALUE_LESS_THAN_80}.${i}"
> > +
> > +	${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	XATTR_NAME="user.large.${i}"
> > +	XATTR_VALUE="${i}"
> > +
> > +	${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	${RM} -rf ${TEST_FILE}
> > +	${TOUCH_BIN} ${TEST_FILE}
> > +
> > +	# Replace a large entry with also a large one(value size > 80) to shrink
> > +	# Since it should reserve the space on inode more the 48 bytes, we need more elaborate operations.
> > +	${SETXATTR} -n "user.1" -v "1" ${TEST_FILE}
> > +	${SETXATTR} -n "user.2" -v "2" ${TEST_FILE}
> > +	${SETXATTR} -n "user.large.1" -v ${LARGE_VALUE_LESS_THAN_80} ${TEST_FILE} 
> > +	${SETXATTR} -n "user.large.2" -v ${LARGE_VALUE_LESS_THAN_80} ${TEST_FILE} 
> > +	exit_or_not $?
> > +
> > +	XATTR_NAME="user.large.2"
> > +	# Make value size more than 80 here
> > +	XATTR_VALUE=${LARGE_VALUE_MORE_THAN_80}
> > +
> > +	${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	${RM} -rf ${TEST_FILE}
> > +	${TOUCH_BIN} ${TEST_FILE}
> > +
> > +	((SUB_TESTNO++))
> > +
> > +	echo "Test ${SUB_TESTNO}: Basic Bucket Extension Test.">>${DETAIL_LOG_FILE}
> > +	f_extend_xattr "small" ${TEST_FILE} "bucket"
> > +	MAX_SMALL_BLOCK_XATTR=$((${i}-1))
> > +	exit_or_not $?
> > +
> > +	${RM} -rf ${TEST_FILE}
> > +	${TOUCH_BIN} ${TEST_FILE}
> > +
> > +	f_extend_xattr "large" ${TEST_FILE} "bucket"
> > +	MAX_LARGE_BLOCK_XATTR=$((${i}-1))
> > +	exit_or_not $?
> > +
> > +	${RM} -rf ${TEST_FILE}
> > +	${TOUCH_BIN} ${TEST_FILE}
> > +
> > +	# Get very ready to extend block to bucket.
> > +	f_insert_xattrs "small" ${TEST_FILE} ${MAX_SMALL_BLOCK_XATTR}
> > +	exit_or_not $?
> > +
> > +	# Replace a small entry with a large one,less than 80
> > +	XATTR_NAME=user.${i}
> > +	XATTR_VALUE=${LARGE_VALUE_LESS_THAN_80}
> > +
> > +	${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	${RM} -rf ${TEST_FILE}
> > +	${TOUCH_BIN} ${TEST_FILE}
> > +
> > +	f_insert_xattrs "small" ${TEST_FILE} ${MAX_SMALL_BLOCK_XATTR}
> > +	exit_or_not $?
> > +
> > +	# Replace a small entry with a large one, more than 80
> > +	XATTR_NAME=user.${i}
> > +	XATTR_VALUE=${LARGE_VALUE_MORE_THAN_80}
> > +
> > +	${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	${RM} -rf ${TEST_FILE}
> > +	${TOUCH_BIN} ${TEST_FILE}
> > +
> > +	((SUB_TESTNO++))
> > +
> > +	echo "Test ${SUB_TESTNO}: Basic Bucket Insert & Shrink Test.">>${DETAIL_LOG_FILE}
> > +
> > +	f_extend_xattr "small" ${TEST_FILE} "bucket"
> > +	exit_or_not $?
> > +
> > +	XATTR_NAME="user.small"
> > +	XATTR_VALUE="SMALL"
> > +
> > +	${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	XATTR_NAME="user.large"
> > +	XATTR_VALUE=${LARGE_VALUE_LESS_THAN_80}
> > +
> > +	${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	${RM} -rf ${TEST_FILE}
> > +	${TOUCH_BIN} ${TEST_FILE}
> > +
> > +	f_extend_xattr "large" ${TEST_FILE} "bucket"
> > +	exit_or_not $?
> > +
> > +	# Remove one random entry in inode-block to leave space for further replacing
> > +	RANDOM_SLOT=$((${RANDOM}%${MAX_LARGE_INLINE_XATTR}+1))
> > +	XATTR_NAME=user.large.${RANDOM_SLOT}
> > +
> > +	${SETXATTR} -x ${XATTR_NAME} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	# Replace a large xattr with small one in bucket to make it stored in inode-block.
> > +	RANDOM_SLOT=$((${RANDOM}%$((${MAX_LARGE_BLOCK_XATTR}-${MAX_LARGE_INLINE_XATTR}+1))+${MAX_LARGE_INLINE_XATTR}))
> > +	XATTR_NAME=user.large.${RANDOM_SLOT}
> > +	XATTR_VALUE="SMALL"
> > +
> > +	${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	${RM} -rf ${TEST_FILE}
> > +	${TOUCH_BIN} ${TEST_FILE}
> > +
> > +	f_extend_xattr "large" ${TEST_FILE} "bucket"
> > +	exit_or_not $?
> > +
> > +	RANDOM_SLOT=$((${RANDOM}%${MAX_LARGE_INLINE_XATTR}+1))
> > +	XATTR_NAME=user.large.${RANDOM_SLOT}
> > +
> > +	${SETXATTR} -x ${XATTR_NAME} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +
> > +	# Replace a large xattr with large one(more than 80) in bucket to make it stored in inode-block.
> > +	RANDOM_SLOT=$((${RANDOM}%$((${MAX_LARGE_BLOCK_XATTR}-${MAX_LARGE_INLINE_XATTR}+1))+${MAX_LARGE_INLINE_XATTR}))
> > +	XATTR_NAME=user.large.${RANDOM_SLOT}
> > +	XATTR_VALUE=${LARGE_VALUE_MORE_THAN_80}
> > +
> > +	${SETXATTR} -n ${XATTR_NAME} -v ${XATTR_VALUE} ${TEST_FILE} >>${DETAIL_LOG_FILE} 2>&1
> > +	exit_or_not $?
> > +	
> > +	return $?
> > +}
> > +
> >  f_runtest()
> >  {
> >  	echo >>${DETAIL_LOG_FILE}
> > @@ -265,6 +657,20 @@ f_runtest()
> >  	${RM} -rf ${WORKPLACE}/* || exit 1
> >  
> >  
> > +	echo >>${DETAIL_LOG_FILE}
> > +	echo "==========================================================">>${DETAIL_LOG_FILE}
> > +	echo -ne "Perform Additional Func Test:"|tee -a ${RUN_LOG_FILE}
> > +	echo -ne "Perform Additional Func Test::">>${DETAIL_LOG_FILE}
> > +	echo >>${DETAIL_LOG_FILE}
> > +	echo "==========================================================">>${DETAIL_LOG_FILE}
> > +	if [ ! ${BLOCKSIZE} -eq 512 ];then
> > +		f_add_func_test
> > +	fi
> > +	RET=$?
> > +	echo_status ${RET} |tee -a ${RUN_LOG_FILE}
> > +	exit_or_not ${RET}
> > +	${RM} -rf ${WORKPLACE}/* || exit 1
> > +
> >          echo >>${DETAIL_LOG_FILE}
> >  	echo "==========================================================">>${DETAIL_LOG_FILE}
> >  	echo -ne "Check Utility of SingleNode Xattr on Ocfs2:"|tee -a ${RUN_LOG_FILE}




More information about the Ocfs2-test-devel mailing list