echo 506
fi
;;
+ bcachefs)
+ echo 251
+ ;;
*)
echo 0
;;
j=1
for(i=1; i<1000000 && j<=3;i++){
if (! (i in ids)) {
- printf "acl%d=%d;", j, i;
+ printf "acl%d=%d;", j, i;
j++
}
- }
+ }
}'`
}
_acl_ls()
{
_ls_l -n $* | awk '{ print $1, $3, $4, $NF }' | _acl_filter_id
-}
+}
# create an ACL with n ACEs in it
#
BEGIN {
FS=":"
while ( getline <tmpfile > 0 ) {
- idlist[$1] = $3
+ idlist[$1] = $3
}
}
/^user/ { if ($2 in idlist) sub($2, idlist[$2]); print; next}
{
local args
local nsp
-
+
if [ $# -eq 0 ]; then
args="user"
else
args="$*"
fi
-
+
[ -n "$ATTR_PROG" ] || _notrun "attr command not found"
[ -n "$GETFATTR_PROG" ] || _notrun "getfattr command not found"
[ -n "$SETFATTR_PROG" ] || _notrun "setfattr command not found"
-
+
for nsp in $args; do
#
# Test if chacl is able to write an attribute on the target
touch $TEST_DIR/syscalltest
$SETFATTR_PROG -n "$nsp.xfstests" -v "attr" $TEST_DIR/syscalltest > $TEST_DIR/syscalltest.out 2>&1
cat $TEST_DIR/syscalltest.out >> $seqres.full
-
+
if grep -q 'Function not implemented' $TEST_DIR/syscalltest.out; then
_notrun "kernel does not support attrs"
fi
if grep -q 'Operation not supported' $TEST_DIR/syscalltest.out; then
_notrun "attr namespace $nsp not supported by this filesystem type: $FSTYP"
fi
-
+
rm -f $TEST_DIR/syscalltest.out
done
}
# set maximum total attr space based on fs type
case "$FSTYP" in
-xfs|udf|pvfs2|9p|ceph)
+xfs|udf|pvfs2|9p|ceph|nfs)
MAX_ATTRS=1000
;;
+ext2|ext3|ext4)
+ # For 4k blocksizes, most of the attributes have an attr_name of
+ # "attribute_NN" which is 12, and "value_NN" which is 8.
+ # But for larger block sizes, we start having extended attributes of the
+ # form "attribute_NNN" or "attribute_NNNN", and "value_NNN" and
+ # "value_NNNN", which causes the round(len(..), 4) to jump up by 4
+ # bytes. So round_up(len(attr_name, 4)) becomes 16 instead of 12, and
+ # round_up(len(value, 4)) becomes 12 instead of 8.
+ #
+ # For 64K blocksize the calculation becomes
+ # max_attrs = (block_size - 32) / (16 + 12 + 16)
+ # or
+ # max_attrs = (block_size - 32) / 44
+ #
+ # For 4K blocksize:-
+ # max_attrs = (block_size - 32) / (16 + 8 + 12)
+ # or
+ # max_attrs = (block_size - 32) / 36
+ #
+ # Note (for 4K bs) above are exact calculations for attrs of type
+ # attribute_NN with values of type value_NN.
+ # With above calculations, for 4k blocksize max_attrs becomes 112.
+ # This means we can have few attrs of type attribute_NNN with values of
+ # type value_NNN. To avoid/handle this we need to add extra 4 bytes of
+ # headroom.
+ #
+ # So for 4K, the calculations becomes:-
+ # max_attrs = (block_size - 32) / (16 + 8 + 12 + 4)
+ # or
+ # max_attrs = (block_size - 32) / 40
+ #
+ # Assume max ~1 block of attrs
+ BLOCK_SIZE=`_get_block_size $TEST_DIR`
+ if [ $BLOCK_SIZE -le 4096 ]; then
+ let MAX_ATTRS=$((($BLOCK_SIZE - 32) / (16 + 8 + 12 + 4)))
+ else
+ let MAX_ATTRS=$((($BLOCK_SIZE - 32) / (16 + 12 + 16 )))
+ fi
+ ;;
*)
# Assume max ~1 block of attrs
BLOCK_SIZE=`_get_block_size $TEST_DIR`
pvfs2)
MAX_ATTRVAL_SIZE=8192
;;
-9p|ceph)
+9p|ceph|nfs)
MAX_ATTRVAL_SIZE=65536
;;
+bcachefs)
+ MAX_ATTRVAL_SIZE=1024
+ ;;
*)
# Assume max ~1 block of attrs
BLOCK_SIZE=`_get_block_size $TEST_DIR`