]> git.apps.os.sepia.ceph.com Git - xfstests-dev.git/commitdiff
generic/020: fix max_attrval_size for XFS, UDF, Btrfs and NFS
authorDavid Disseldorp <ddiss@suse.de>
Wed, 13 Apr 2022 16:44:21 +0000 (18:44 +0200)
committerEryu Guan <guaneryu@gmail.com>
Sun, 17 Apr 2022 12:08:31 +0000 (20:08 +0800)
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>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
tests/generic/020

index cbd3f227398b21f6b5898efb632f305b4c5466f7..f50a4f87583b3d546505584f47b16f409dbe4bd9 100755 (executable)
@@ -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`