[PATCH v2 1/6] Add AFS support
Zorro Lang
zlang at redhat.com
Wed Apr 26 07:30:11 PDT 2023
On Mon, Apr 24, 2023 at 03:10:37PM +0100, David Howells wrote:
> Add support for the AFS filesystem. AFS is a network filesystem and there
> are a number of features it doesn't support.
>
> - No mkfs. (Kind of. An AFS volume server can be asked to create a new
> volume, but that's probably best left to AFS-specific test suites.
> Further, a volume would need to be destroyed before another of the same
> name could be created; it's not simply a matter of overwriting the old
> one as it is on a blockdev with a block-based filesystem.)
>
> - No fsck. (Kind of - the server can be asked to salvage a volume, but it
> may involve taking the server offline).
>
> - No richacls. AFS has its own ACL system.
>
> - No atimes.
>
> Signed-off-by: David Howells <dhowells at redhat.com>
> cc: linux-afs at lists.infradead.org
> ---
Thanks David, to help fstests to support one more fs testing!
> build/rpm/xfstests.spec.in | 2 +-
> check | 3 ++-
> common/config | 15 +++++++++++---
> common/rc | 42 ++++++++++++++++++++++++++++++++------
> 4 files changed, 51 insertions(+), 11 deletions(-)
>
> diff --git a/build/rpm/xfstests.spec.in b/build/rpm/xfstests.spec.in
> index e0f7c5f9..3dce41ef 100644
> --- a/build/rpm/xfstests.spec.in
> +++ b/build/rpm/xfstests.spec.in
I nearly forget we have this file :-D
If you'd like to update some docs about AFS testing, you can check
README and README.config-sections.
> @@ -17,7 +17,7 @@ Group: System Environment/Base
>
> %description
> The XFS regression test suite. Also includes some support for
> -acl, attr, udf, and nfs testing. Contains around 200 specific tests
> +acl, attr, udf, nfs and afs testing. Contains around 200 specific tests
> for userspace & kernelspace.
>
> %prep
> diff --git a/check b/check
> index 1a58a2b2..d4bb4126 100755
> --- a/check
> +++ b/check
> @@ -57,6 +57,7 @@ usage()
>
> check options
> -nfs test NFS
> + -afs test AFS
> -glusterfs test GlusterFS
> -cifs test CIFS
> -9p test 9p
> @@ -280,7 +281,7 @@ while [ $# -gt 0 ]; do
> case "$1" in
> -\? | -h | --help) usage ;;
>
> - -nfs|-glusterfs|-cifs|-9p|-fuse|-virtiofs|-pvfs2|-tmpfs|-ubifs)
> + -nfs|-afs|-glusterfs|-cifs|-9p|-fuse|-virtiofs|-pvfs2|-tmpfs|-ubifs)
> FSTYP="${1:1}"
> ;;
> -overlay)
> diff --git a/common/config b/common/config
> index 6c8cb3a5..25fbec14 100644
> --- a/common/config
> +++ b/common/config
> @@ -301,6 +301,7 @@ export BTRFS_TUNE_PROG=$(type -P btrfstune)
> export BTRFS_CORRUPT_BLOCK_PROG=$(type -P btrfs-corrupt-block)
> export XFS_FSR_PROG=$(type -P xfs_fsr)
> export MKFS_NFS_PROG="false"
> +export MKFS_AFS_PROG="false"
> export MKFS_CIFS_PROG="false"
> export MKFS_OVERLAY_PROG="false"
> export MKFS_REISER4_PROG=$(type -P mkfs.reiser4)
> @@ -353,6 +354,9 @@ _common_mount_opts()
> nfs)
> echo $NFS_MOUNT_OPTIONS
> ;;
> + afs)
> + echo $AFS_MOUNT_OPTIONS
> + ;;
> cifs)
> echo $CIFS_MOUNT_OPTIONS
> ;;
> @@ -420,6 +424,9 @@ _mkfs_opts()
> nfs)
> export MKFS_OPTIONS=$NFS_MKFS_OPTIONS
> ;;
> + afs)
> + export MKFS_OPTIONS=$AFS_MKFS_OPTIONS
> + ;;
> cifs)
> export MKFS_OPTIONS=$CIFS_MKFS_OPTIONS
> ;;
> @@ -510,6 +517,8 @@ _source_specific_fs()
> nfs)
> . ./common/nfs
> ;;
> + afs)
> + ;;
> cifs)
> ;;
> 9p)
> @@ -588,9 +597,9 @@ _check_device()
> fi
>
> case "$FSTYP" in
> - 9p|fuse|tmpfs|virtiofs)
> - # 9p, fuse and virtiofs mount tags are just plain strings, so anything is allowed
> - # tmpfs doesn't use mount source, ignore
> + 9p|fuse|tmpfs|virtiofs|afs)
> + # 9p, fuse, virtiofs and afs mount tags are just plain strings,
> + # so anything is allowed tmpfs doesn't use mount source, ignore
> ;;
> ceph)
> # ceph has two different possible syntaxes for mount devices. The
> diff --git a/common/rc b/common/rc
> index 90749343..8b8cb714 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -569,6 +569,9 @@ _test_mkfs()
> nfs*)
> # do nothing for nfs
> ;;
> + afs*)
> + # do nothing for afs
> + ;;
> cifs)
> # do nothing for cifs
> ;;
> @@ -614,6 +617,9 @@ _try_mkfs_dev()
> nfs*)
> # do nothing for nfs
> ;;
> + afs*)
> + # do nothing for afs
> + ;;
> 9p)
> # do nothing for 9p
> ;;
> @@ -660,7 +666,7 @@ _mkfs_dev()
> rm -f $tmp.mkfserr $tmp.mkfsstd
> }
>
> -# remove all files in $SCRATCH_MNT, useful when testing on NFS/CIFS
> +# remove all files in $SCRATCH_MNT, useful when testing on NFS/AFS/CIFS
> _scratch_cleanup_files()
> {
> case $FSTYP in
> @@ -688,7 +694,7 @@ _scratch_mkfs()
> local mkfs_status
>
> case $FSTYP in
> - nfs*|cifs|ceph|overlay|glusterfs|pvfs2|9p|fuse|virtiofs)
> + nfs*|afs|cifs|ceph|overlay|glusterfs|pvfs2|9p|fuse|virtiofs)
> # unable to re-create this fstyp, just remove all files in
> # $SCRATCH_MNT to avoid EEXIST caused by the leftover files
> # created in previous runs
> @@ -1571,7 +1577,7 @@ _check_mounted_on()
>
> if [ -n "$type" -a "`_fs_type $dev`" != "$type" ]; then
> echo "$devname=$dev is mounted but not a type $type filesystem"
> - # raw $DF_PROG cannot handle NFS/CIFS/overlay correctly
> + # raw $DF_PROG cannot handle NFS/AFS/CIFS/overlay correctly
> _df_device $dev
> return 3 # 3 = mounted as wrong type
> fi
> @@ -1610,6 +1616,15 @@ _require_scratch_nocheck()
> _notrun "this test requires a valid \$SCRATCH_MNT"
> fi
> ;;
> + afs)
> + echo $SCRATCH_DEV | grep -q "^%" > /dev/null 2>&1
You're the expert of AFS, I'm not familiar with it. Just according to the
documantation of linux (https://docs.kernel.org/filesystems/afs.html), it
says:
Filesystems can be mounted anywhere by commands similar to the following:
mount -t afs "%cambridge.redhat.com:root.afs." /afs
mount -t afs "#cambridge.redhat.com:root.cell." /afs/cambridge
mount -t afs "#root.afs." /afs
mount -t afs "#root.cell." /afs/cambridge
So I hope to double check with you if the mount source must be started with
"%" ?
Others looks good to me.
> + if [ -z "$SCRATCH_DEV" -o "$?" != "0" ]; then
> + _notrun "this test requires a valid \$SCRATCH_DEV"
> + fi
> + if [ ! -d "$SCRATCH_MNT" ]; then
> + _notrun "this test requires a valid \$SCRATCH_MNT"
> + fi
> + ;;
> ceph)
> echo $SCRATCH_DEV | grep -qE "=/|:/" > /dev/null 2>&1
> if [ -z "$SCRATCH_DEV" -o "$?" != "0" ]; then
> @@ -1810,6 +1825,15 @@ _require_test()
> _notrun "this test requires a valid \$TEST_DIR"
> fi
> ;;
> + afs)
> + echo $TEST_DEV | grep -q "^%" > /dev/null 2>&1
> + if [ -z "$TEST_DEV" -o "$?" != "0" ]; then
> + _notrun "this test requires a valid \$TEST_DEV"
> + fi
> + if [ ! -d "$TEST_DIR" ]; then
> + _notrun "this test requires a valid \$TEST_DIR"
> + fi
> + ;;
> ceph)
> echo $TEST_DEV | grep -qE "=/|:/" > /dev/null 2>&1
> if [ -z "$TEST_DEV" -o "$?" != "0" ]; then
> @@ -2923,7 +2947,7 @@ _scratch_mkfs_richacl()
> ;;
> ext4) _scratch_mkfs -O richacl
> ;;
> - nfs*|cifs|overlay)
> + nfs*|afs|cifs|overlay)
> _scratch_mkfs
> ;;
> esac
> @@ -3163,6 +3187,9 @@ _check_test_fs()
> nfs)
> # no way to check consistency for nfs
> ;;
> + afs)
> + # no way to check consistency for afs
> + ;;
> cifs)
> # no way to check consistency for cifs
> ;;
> @@ -3227,6 +3254,9 @@ _check_scratch_fs()
> nfs*)
> # Don't know how to check an NFS filesystem, yet.
> ;;
> + afs*)
> + # Don't know how to check an AFS filesystem, yet.
> + ;;
> cifs)
> # Don't know how to check a CIFS filesystem, yet.
> ;;
> @@ -3996,7 +4026,7 @@ _require_atime()
> {
> _exclude_scratch_mount_option "noatime"
> case $FSTYP in
> - nfs|cifs|virtiofs)
> + nfs|afs|cifs|virtiofs)
> _notrun "atime related mount options have no effect on $FSTYP"
> ;;
> esac
> @@ -4532,7 +4562,7 @@ _require_congruent_file_oplen()
> local oplen="$2"
>
> case $FSTYP in
> - nfs*|cifs|9p|virtiofs|ceph|glusterfs|overlay|pvfs2)
> + nfs*|afs|cifs|9p|virtiofs|ceph|glusterfs|overlay|pvfs2)
> # Network filesystems don't know about (or tell the client
> # about) the underlying file allocation unit and they generally
> # pass the file IO request to the underlying filesystem, so we
>
More information about the linux-afs
mailing list