@@ -113,20 +113,32 @@ _attr_get_max()
let max_attrs=$BLOCK_SIZE/40
esac
- # Set max attr value size based on fs type
+ # Set max attr value size in bytes based on fs type
case "$FSTYP" in
- xfs|udf|btrfs)
- max_attrval_size=64
+ btrfs)
+ _require_btrfs_command inspect-internal dump-super
+ local ns=$($BTRFS_UTIL_PROG inspect-internal dump-super \
+ $TEST_DEV | sed -n 's/nodesize\s*\(.*\)/\1/p')
+ [ -n "$ns" ] || _fail "failed to obtain nodesize"
+ # max == nodesize - sizeof(struct btrfs_header)
+ # - sizeof(struct btrfs_item)
+ # - sizeof(struct btrfs_dir_item) - name_len
+ max_attrval_size=$(( $ns - 156 - $max_attrval_namelen ))
;;
pvfs2)
max_attrval_size=8192
;;
- 9p|ceph|nfs)
+ xfs|udf|9p|ceph)
max_attrval_size=65536
;;
bcachefs)
max_attrval_size=1024
;;
+ nfs)
+ # NFS doesn't provide a way to find out the max_attrval_size for
+ # the underlying filesystem, so just use the lowest value above.
+ max_attrval_size=1024
+ ;;
*)
# Assume max ~1 block of attrs
BLOCK_SIZE=`_get_block_size $TEST_DIR`
As found by Dave Chinner, fff4359d ("020: make this xattr test generic") unintentionally changed the long attribute value length from 100K to 64 *bytes* for XFS, UDF and Btrfs. Update XFS and UDF to use a 64K $max_attrval_size value. For Btrfs, use the nodesize, xattr length and tree entry overhead sizes to calculate the maximum. NFS doesn't provide a way to find out the $max_attrval_size for the underlying filesystem on the server, so just use a rough 1K limit. Signed-off-by: David Disseldorp <ddiss@suse.de> --- tests/generic/020 | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-)