Add test for read/write to readonly update mount.diff -r1.192 -r1.193 src/distrib/sets/lists/debug/mi
(hannken)
--- src/distrib/sets/lists/debug/mi 2017/01/16 08:18:11 1.192
+++ src/distrib/sets/lists/debug/mi 2017/01/27 10:45:11 1.193
@@ -1,14 +1,14 @@ | @@ -1,14 +1,14 @@ | |||
1 | # $NetBSD: mi,v 1.192 2017/01/16 08:18:11 ozaki-r Exp $ | 1 | # $NetBSD: mi,v 1.193 2017/01/27 10:45:11 hannken Exp $ | |
2 | ./etc/mtree/set.debug comp-sys-root | 2 | ./etc/mtree/set.debug comp-sys-root | |
3 | ./usr/lib comp-sys-usr compatdir | 3 | ./usr/lib comp-sys-usr compatdir | |
4 | ./usr/lib/i18n/libBIG5_g.a comp-c-debuglib debuglib,compatfile | 4 | ./usr/lib/i18n/libBIG5_g.a comp-c-debuglib debuglib,compatfile | |
5 | ./usr/lib/i18n/libDECHanyu_g.a comp-c-debuglib debuglib,compatfile | 5 | ./usr/lib/i18n/libDECHanyu_g.a comp-c-debuglib debuglib,compatfile | |
6 | ./usr/lib/i18n/libEUCTW_g.a comp-c-debuglib debuglib,compatfile | 6 | ./usr/lib/i18n/libEUCTW_g.a comp-c-debuglib debuglib,compatfile | |
7 | ./usr/lib/i18n/libEUC_g.a comp-c-debuglib debuglib,compatfile | 7 | ./usr/lib/i18n/libEUC_g.a comp-c-debuglib debuglib,compatfile | |
8 | ./usr/lib/i18n/libGBK2K_g.a comp-c-debuglib debuglib,compatfile | 8 | ./usr/lib/i18n/libGBK2K_g.a comp-c-debuglib debuglib,compatfile | |
9 | ./usr/lib/i18n/libHZ_g.a comp-c-debuglib debuglib,compatfile | 9 | ./usr/lib/i18n/libHZ_g.a comp-c-debuglib debuglib,compatfile | |
10 | ./usr/lib/i18n/libISO2022_g.a comp-c-debuglib debuglib,compatfile | 10 | ./usr/lib/i18n/libISO2022_g.a comp-c-debuglib debuglib,compatfile | |
11 | ./usr/lib/i18n/libJOHAB_g.a comp-c-debuglib debuglib,compatfile | 11 | ./usr/lib/i18n/libJOHAB_g.a comp-c-debuglib debuglib,compatfile | |
12 | ./usr/lib/i18n/libMSKanji_g.a comp-c-debuglib debuglib,compatfile | 12 | ./usr/lib/i18n/libMSKanji_g.a comp-c-debuglib debuglib,compatfile | |
13 | ./usr/lib/i18n/libUES_g.a comp-c-debuglib debuglib,compatfile | 13 | ./usr/lib/i18n/libUES_g.a comp-c-debuglib debuglib,compatfile | |
14 | ./usr/lib/i18n/libUTF1632_g.a comp-c-debuglib debuglib,compatfile | 14 | ./usr/lib/i18n/libUTF1632_g.a comp-c-debuglib debuglib,compatfile | |
@@ -1632,26 +1632,27 @@ | @@ -1632,26 +1632,27 @@ | |||
1632 | ./usr/libdata/debug/usr/tests/fs/puffs/t_basic.debug tests-fs-debug debug,atf,rump | 1632 | ./usr/libdata/debug/usr/tests/fs/puffs/t_basic.debug tests-fs-debug debug,atf,rump | |
1633 | ./usr/libdata/debug/usr/tests/fs/puffs/t_fuzz.debug tests-fs-debug debug,atf,rump | 1633 | ./usr/libdata/debug/usr/tests/fs/puffs/t_fuzz.debug tests-fs-debug debug,atf,rump | |
1634 | ./usr/libdata/debug/usr/tests/fs/puffs/t_io.debug tests-fs-debug debug,atf,rump | 1634 | ./usr/libdata/debug/usr/tests/fs/puffs/t_io.debug tests-fs-debug debug,atf,rump | |
1635 | ./usr/libdata/debug/usr/tests/fs/tmpfs/h_tools.debug tests-fs-debug debug,atf,rump | 1635 | ./usr/libdata/debug/usr/tests/fs/tmpfs/h_tools.debug tests-fs-debug debug,atf,rump | |
1636 | ./usr/libdata/debug/usr/tests/fs/tmpfs/t_renamerace.debug tests-fs-debug debug,atf,rump | 1636 | ./usr/libdata/debug/usr/tests/fs/tmpfs/t_renamerace.debug tests-fs-debug debug,atf,rump | |
1637 | ./usr/libdata/debug/usr/tests/fs/umapfs/t_basic.debug tests-fs-debug debug,atf,rump | 1637 | ./usr/libdata/debug/usr/tests/fs/umapfs/t_basic.debug tests-fs-debug debug,atf,rump | |
1638 | ./usr/libdata/debug/usr/tests/fs/union/t_basic.debug tests-obsolete obsolete,compattestfile | 1638 | ./usr/libdata/debug/usr/tests/fs/union/t_basic.debug tests-obsolete obsolete,compattestfile | |
1639 | ./usr/libdata/debug/usr/tests/fs/union/t_pr.debug tests-fs-debug debug,atf,rump | 1639 | ./usr/libdata/debug/usr/tests/fs/union/t_pr.debug tests-fs-debug debug,atf,rump | |
1640 | ./usr/libdata/debug/usr/tests/fs/vfs/t_full.debug tests-fs-debug debug,atf,rump | 1640 | ./usr/libdata/debug/usr/tests/fs/vfs/t_full.debug tests-fs-debug debug,atf,rump | |
1641 | ./usr/libdata/debug/usr/tests/fs/vfs/t_io.debug tests-fs-debug debug,atf,rump | 1641 | ./usr/libdata/debug/usr/tests/fs/vfs/t_io.debug tests-fs-debug debug,atf,rump | |
1642 | ./usr/libdata/debug/usr/tests/fs/vfs/t_renamerace.debug tests-fs-debug debug,atf,rump | 1642 | ./usr/libdata/debug/usr/tests/fs/vfs/t_renamerace.debug tests-fs-debug debug,atf,rump | |
1643 | ./usr/libdata/debug/usr/tests/fs/vfs/t_rmdirrace.debug tests-fs-debug debug,atf,rump | 1643 | ./usr/libdata/debug/usr/tests/fs/vfs/t_rmdirrace.debug tests-fs-debug debug,atf,rump | |
1644 | ./usr/libdata/debug/usr/tests/fs/vfs/t_ro.debug tests-fs-debug debug,atf,rump | 1644 | ./usr/libdata/debug/usr/tests/fs/vfs/t_ro.debug tests-fs-debug debug,atf,rump | |
1645 | ./usr/libdata/debug/usr/tests/fs/vfs/t_rwtoro.debug tests-fs-debug debug,atf,rump | |||
1645 | ./usr/libdata/debug/usr/tests/fs/vfs/t_union.debug tests-fs-debug debug,atf,rump | 1646 | ./usr/libdata/debug/usr/tests/fs/vfs/t_union.debug tests-fs-debug debug,atf,rump | |
1646 | ./usr/libdata/debug/usr/tests/fs/vfs/t_unpriv.debug tests-fs-debug debug,atf,rump | 1647 | ./usr/libdata/debug/usr/tests/fs/vfs/t_unpriv.debug tests-fs-debug debug,atf,rump | |
1647 | ./usr/libdata/debug/usr/tests/fs/vfs/t_vfsops.debug tests-fs-debug debug,atf,rump | 1648 | ./usr/libdata/debug/usr/tests/fs/vfs/t_vfsops.debug tests-fs-debug debug,atf,rump | |
1648 | ./usr/libdata/debug/usr/tests/fs/vfs/t_vnops.debug tests-fs-debug debug,atf,rump | 1649 | ./usr/libdata/debug/usr/tests/fs/vfs/t_vnops.debug tests-fs-debug debug,atf,rump | |
1649 | ./usr/libdata/debug/usr/tests/include/machine/t_bswap.debug tests-include-tests debug,atf,compattestfile | 1650 | ./usr/libdata/debug/usr/tests/include/machine/t_bswap.debug tests-include-tests debug,atf,compattestfile | |
1650 | ./usr/libdata/debug/usr/tests/include/sys/t_bitops.debug tests-include-tests debug,atf,compattestfile | 1651 | ./usr/libdata/debug/usr/tests/include/sys/t_bitops.debug tests-include-tests debug,atf,compattestfile | |
1651 | ./usr/libdata/debug/usr/tests/include/sys/t_bootblock.debug tests-include-tests debug,atf,compattestfile | 1652 | ./usr/libdata/debug/usr/tests/include/sys/t_bootblock.debug tests-include-tests debug,atf,compattestfile | |
1652 | ./usr/libdata/debug/usr/tests/include/sys/t_cdefs.debug tests-include-tests debug,atf,compattestfile | 1653 | ./usr/libdata/debug/usr/tests/include/sys/t_cdefs.debug tests-include-tests debug,atf,compattestfile | |
1653 | ./usr/libdata/debug/usr/tests/include/sys/t_pslist.debug tests-include-tests debug,atf,compattestfile | 1654 | ./usr/libdata/debug/usr/tests/include/sys/t_pslist.debug tests-include-tests debug,atf,compattestfile | |
1654 | ./usr/libdata/debug/usr/tests/include/sys/t_socket.debug tests-include-tests debug,atf,rump | 1655 | ./usr/libdata/debug/usr/tests/include/sys/t_socket.debug tests-include-tests debug,atf,rump | |
1655 | ./usr/libdata/debug/usr/tests/include/sys/t_tree.debug tests-include-tests debug,atf,compattestfile | 1656 | ./usr/libdata/debug/usr/tests/include/sys/t_tree.debug tests-include-tests debug,atf,compattestfile | |
1656 | ./usr/libdata/debug/usr/tests/include/sys/t_types.debug tests-include-tests debug,atf,compattestfile | 1657 | ./usr/libdata/debug/usr/tests/include/sys/t_types.debug tests-include-tests debug,atf,compattestfile | |
1657 | ./usr/libdata/debug/usr/tests/include/t_bitstring.debug tests-include-tests debug,atf,compattestfile | 1658 | ./usr/libdata/debug/usr/tests/include/t_bitstring.debug tests-include-tests debug,atf,compattestfile |
--- src/distrib/sets/lists/tests/mi 2017/01/14 01:44:13 1.714
+++ src/distrib/sets/lists/tests/mi 2017/01/27 10:45:11 1.715
@@ -1,14 +1,14 @@ | @@ -1,14 +1,14 @@ | |||
1 | # $NetBSD: mi,v 1.714 2017/01/14 01:44:13 christos Exp $ | 1 | # $NetBSD: mi,v 1.715 2017/01/27 10:45:11 hannken Exp $ | |
2 | # | 2 | # | |
3 | # Note: don't delete entries from here - mark them as "obsolete" instead. | 3 | # Note: don't delete entries from here - mark them as "obsolete" instead. | |
4 | # | 4 | # | |
5 | ./etc/mtree/set.tests tests-sys-root | 5 | ./etc/mtree/set.tests tests-sys-root | |
6 | ./usr/libdata/debug/usr/tests tests-base-debug compattestdir | 6 | ./usr/libdata/debug/usr/tests tests-base-debug compattestdir | |
7 | ./usr/libdata/debug/usr/tests/atf tests-atf-debug compattestfile,atf | 7 | ./usr/libdata/debug/usr/tests/atf tests-atf-debug compattestfile,atf | |
8 | ./usr/libdata/debug/usr/tests/atf/atf-c tests-atf-debug compattestfile,atf | 8 | ./usr/libdata/debug/usr/tests/atf/atf-c tests-atf-debug compattestfile,atf | |
9 | ./usr/libdata/debug/usr/tests/atf/atf-c++ tests-atf-debug compattestfile,atf | 9 | ./usr/libdata/debug/usr/tests/atf/atf-c++ tests-atf-debug compattestfile,atf | |
10 | ./usr/libdata/debug/usr/tests/atf/atf-c++/detail tests-atf-debug compattestfile,atf | 10 | ./usr/libdata/debug/usr/tests/atf/atf-c++/detail tests-atf-debug compattestfile,atf | |
11 | ./usr/libdata/debug/usr/tests/atf/atf-c/detail tests-atf-debug compattestfile,atf | 11 | ./usr/libdata/debug/usr/tests/atf/atf-c/detail tests-atf-debug compattestfile,atf | |
12 | ./usr/libdata/debug/usr/tests/atf/atf-compile tests-obsolete obsolete | 12 | ./usr/libdata/debug/usr/tests/atf/atf-compile tests-obsolete obsolete | |
13 | ./usr/libdata/debug/usr/tests/atf/atf-report tests-obsolete obsolete | 13 | ./usr/libdata/debug/usr/tests/atf/atf-report tests-obsolete obsolete | |
14 | ./usr/libdata/debug/usr/tests/atf/atf-run tests-obsolete obsolete | 14 | ./usr/libdata/debug/usr/tests/atf/atf-run tests-obsolete obsolete | |
@@ -1539,26 +1539,27 @@ | @@ -1539,26 +1539,27 @@ | |||
1539 | ./usr/tests/fs/union tests-fs-tests compattestfile,atf | 1539 | ./usr/tests/fs/union tests-fs-tests compattestfile,atf | |
1540 | ./usr/tests/fs/union/Atffile tests-fs-tests atf,rump | 1540 | ./usr/tests/fs/union/Atffile tests-fs-tests atf,rump | |
1541 | ./usr/tests/fs/union/Kyuafile tests-fs-tests atf,rump,kyua | 1541 | ./usr/tests/fs/union/Kyuafile tests-fs-tests atf,rump,kyua | |
1542 | ./usr/tests/fs/union/t_basic tests-obsolete obsolete,rump | 1542 | ./usr/tests/fs/union/t_basic tests-obsolete obsolete,rump | |
1543 | ./usr/tests/fs/union/t_pr tests-fs-tests atf,rump | 1543 | ./usr/tests/fs/union/t_pr tests-fs-tests atf,rump | |
1544 | ./usr/tests/fs/vfs tests-fs-tests compattestfile,atf | 1544 | ./usr/tests/fs/vfs tests-fs-tests compattestfile,atf | |
1545 | ./usr/tests/fs/vfs/Atffile tests-fs-tests atf,rump | 1545 | ./usr/tests/fs/vfs/Atffile tests-fs-tests atf,rump | |
1546 | ./usr/tests/fs/vfs/Kyuafile tests-fs-tests atf,rump,kyua | 1546 | ./usr/tests/fs/vfs/Kyuafile tests-fs-tests atf,rump,kyua | |
1547 | ./usr/tests/fs/vfs/t_full tests-fs-tests atf,rump | 1547 | ./usr/tests/fs/vfs/t_full tests-fs-tests atf,rump | |
1548 | ./usr/tests/fs/vfs/t_io tests-fs-tests atf,rump | 1548 | ./usr/tests/fs/vfs/t_io tests-fs-tests atf,rump | |
1549 | ./usr/tests/fs/vfs/t_renamerace tests-fs-tests atf,rump | 1549 | ./usr/tests/fs/vfs/t_renamerace tests-fs-tests atf,rump | |
1550 | ./usr/tests/fs/vfs/t_rmdirrace tests-fs-tests atf,rump | 1550 | ./usr/tests/fs/vfs/t_rmdirrace tests-fs-tests atf,rump | |
1551 | ./usr/tests/fs/vfs/t_ro tests-fs-tests atf,rump | 1551 | ./usr/tests/fs/vfs/t_ro tests-fs-tests atf,rump | |
1552 | ./usr/tests/fs/vfs/t_rwtoro tests-fs-tests atf,rump | |||
1552 | ./usr/tests/fs/vfs/t_union tests-fs-tests atf,rump | 1553 | ./usr/tests/fs/vfs/t_union tests-fs-tests atf,rump | |
1553 | ./usr/tests/fs/vfs/t_unpriv tests-fs-tests atf,rump | 1554 | ./usr/tests/fs/vfs/t_unpriv tests-fs-tests atf,rump | |
1554 | ./usr/tests/fs/vfs/t_vfsops tests-fs-tests atf,rump | 1555 | ./usr/tests/fs/vfs/t_vfsops tests-fs-tests atf,rump | |
1555 | ./usr/tests/fs/vfs/t_vnops tests-fs-tests atf,rump | 1556 | ./usr/tests/fs/vfs/t_vnops tests-fs-tests atf,rump | |
1556 | ./usr/tests/fs/zfs tests-fs-tests compattestfile,atf | 1557 | ./usr/tests/fs/zfs tests-fs-tests compattestfile,atf | |
1557 | ./usr/tests/fs/zfs/Atffile tests-fs-tests atf,zfs,rump | 1558 | ./usr/tests/fs/zfs/Atffile tests-fs-tests atf,zfs,rump | |
1558 | ./usr/tests/fs/zfs/Kyuafile tests-fs-tests atf,zfs,rump,kyua | 1559 | ./usr/tests/fs/zfs/Kyuafile tests-fs-tests atf,zfs,rump,kyua | |
1559 | ./usr/tests/fs/zfs/t_zpool tests-fs-tests atf,zfs,rump | 1560 | ./usr/tests/fs/zfs/t_zpool tests-fs-tests atf,zfs,rump | |
1560 | ./usr/tests/games tests-games-tests compattestfile,atf | 1561 | ./usr/tests/games tests-games-tests compattestfile,atf | |
1561 | ./usr/tests/games/Atffile tests-games-tests compattestfile,atf | 1562 | ./usr/tests/games/Atffile tests-games-tests compattestfile,atf | |
1562 | ./usr/tests/games/Kyuafile tests-games-tests kyua | 1563 | ./usr/tests/games/Kyuafile tests-games-tests kyua | |
1563 | ./usr/tests/games/t_factor tests-games-tests compattestfile,atf | 1564 | ./usr/tests/games/t_factor tests-games-tests compattestfile,atf | |
1564 | ./usr/tests/include tests-include-tests compattestfile,atf | 1565 | ./usr/tests/include tests-include-tests compattestfile,atf |
--- src/tests/fs/vfs/Makefile 2016/08/27 08:38:58 1.22
+++ src/tests/fs/vfs/Makefile 2017/01/27 10:45:11 1.23
@@ -1,45 +1,47 @@ | @@ -1,45 +1,47 @@ | |||
1 | # $NetBSD: Makefile,v 1.22 2016/08/27 08:38:58 christos Exp $ | 1 | # $NetBSD: Makefile,v 1.23 2017/01/27 10:45:11 hannken Exp $ | |
2 | # | 2 | # | |
3 | 3 | |||
4 | .include <bsd.own.mk> | 4 | .include <bsd.own.mk> | |
5 | 5 | |||
6 | TESTSDIR= ${TESTSBASE}/fs/vfs | 6 | TESTSDIR= ${TESTSBASE}/fs/vfs | |
7 | WARNS= 4 | 7 | WARNS= 4 | |
8 | 8 | |||
9 | TESTS_C+= t_full | 9 | TESTS_C+= t_full | |
10 | TESTS_C+= t_io | 10 | TESTS_C+= t_io | |
11 | TESTS_C+= t_renamerace | 11 | TESTS_C+= t_renamerace | |
12 | TESTS_C+= t_ro | 12 | TESTS_C+= t_ro | |
13 | TESTS_C+= t_rmdirrace | 13 | TESTS_C+= t_rmdirrace | |
14 | TESTS_C+= t_rwtoro | |||
14 | TESTS_C+= t_union | 15 | TESTS_C+= t_union | |
15 | TESTS_C+= t_unpriv | 16 | TESTS_C+= t_unpriv | |
16 | TESTS_C+= t_vfsops | 17 | TESTS_C+= t_vfsops | |
17 | TESTS_C+= t_vnops | 18 | TESTS_C+= t_vnops | |
18 | 19 | |||
19 | LDADD+=-lrumpnet_shmif -lrumpnet -lrumpnet_net -lrumpnet_netinet# TCP/IP | 20 | LDADD+=-lrumpnet_shmif -lrumpnet -lrumpnet_net -lrumpnet_netinet# TCP/IP | |
20 | LDADD+=-lrumpfs_nfs # NFS | 21 | LDADD+=-lrumpfs_nfs # NFS | |
21 | LDADD+=-lrumpfs_ext2fs # ext2fs | 22 | LDADD+=-lrumpfs_ext2fs # ext2fs | |
22 | LDADD+=-lrumpfs_ffs # ffs | 23 | LDADD+=-lrumpfs_ffs # ffs | |
23 | LDADD+=-lrumpfs_lfs # lfs | 24 | LDADD+=-lrumpfs_lfs # lfs | |
24 | LDADD+=-lrumpfs_msdos # msdos | 25 | LDADD+=-lrumpfs_msdos # msdos | |
25 | LDADD+=-lrumpfs_syspuffs # puffs | 26 | LDADD+=-lrumpfs_syspuffs # puffs | |
26 | LDADD+=-lrumpdev_putter -lrumpdev # \ putter | 27 | LDADD+=-lrumpdev_putter -lrumpdev # \ putter | |
27 | LDADD+=-lrumpfs_sysvbfs # sysvbfs | 28 | LDADD+=-lrumpfs_sysvbfs # sysvbfs | |
28 | LDADD+=-lrumpfs_tmpfs # tmpfs | 29 | LDADD+=-lrumpfs_tmpfs # tmpfs | |
29 | LDADD+=-lrumpfs_udf # udf | 30 | LDADD+=-lrumpfs_udf # udf | |
30 | LDADD+=-lrumpfs_union # union | 31 | LDADD+=-lrumpfs_union # union | |
31 | LDADD+=-lrumpfs_v7fs # v7fs | 32 | LDADD+=-lrumpfs_v7fs # v7fs | |
32 | LDADD+=-lrumpdev_disk -lrumpdev # disk device | 33 | LDADD+=-lrumpdev_disk -lrumpdev # disk device | |
34 | LDADD+=-lrumpfs_null -lrumpvfs_layerfs # nullfs | |||
33 | 35 | |||
34 | 36 | |||
35 | VFSTESTDIR != cd ${.CURDIR}/../common && ${PRINTOBJDIR} | 37 | VFSTESTDIR != cd ${.CURDIR}/../common && ${PRINTOBJDIR} | |
36 | LDADD+=-L${VFSTESTDIR} -lvfstest | 38 | LDADD+=-L${VFSTESTDIR} -lvfstest | |
37 | 39 | |||
38 | LDADD+=-lrumpvfs -lrumpkern_sysproxy -lrump -lrumpuser # base | 40 | LDADD+=-lrumpvfs -lrumpkern_sysproxy -lrump -lrumpuser # base | |
39 | LDADD+=-lrumpnet # static linking | 41 | LDADD+=-lrumpnet # static linking | |
40 | LDADD+=-lpthread | 42 | LDADD+=-lpthread | |
41 | 43 | |||
42 | LDADD+=-lutil | 44 | LDADD+=-lutil | |
43 | 45 | |||
44 | .if (${MKZFS} != "no") | 46 | .if (${MKZFS} != "no") | |
45 | LDADD+=-lrumpfs_zfs -lrumpkern_solaris -lrumpdev_rnd | 47 | LDADD+=-lrumpfs_zfs -lrumpkern_solaris -lrumpdev_rnd |
/* $NetBSD: t_rwtoro.c,v 1.1 2017/01/27 10:45:11 hannken Exp $ */
/*-
* Copyright (c) 2017 The NetBSD Foundation, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/types.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <sys/statvfs.h>
#include <atf-c.h>
#include <fcntl.h>
#include <libgen.h>
#include <stdlib.h>
#include <unistd.h>
#include <rump/rump_syscalls.h>
#include <rump/rump.h>
#include <miscfs/nullfs/null.h>
#include <fs/tmpfs/tmpfs_args.h>
#include "../common/h_fsmacros.h"
#include "../../h_macros.h"
static const char *unsupported = "fs does not support r/o remount";
static char file_path[MAXPATHLEN];
static int file_fd;
/*
* Remount the filesystem read-only and test errno.
* Skip filesystems that don't implement read-write -> read-only.
*/
static void
remount_ro(const atf_tc_t *tc, const char *mp, int expected_errno)
{
int error;
union {
struct tmpfs_args tmpfs;
char data[4095];
} mount_args;
int mount_args_length;
struct statvfs sbuf;
if (FSTYPE_ZFS(tc))
atf_tc_skip("%s", unsupported);
/* Prepare mount arguments. */
RL(rump_sys_statvfs1(mp, &sbuf, ST_WAIT));
mount_args_length = sizeof(mount_args);
memset(&mount_args, 0, mount_args_length);
if (FSTYPE_TMPFS(tc))
mount_args.tmpfs.ta_version = TMPFS_ARGS_VERSION;
mount_args_length = rump_sys_mount(sbuf.f_fstypename, mp, MNT_GETARGS,
&mount_args, mount_args_length);
ATF_CHECK(mount_args_length >= 0);
/* Remount and test result. */
error = rump_sys_mount(sbuf.f_fstypename, mp, MNT_UPDATE | MNT_RDONLY,
&mount_args, mount_args_length);
if (errno == EOPNOTSUPP)
atf_tc_skip("%s", unsupported);
if (expected_errno == 0)
ATF_CHECK(error == 0);
else
ATF_CHECK_ERRNO(expected_errno, error == -1);
}
static void
open_file_ro(const char *prefix)
{
snprintf(file_path, sizeof(file_path), "%s/file", prefix);
RL(file_fd = rump_sys_open(file_path, O_CREAT | O_RDWR, 0777));
RL(rump_sys_close(file_fd));
RL(file_fd = rump_sys_open(file_path, O_RDONLY));
}
static void
open_file_ro_unlink(const char *prefix)
{
snprintf(file_path, sizeof(file_path), "%s/file", prefix);
RL(file_fd = rump_sys_open(file_path, O_CREAT | O_RDWR, 0777));
RL(rump_sys_close(file_fd));
RL(file_fd = rump_sys_open(file_path, O_RDONLY));
RL(rump_sys_unlink(file_path));
}
static void
open_file_rw(const char *prefix)
{
snprintf(file_path, sizeof(file_path), "%s/file", prefix);
RL(file_fd = rump_sys_open(file_path, O_CREAT | O_RDWR, 0777));
}
static void
close_file(const char *unused)
{
RL(rump_sys_close(file_fd));
}
static void
basic_test(const atf_tc_t *tc, const char *mp, int expected_errno,
bool use_layer, void (*pre)(const char *), void (*post)(const char *))
{
const char *null_mount = "/nullm";
struct null_args nargs;
if (use_layer) {
RL(rump_sys_mkdir(null_mount, 0777));
memset(&nargs, 0, sizeof(nargs));
nargs.nulla_target = __UNCONST(mp);;
RL(rump_sys_mount(MOUNT_NULL, null_mount, 0,
&nargs, sizeof(nargs)));
}
if (pre)
(*pre)(use_layer ? null_mount : mp);
remount_ro(tc, mp, expected_errno);
if (post)
(*post)(use_layer ? null_mount : mp);
if (use_layer)
RL(rump_sys_unmount(null_mount, 0));
}
static void
noneopen(const atf_tc_t *tc, const char *mp)
{
basic_test(tc, mp, 0, false, NULL, NULL);
}
static void
readopen(const atf_tc_t *tc, const char *mp)
{
basic_test(tc, mp, 0, false, open_file_ro, close_file);
}
static void
writeopen(const atf_tc_t *tc, const char *mp)
{
basic_test(tc, mp, EBUSY, false, open_file_rw, close_file);
}
static void
read_unlinked(const atf_tc_t *tc, const char *mp)
{
basic_test(tc, mp, EBUSY, false, open_file_ro_unlink, close_file);
}
static void
layer_noneopen(const atf_tc_t *tc, const char *mp)
{
basic_test(tc, mp, 0, true, NULL, NULL);
}
static void
layer_readopen(const atf_tc_t *tc, const char *mp)
{
basic_test(tc, mp, 0, true, open_file_ro, close_file);
}
static void
layer_writeopen(const atf_tc_t *tc, const char *mp)
{
basic_test(tc, mp, EBUSY, true, open_file_rw, close_file);
}
static void
layer_read_unlinked(const atf_tc_t *tc, const char *mp)
{
basic_test(tc, mp, EBUSY, true, open_file_ro_unlink, close_file);
}
ATF_TC_FSAPPLY(noneopen, "remount r/o with no file open");
ATF_TC_FSAPPLY(readopen, "remount r/o with file open for reading");
ATF_TC_FSAPPLY(writeopen, "remount r/o with file open for writing");
ATF_TC_FSAPPLY(read_unlinked,
"remount r/o with unlinked file open for reading");
ATF_TC_FSAPPLY(layer_noneopen, "remount r/o with no file open on layer");
ATF_TC_FSAPPLY(layer_readopen,
"remount r/o with file open for reading on layer");
ATF_TC_FSAPPLY(layer_writeopen,
"remount r/o with file open for writing on layer");
ATF_TC_FSAPPLY(layer_read_unlinked,
"remount r/o with unlinked file open for reading on layer");
ATF_TP_ADD_TCS(tp)
{
ATF_TP_FSAPPLY(noneopen);
ATF_TP_FSAPPLY(readopen);
ATF_TP_FSAPPLY(writeopen);
ATF_TP_FSAPPLY(read_unlinked);
ATF_TP_FSAPPLY(layer_noneopen);
ATF_TP_FSAPPLY(layer_readopen);
ATF_TP_FSAPPLY(layer_writeopen);
ATF_TP_FSAPPLY(layer_read_unlinked);
return atf_no_error();
}