Stefan Behrens
2011-Aug-01 10:31 UTC
[PATCH v3 0/2] xfstests: Changed a couple of tests to be generic
Changes v2->v3: - Merged 3 patches into one. - Less verbose subject lines. Changes v1->v2: - Instead of just adding btrfs to the list of supported filesystems, the 7 tests that are touched by this patch series are now executed for all filesystems (since the tests are generic ones). - The changes in src/t_immutable.c are revised to make the setting of append-only and immutable flags generic instead of just adding code for btrfs. This patch series changes the tests 015, 062, 079, 083, 117, 120 and 192 to be generic for all filesystems and to be executed for all filesystems. For test 079 to run, src/t_immutable.c was also modified to use the new generic FS_IOC_SETFLAGS/FS_IOC_GETFLAGS ioctl() if they are available. Stefan Behrens (2): xfstests: make more tests generic xfstests: make t_immutable and 079 filesystem-agnostic 015 | 5 ++- 062 | 4 +- 062.out | 6 ----- 079 | 12 +++++++-- 083 | 12 +++++++-- 117 | 4 +- 120 | 4 +- 192 | 2 +- src/t_immutable.c | 66 +++++++++++++++++----------------------------------- 9 files changed, 50 insertions(+), 65 deletions(-) -- 1.7.3.4 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Use _scratch_mkfs / _scratch_mkfs_sized instead of _scratch_mkfs_xfs where possible. Execute 015, 062, 083, 117, 120 and 192 for all filesystems, these tests used to be XFS specific. Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de> --- 015 | 5 +++-- 062 | 4 ++-- 062.out | 6 ------ 083 | 12 +++++++++--- 117 | 4 ++-- 120 | 4 ++-- 192 | 2 +- 7 files changed, 19 insertions(+), 18 deletions(-) diff --git a/015 b/015 index 8f2be7c..4206b93 100755 --- a/015 +++ b/015 @@ -48,13 +48,14 @@ _free() } # real QA test starts here -_supported_fs xfs +_supported_fs generic _supported_os IRIX Linux _require_scratch _require_nobigloopfs -_scratch_mkfs_xfs -d size=50m >/dev/null || _fail "mkfs failed" +_scratch_mkfs_sized `expr 50 \* 1024 \* 1024` >/dev/null 2>&1 \ + || _fail "mkfs failed" _scratch_mount || _fail "mount failed" out=$SCRATCH_MNT/fillup.$$ rm -f $seq.full diff --git a/062 b/062 index 5cb6f92..a6e4bc8 100755 --- a/062 +++ b/062 @@ -71,7 +71,7 @@ _create_test_bed() } # real QA test starts here -_supported_fs xfs udf nfs +_supported_fs generic _supported_os Linux _require_scratch @@ -80,7 +80,7 @@ _require_attrs rm -f $tmp.backup1 $tmp.backup2 $seq.full # real QA test starts here -_scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs +_scratch_mkfs > /dev/null 2>&1 || _fail "mkfs failed" _scratch_mount || _fail "mount failed" _create_test_bed diff --git a/062.out b/062.out index 73fd628..1d5a094 100644 --- a/062.out +++ b/062.out @@ -1,10 +1,4 @@ QA output created by 062 -meta-data=DDEV isize=XXX agcount=N, agsize=XXX blks -data = bsize=XXX blocks=XXX, imaxpct=PCT - = sunit=XXX swidth=XXX, unwritten=X -naming =VERN bsize=XXX -log =LDEV bsize=XXX blocks=XXX -realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** create test bed SCRATCH_MNT SCRATCH_MNT/dev diff --git a/083 b/083 index 7342baa..441284e 100755 --- a/083 +++ b/083 @@ -54,7 +54,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 . ./common.filter # real QA test starts here -_supported_fs xfs +_supported_fs generic _supported_os IRIX Linux _require_scratch @@ -72,8 +72,14 @@ workout() umount $SCRATCH_DEV >/dev/null 2>&1 echo "*** mkfs -dsize=$fsz,agcount=$ags" >>$seq.full echo "" >>$seq.full - _scratch_mkfs_xfs -dsize=$fsz,agcount=$ags >>$seq.full 2>&1 \ - || _fail "size=$fsz,agcount=$ags mkfs failed" + if [ $FSTYP = xfs ] + then + _scratch_mkfs_xfs -dsize=$fsz,agcount=$ags >>$seq.full 2>&1 \ + || _fail "size=$fsz,agcount=$ags mkfs failed" + else + _scratch_mkfs_sized $fsz >>$seq.full 2>&1 \ + || _fail "size=$fsz mkfs failed" + fi _scratch_mount >>$seq.full 2>&1 \ || _fail "mount failed" diff --git a/117 b/117 index dd880cb..fcf0485 100755 --- a/117 +++ b/117 @@ -51,7 +51,7 @@ _cleanup() . ./common.attr # real QA test starts here -_supported_fs xfs +_supported_fs generic _supported_os IRIX Linux _setup_testdir @@ -62,7 +62,7 @@ rm -f $seq.full umount $SCRATCH_DEV >/dev/null 2>&1 echo "*** MKFS ***" >>$seq.full echo "" >>$seq.full -_scratch_mkfs_xfs >>$seq.full 2>&1 \ +_scratch_mkfs >>$seq.full 2>&1 \ || _fail "mkfs failed" _scratch_mount >>$seq.full 2>&1 \ || _fail "mount failed" diff --git a/120 b/120 index bf1e617..010a8f3 100755 --- a/120 +++ b/120 @@ -37,11 +37,11 @@ trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 . ./common.filter # real QA test starts here -_supported_fs xfs +_supported_fs generic _supported_os Linux IRIX _require_scratch -_scratch_mkfs_xfs >/dev/null 2>&1 +_scratch_mkfs >/dev/null 2>&1 || _fail "mkfs failed" _compare_access_times() { diff --git a/192 b/192 index d8301d5..4b69147 100755 --- a/192 +++ b/192 @@ -45,7 +45,7 @@ _access_time() # real QA test starts here -_supported_fs xfs udf nfs +_supported_fs generic _supported_os Linux #delay=150 #delay=75 -- 1.7.3.4 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Stefan Behrens
2011-Aug-01 10:31 UTC
[PATCH v3 2/2] xfstests: make t_immutable and 079 filesystem-agnostic
Changed the test 079 to be generic for all filesystems and to be executed for all filesystems. In src/t_immutable.c which is compiled for Linux only, replaced the old style XFS and ext2 specific code for setting the append-only and immutable flags by generic code that makes use of the ioctl(FS_IOC_SETFLAGS) and ioctl(FS_IOC_GETFLAGS). Therefore the check for the specific filesystem type was removed. FS_IOC_GETFLAGS/FS_IOC_SETFLAGS is always used. This code is inside an ''#ifdef FS_IOC_SETFLAGS'' block in order to never fail compilation. Without support for FS_IOC_SETFLAGS, the test completes with _notrun. Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de> --- 079 | 12 +++++++-- src/t_immutable.c | 66 +++++++++++++++++----------------------------------- 2 files changed, 31 insertions(+), 47 deletions(-) diff --git a/079 b/079 index 6c43fe7..8f6e179 100755 --- a/079 +++ b/079 @@ -46,7 +46,7 @@ _cleanup() . ./common.filter . ./common.attr -_supported_fs xfs +_supported_fs generic _supported_os Linux _require_attrs @@ -55,10 +55,16 @@ _require_scratch [ -x $timmutable ] || _notrun "t_immutable was not built for this platform" # real QA test starts here -_scratch_mkfs_xfs 2>&1 >/dev/null || _fail "mkfs failed" +_scratch_mkfs >/dev/null 2>&1 || _fail "mkfs failed" _scratch_mount || _fail "mount failed" echo "*** starting up" -$timmutable -c $SCRATCH_MNT/$seq +$timmutable -c $SCRATCH_MNT/$seq >$tmp.out 2>&1 +if grep -q ''Operation not supported'' $tmp.out; then + rm -f $tmp.out + _notrun "Setting immutable/append flag not supported" +fi +cat $tmp.out +rm -f $tmp.out status=$? exit diff --git a/src/t_immutable.c b/src/t_immutable.c index 7bb3154..87ffc75 100644 --- a/src/t_immutable.c +++ b/src/t_immutable.c @@ -41,11 +41,8 @@ #include <xfs/xfs.h> #include <xfs/handle.h> #include <xfs/jdm.h> - -#define EXT2_SUPER_MAGIC 0xEF53 -#define EXT2_IMMUTABLE_FL 0x00000010 -#define EXT2_APPEND_FL 0x00000020 -#define EXT2_IOC_SETFLAGS _IOW(''f'', 2, long) +#include <linux/fs.h> +#include <linux/magic.h> #ifndef XFS_SUPER_MAGIC #define XFS_SUPER_MAGIC 0x58465342 @@ -55,52 +52,33 @@ extern const char *__progname; static int fsetflag(const char *path, int fd, int on, int immutable) { - int e2flags = 0; - struct fsxattr attr; - struct statfs stfs; - int xfsfl; - int e2fl; - - if (immutable) { - xfsfl = XFS_XFLAG_IMMUTABLE; - e2fl = EXT2_IMMUTABLE_FL; - } else { - xfsfl = XFS_XFLAG_APPEND; - e2fl = EXT2_APPEND_FL; - } +#ifdef FS_IOC_SETFLAGS + int fsflags = 0; + int fsfl; - if (fstatfs(fd, &stfs) != 0) + if (ioctl(fd, FS_IOC_GETFLAGS, &fsflags) < 0) { + close(fd); return 1; - - if (stfs.f_type == XFS_SUPER_MAGIC) { - if (xfsctl(path, fd, XFS_IOC_FSGETXATTR, &attr) < 0) { - close(fd); - return 1; - } - if (on) - attr.fsx_xflags |= xfsfl; - else - attr.fsx_xflags &= ~xfsfl; - if (xfsctl(path, fd, XFS_IOC_FSSETXATTR, &attr) < 0) { - close(fd); - return 1; - } - } else if (stfs.f_type == EXT2_SUPER_MAGIC) { - if (on) - e2flags |= e2fl; - else - e2flags &= ~e2fl; - if (ioctl(fd, EXT2_IOC_SETFLAGS, &e2flags) < 0) { - close(fd); - return 1; - } - } else { - errno = EOPNOTSUPP; + } + if (immutable) + fsfl = FS_IMMUTABLE_FL; + else + fsfl = FS_APPEND_FL; + if (on) + fsflags |= fsfl; + else + fsflags &= ~fsfl; + if (ioctl(fd, FS_IOC_SETFLAGS, &fsflags) < 0) { close(fd); return 1; } close(fd); return 0; +#else + errno = EOPNOTSUPP; + close(fd); + return 1; +#endif } static int add_acl(const char *path, const char *acl_text) -- 1.7.3.4 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Christoph Hellwig
2011-Aug-01 11:03 UTC
Re: [PATCH v3 0/2] xfstests: Changed a couple of tests to be generic
These look good to me. Unless anyone has objections I''ll pull them in tomorrow. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi, On Mon, Aug 01, 2011 at 12:31:19PM +0200, Stefan Behrens wrote:> Use _scratch_mkfs / _scratch_mkfs_sized instead of _scratch_mkfs_xfs > where possible. > Execute 015, 062, 083, 117, 120 and 192 for all filesystems, these > tests used to be XFS specific.this patch is now in xfstests-dev and somehow breaks btrfs testing. $ check 015 015 [failed, exit status 1] - output mismatch (see 015.out.bad) --- 015.out 2011-02-11 11:42:29.000000000 +0100 +++ 015.out.bad 2011-08-10 17:19:48.000000000 +0200 @@ -1,7 +1,4 @@ QA output created by 015 -fill disk: - !!! disk full (expected) -check free space: -delete fill: -check free space: - !!! free space is in range +mkfs failed +(see 015.full for details) +umount: /mnt/sda10: not mounted $ check 062 --- 062.out 2011-08-10 17:17:23.000000000 +0200 +++ 062.out.bad 2011-08-10 17:20:57.000000000 +0200 @@ -49,10 +49,13 @@ user.name2=0xcafe *** remove attribute -SCRATCH_MNT/reg: user.name2: No such attribute +# file: SCRATCH_MNT/reg +user.name2 + <...long error output...> $ check 083 083 [failed, exit status 1] - output mismatch (see 083.out.bad) --- 083.out 2011-02-11 11:42:30.000000000 +0100 +++ 083.out.bad 2011-08-10 17:21:37.000000000 +0200 @@ -1,4 +1,5 @@ QA output created by 083 *** test out-of-space handling for random write operations -*** done +size=100m mkfs failed +(see 083.full for details) *** unmount checks 117,120,192 passed there''s a hardcoded path for mkfs.btrfs in common.rc:_scratch_mkfs_sized() 335 btrfs) 336 /sbin/mkfs.$FSTYP $MKFS_OPTIONS $SCRATCH_DEV -b $fssize 337 ;; I have a /usr/local/ installation of btrfsprogs from git, _scratch_mkfs_sized() was not called for btrfs before. Possible ways to fix this: 1) use /sbin/mkfs -t $FSTYP like _scratch_mkfs, or 2) set $MKFS_BTRFS_PROG like for some other filesystems What is preferred? david> Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de> > --- > 015 | 5 +++-- > 062 | 4 ++-- > 062.out | 6 ------ > 083 | 12 +++++++++--- > 117 | 4 ++-- > 120 | 4 ++-- > 192 | 2 +- > 7 files changed, 19 insertions(+), 18 deletions(-) > > diff --git a/015 b/015 > index 8f2be7c..4206b93 100755 > --- a/015 > +++ b/015 > @@ -48,13 +48,14 @@ _free() > } > > # real QA test starts here > -_supported_fs xfs > +_supported_fs generic > _supported_os IRIX Linux > > _require_scratch > _require_nobigloopfs > > -_scratch_mkfs_xfs -d size=50m >/dev/null || _fail "mkfs failed" > +_scratch_mkfs_sized `expr 50 \* 1024 \* 1024` >/dev/null 2>&1 \ > + || _fail "mkfs failed" > _scratch_mount || _fail "mount failed" > out=$SCRATCH_MNT/fillup.$$ > rm -f $seq.full > diff --git a/062 b/062 > index 5cb6f92..a6e4bc8 100755 > --- a/062 > +++ b/062 > @@ -71,7 +71,7 @@ _create_test_bed() > } > > # real QA test starts here > -_supported_fs xfs udf nfs > +_supported_fs generic > _supported_os Linux > > _require_scratch > @@ -80,7 +80,7 @@ _require_attrs > rm -f $tmp.backup1 $tmp.backup2 $seq.full > > # real QA test starts here > -_scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs > +_scratch_mkfs > /dev/null 2>&1 || _fail "mkfs failed" > _scratch_mount || _fail "mount failed" > _create_test_bed > > diff --git a/062.out b/062.out > index 73fd628..1d5a094 100644 > --- a/062.out > +++ b/062.out > @@ -1,10 +1,4 @@ > QA output created by 062 > -meta-data=DDEV isize=XXX agcount=N, agsize=XXX blks > -data = bsize=XXX blocks=XXX, imaxpct=PCT > - = sunit=XXX swidth=XXX, unwritten=X > -naming =VERN bsize=XXX > -log =LDEV bsize=XXX blocks=XXX > -realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX > *** create test bed > SCRATCH_MNT > SCRATCH_MNT/dev > diff --git a/083 b/083 > index 7342baa..441284e 100755 > --- a/083 > +++ b/083 > @@ -54,7 +54,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 > . ./common.filter > > # real QA test starts here > -_supported_fs xfs > +_supported_fs generic > _supported_os IRIX Linux > > _require_scratch > @@ -72,8 +72,14 @@ workout() > umount $SCRATCH_DEV >/dev/null 2>&1 > echo "*** mkfs -dsize=$fsz,agcount=$ags" >>$seq.full > echo "" >>$seq.full > - _scratch_mkfs_xfs -dsize=$fsz,agcount=$ags >>$seq.full 2>&1 \ > - || _fail "size=$fsz,agcount=$ags mkfs failed" > + if [ $FSTYP = xfs ] > + then > + _scratch_mkfs_xfs -dsize=$fsz,agcount=$ags >>$seq.full 2>&1 \ > + || _fail "size=$fsz,agcount=$ags mkfs failed" > + else > + _scratch_mkfs_sized $fsz >>$seq.full 2>&1 \ > + || _fail "size=$fsz mkfs failed" > + fi > _scratch_mount >>$seq.full 2>&1 \ > || _fail "mount failed" > > diff --git a/117 b/117 > index dd880cb..fcf0485 100755 > --- a/117 > +++ b/117 > @@ -51,7 +51,7 @@ _cleanup() > . ./common.attr > > # real QA test starts here > -_supported_fs xfs > +_supported_fs generic > _supported_os IRIX Linux > > _setup_testdir > @@ -62,7 +62,7 @@ rm -f $seq.full > umount $SCRATCH_DEV >/dev/null 2>&1 > echo "*** MKFS ***" >>$seq.full > echo "" >>$seq.full > -_scratch_mkfs_xfs >>$seq.full 2>&1 \ > +_scratch_mkfs >>$seq.full 2>&1 \ > || _fail "mkfs failed" > _scratch_mount >>$seq.full 2>&1 \ > || _fail "mount failed" > diff --git a/120 b/120 > index bf1e617..010a8f3 100755 > --- a/120 > +++ b/120 > @@ -37,11 +37,11 @@ trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 > . ./common.filter > > # real QA test starts here > -_supported_fs xfs > +_supported_fs generic > _supported_os Linux IRIX > > _require_scratch > -_scratch_mkfs_xfs >/dev/null 2>&1 > +_scratch_mkfs >/dev/null 2>&1 || _fail "mkfs failed" > > _compare_access_times() > { > diff --git a/192 b/192 > index d8301d5..4b69147 100755 > --- a/192 > +++ b/192 > @@ -45,7 +45,7 @@ _access_time() > > # real QA test starts here > > -_supported_fs xfs udf nfs > +_supported_fs generic > _supported_os Linux > #delay=150 > #delay=75 > -- > 1.7.3.4 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs-- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Christoph Hellwig
2011-Aug-10 16:33 UTC
Re: [PATCH v3 1/2] xfstests: make more tests generic
On Wed, Aug 10, 2011 at 05:52:14PM +0200, David Sterba wrote:> there''s a hardcoded path for mkfs.btrfs in common.rc:_scratch_mkfs_sized() > > 335 btrfs) > 336 /sbin/mkfs.$FSTYP $MKFS_OPTIONS $SCRATCH_DEV -b $fssize > 337 ;; > > I have a /usr/local/ installation of btrfsprogs from git, > _scratch_mkfs_sized() was not called for btrfs before. > > Possible ways to fix this: > 1) use /sbin/mkfs -t $FSTYP like _scratch_mkfs, or > 2) set $MKFS_BTRFS_PROG like for some other filesystems > > > What is preferred?Please send a patch for variant 2. As soon as we have option using the generic mkfs wrapper sounds like a good idea. In addition to that treating btrfs the same way as other filesystems is always good. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, 2011-08-10 at 17:52 +0200, David Sterba wrote:> Hi, > > On Mon, Aug 01, 2011 at 12:31:19PM +0200, Stefan Behrens wrote: > > Use _scratch_mkfs / _scratch_mkfs_sized instead of _scratch_mkfs_xfs > > where possible. > > Execute 015, 062, 083, 117, 120 and 192 for all filesystems, these > > tests used to be XFS specific. > > this patch is now in xfstests-dev and somehow breaks btrfs testing.. . .> there''s a hardcoded path for mkfs.btrfs in common.rc:_scratch_mkfs_sized() > > 335 btrfs) > 336 /sbin/mkfs.$FSTYP $MKFS_OPTIONS $SCRATCH_DEV -b $fssize > 337 ;; > > I have a /usr/local/ installation of btrfsprogs from git, > _scratch_mkfs_sized() was not called for btrfs before. > > Possible ways to fix this: > 1) use /sbin/mkfs -t $FSTYP like _scratch_mkfs, or > 2) set $MKFS_BTRFS_PROG like for some other filesystems > > > What is preferred?Whatever works. My personal preference would be option (1) if it works, since it''s does the generic thing directly rather than suggesting something special is needed for btrfs. But if that doesn''t work, consistency rules so MKFS_BTRFS_PROG "like for some other filesystems" is good. -Alex -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, 2011-08-10 at 12:33 -0400, Christoph Hellwig wrote:> On Wed, Aug 10, 2011 at 05:52:14PM +0200, David Sterba wrote: > > there''s a hardcoded path for mkfs.btrfs in common.rc:_scratch_mkfs_sized() > > > > 335 btrfs) > > 336 /sbin/mkfs.$FSTYP $MKFS_OPTIONS $SCRATCH_DEV -b $fssize > > 337 ;; > > > > I have a /usr/local/ installation of btrfsprogs from git, > > _scratch_mkfs_sized() was not called for btrfs before. > > > > Possible ways to fix this: > > 1) use /sbin/mkfs -t $FSTYP like _scratch_mkfs, or > > 2) set $MKFS_BTRFS_PROG like for some other filesystems > > > > > > What is preferred? > > Please send a patch for variant 2. As soon as we have option using > the generic mkfs wrapper sounds like a good idea. In addition to that > treating btrfs the same way as other filesystems is always good.Whoops, we gave different answers. Do what Christoph says... -Alex -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Christoph Hellwig
2011-Aug-10 16:43 UTC
Re: [PATCH v3 1/2] xfstests: make more tests generic
On Wed, Aug 10, 2011 at 11:36:09AM -0500, Alex Elder wrote:> > Possible ways to fix this: > > 1) use /sbin/mkfs -t $FSTYP like _scratch_mkfs, or > > 2) set $MKFS_BTRFS_PROG like for some other filesystems > > > > > > What is preferred? > > Whatever works. My personal preference would be option (1) > if it works, since it''s does the generic thing directly > rather than suggesting something special is needed for > btrfs. But if that doesn''t work, consistency rules so > MKFS_BTRFS_PROG "like for some other filesystems" is good.Normally I''d agree with you, but I''ve run into problems with the generic mkfs binary, as it parses some options that might otherwise be left to the filesystem. E.g. it parses -l by itself, which causes problems when creating an xfs filesystem with an external log. Note that any filesystem supported by _scratch_mkfs_sized is special; there is no generic way to specify the size of a filesystem. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html