ENOSPC=28
EFBIG=27
+ rm -rf $DIR/$tdir
test_mkdir -p $DIR/$tdir
- MAX=$(stat -c%s "$DIR/$tdir")
+ # block size of mds1
+ local MDT_DEV=$(mdsdevname ${SINGLEMDS//mds/})
+ local MDSBLOCKSIZE=$($LCTL get_param -n mdc.*MDT0000*.blocksize)
+ local MAX=$((MDSBLOCKSIZE * 3))
set_dir_limits $MAX
- local I=0
+ local I=$(stat -c%s "$DIR/$tdir")
local J=0
while [ ! $I -gt $MAX ]; do
$MULTIOP $DIR/$tdir/$J Oc
#check two errors ENOSPC for new version of ext4 max_dir_size patch
#mainline kernel commit df981d03eeff7971ac7e6ff37000bfa702327ef1
#and EFBIG for previous versions
- if [ $rc -eq $EFBIG -o $rc -eq $ENOSPC ] && [ $I -gt 0 ]; then
+ if [ $rc -eq $EFBIG -o $rc -eq $ENOSPC ]; then
set_dir_limits 0
echo "return code $rc received as expected"
- multiop $DIR/$tdir/$J Oc
- rc=$?
+ multiop $DIR/$tdir/$J Oc ||
+ error_exit "multiop failed w/o dir size limit"
+
I=$(stat -c%s "$DIR/$tdir")
- if [ $I -gt $MAX ] && [ $rc -eq 0 ]; then
- return 0
+
+ if [ $(lustre_version_code $SINGLEMDS) -lt \
+ $(version_code 2.4.51) ]
+ then
+ [ $I -eq $MAX ] && return 0
else
- error_exit "return code $rc current dir size $I " \
- "previous limit $MAX"
+ [ $I -gt $MAX ] && return 0
fi
+ error_exit "current dir size $I, previous limit $MAX"
elif [ $rc -ne 0 ]; then
set_dir_limits 0
error_exit "return code $rc received instead of expected " \