linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [git pull] more vfs bits
@ 2015-02-21  3:34 Al Viro
  2015-02-21 22:45 ` Linus Torvalds
  2015-02-22  0:18 ` David Howells
  0 siblings, 2 replies; 30+ messages in thread
From: Al Viro @ 2015-02-21  3:34 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: linux-kernel, linux-fsdevel

	Assorted stuff from this cycle.  The big ones here are multilayer
overlayfs from Miklos and beginning of sorting ->d_inode accesses out from
David.  And no, as far as I can tell David hadn't been taken over by
Malicious Entities From Beyond Spacetime^W^Wdrivers/staging - this series
is actually a useful work...  There's more stuff in that direction (nowhere
near that long, thankfully), but that's probably better dealt with after
-rc1, if not the next cycle...

	Please, pull from
git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git for-linus

Shortlog:
Al Viro (6):
      switch ll_lookup_finish_locks() and ll_revalidate_it_finish() to inode
      configfs: configfs_create() init callback is never NULL and it never fails
      configfs: fold create_dir() into its only caller
      configfs_add_file: fold into its sole caller
      don't bother with most of the bad_file_ops methods
      hypfs: switch to read_iter/write_iter

Bastien Nocera (1):
      coredump: Fix typo in comment

David Howells (98):
      configfs: Fix potential NULL d_inode dereference
      Infiniband: Fix potential NULL d_inode dereference
      VFS: Introduce inode-getting helpers for layered/unioned fs environments
      VFS: Add a whiteout dentry type
      VFS: Add a fallthrough flag for marking virtual dentries
      VFS: Split DCACHE_FILE_TYPE into regular and special types
      Apparmor: mediated_filesystem() should use dentry->d_sb not inode->i_sb
      Apparmor: Use d_is_positive/negative() rather than testing dentry->d_inode
      TOMOYO: Use d_is_dir() rather than d_inode and S_ISDIR()
      Smack: Use d_is_positive() rather than testing dentry->d_inode
      SELinux: Use d_is_positive() rather than testing dentry->d_inode
      VFS: (Scripted) Convert S_ISLNK/DIR/REG(dentry->d_inode) to d_is_*(dentry)
      Cachefiles: Fix up scripted S_ISDIR/S_ISREG/S_ISLNK conversions
      fanotify: Fix up scripted S_ISDIR/S_ISREG/S_ISLNK conversions
      VFS: Fix up audit to use dentry_inode()
      VFS: Fix up missed bits of lustre to use fs_inode()
      VFS: Fix up missed bits of ecryptfs to use fs_inode()
      VFS: Fix up missed bits of apparmor to use fs_inode()
      VFS: (Scripted) Convert ->d_inode to fs_inode() in drivers/staging/lustre/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/9p/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/adfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/affs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/afs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/autofs4/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/befs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/bfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/btrfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/btrfs/tests/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/ceph/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/cifs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/coda/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/configfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/debugfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/devpts/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/ecryptfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/efivarfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/efs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/exofs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/ext2/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/ext3/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/ext4/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/f2fs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/fat/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/freevxfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/fuse/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/gfs2/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/hfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/hostfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/hpfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/hppfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/hugetlbfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/isofs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/jffs2/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/jfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/kernfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/logfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/minix/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/ncpfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/nfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/nilfs2/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/ntfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/ocfs2/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/omfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/proc/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/pstore/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/qnx6/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/ramfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/reiserfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/squashfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/sysv/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/ubifs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/udf/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/ufs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/xfs/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in ipc/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in kernel/trace/
      VFS: (Scripted) Convert ->d_inode to fs_inode() in arch/ia64/kernel/perfmon.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in arch/powerpc/platforms/cell/spufs/inode.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in arch/s390/hypfs/inode.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in drivers/base/devtmpfs.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in drivers/infiniband/hw/ipath/ipath_fs.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in drivers/infiniband/hw/qib/qib_fs.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in drivers/oprofile/oprofilefs.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in drivers/usb/gadget/legacy/inode.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/binfmt_misc.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/block_dev.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/inode.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/libfs.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/nsfs.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/pipe.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in fs/quota/dquot.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in kernel/relay.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in mm/shmem.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in net/socket.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in net/sunrpc/rpc_pipe.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in security/inode.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in security/selinux/selinuxfs.c
      VFS: (Scripted) Convert ->d_inode to fs_inode() in security/smack/smackfs.c

Kinglong Mee (1):
      fs/aio.c: Remove duplicate function name in pr_debug messages

Konstantin Khlebnikov (1):
      trylock_super(): replacement for grab_super_passive()

Miklos Szeredi (16):
      ovl: check whiteout while reading directory
      ovl: make path-type a bitmap
      ovl: dont replace opaque dir
      ovl: add mutli-layer infrastructure
      ovl: helper to iterate layers
      ovl: multi-layer readdir
      ovl: multi-layer lookup
      ovl: check whiteout on lowest layer as well
      ovl: lookup ENAMETOOLONG on lower means ENOENT
      ovl: allow statfs if no upper layer
      ovl: mount: change order of initialization
      ovl: improve mount helpers
      ovl: make upperdir optional
      ovl: support multiple lower layers
      ovl: add testsuite to docs
      ovl: document lower layer ordering

Omar Sandoval (1):
      posix_acl: fix reference leaks in posix_acl_create

Rasmus Villemoes (1):
      autofs4: Wrong format for printing dentry

Seunghun Lee (1):
      ovl: Prevent rw remount when it should be ro mount

hujianyang (5):
      ovl: Cleanup redundant blank lines
      ovl: Use macros to present ovl_xattr
      ovl: Fix kernel panic while mounting overlayfs
      ovl: Fix opaque regression in ovl_lookup
      ovl: discard independent cursor in readdir()

Diffstat:
 Documentation/filesystems/overlayfs.txt            |  28 +
 arch/ia64/kernel/perfmon.c                         |   2 +-
 arch/powerpc/platforms/cell/spufs/inode.c          |  22 +-
 arch/s390/hypfs/inode.c                            |  71 ++-
 drivers/base/devtmpfs.c                            |  32 +-
 drivers/infiniband/hw/ipath/ipath_fs.c             |  16 +-
 drivers/infiniband/hw/qib/qib_fs.c                 |  20 +-
 drivers/oprofile/oprofilefs.c                      |  16 +-
 drivers/staging/lustre/lustre/llite/dcache.c       |  26 +-
 drivers/staging/lustre/lustre/llite/file.c         |  24 +-
 .../staging/lustre/lustre/llite/llite_internal.h   |   6 +-
 drivers/staging/lustre/lustre/llite/llite_lib.c    |   6 +-
 drivers/staging/lustre/lustre/llite/llite_nfs.c    |   6 +-
 drivers/staging/lustre/lustre/llite/namei.c        |  30 +-
 drivers/staging/lustre/lustre/llite/statahead.c    |  28 +-
 drivers/staging/lustre/lustre/llite/symlink.c      |   2 +-
 drivers/staging/lustre/lustre/llite/xattr.c        |   8 +-
 drivers/usb/gadget/legacy/inode.c                  |   2 +-
 fs/9p/acl.c                                        |   4 +-
 fs/9p/vfs_dentry.c                                 |   4 +-
 fs/9p/vfs_inode.c                                  |  36 +-
 fs/9p/vfs_inode_dotl.c                             |  16 +-
 fs/9p/vfs_super.c                                  |   8 +-
 fs/adfs/inode.c                                    |   2 +-
 fs/affs/amigaffs.c                                 |   8 +-
 fs/affs/inode.c                                    |   2 +-
 fs/affs/namei.c                                    |  10 +-
 fs/afs/dir.c                                       |  42 +-
 fs/afs/inode.c                                     |   4 +-
 fs/afs/mntpt.c                                     |   8 +-
 fs/afs/super.c                                     |   2 +-
 fs/aio.c                                           |   6 +-
 fs/autofs4/autofs_i.h                              |   4 +-
 fs/autofs4/expire.c                                |   2 +-
 fs/autofs4/inode.c                                 |   6 +-
 fs/autofs4/root.c                                  |  20 +-
 fs/autofs4/symlink.c                               |   2 +-
 fs/autofs4/waitq.c                                 |   4 +-
 fs/bad_inode.c                                     | 147 ------
 fs/befs/linuxvfs.c                                 |   4 +-
 fs/bfs/dir.c                                       |   8 +-
 fs/binfmt_misc.c                                   |  16 +-
 fs/block_dev.c                                     |   2 +-
 fs/btrfs/export.c                                  |   6 +-
 fs/btrfs/file.c                                    |   2 +-
 fs/btrfs/inode.c                                   |  30 +-
 fs/btrfs/ioctl.c                                   |  26 +-
 fs/btrfs/super.c                                   |   8 +-
 fs/btrfs/tree-log.c                                |  14 +-
 fs/btrfs/xattr.c                                   |  16 +-
 fs/cachefiles/daemon.c                             |   4 +-
 fs/cachefiles/interface.c                          |   4 +-
 fs/cachefiles/namei.c                              |  16 +-
 fs/cachefiles/rdwr.c                               |   2 +-
 fs/ceph/caps.c                                     |   2 +-
 fs/ceph/debugfs.c                                  |   2 +-
 fs/ceph/dir.c                                      |  62 +--
 fs/ceph/export.c                                   |  28 +-
 fs/ceph/file.c                                     |   4 +-
 fs/ceph/inode.c                                    |  50 +-
 fs/ceph/mds_client.c                               |  24 +-
 fs/ceph/super.c                                    |   4 +-
 fs/ceph/xattr.c                                    |  16 +-
 fs/cifs/cifs_dfs_ref.c                             |   2 +-
 fs/cifs/cifsfs.c                                   |   2 +-
 fs/cifs/cifssmb.c                                  |   4 +-
 fs/cifs/dir.c                                      |   8 +-
 fs/cifs/file.c                                     |  48 +-
 fs/cifs/inode.c                                    |  32 +-
 fs/cifs/link.c                                     |  12 +-
 fs/cifs/misc.c                                     |   2 +-
 fs/cifs/readdir.c                                  |   4 +-
 fs/cifs/smb1ops.c                                  |   2 +-
 fs/cifs/smb2file.c                                 |   4 +-
 fs/cifs/smb2misc.c                                 |   4 +-
 fs/cifs/smb2ops.c                                  |  10 +-
 fs/cifs/xattr.c                                    |  22 +-
 fs/coda/cache.c                                    |   4 +-
 fs/coda/dir.c                                      |  24 +-
 fs/coda/inode.c                                    |   6 +-
 fs/coda/pioctl.c                                   |   2 +-
 fs/coda/upcall.c                                   |   4 +-
 fs/configfs/configfs_internal.h                    |   3 +-
 fs/configfs/dir.c                                  | 140 +++--
 fs/configfs/file.c                                 |  28 +-
 fs/configfs/inode.c                                |  26 +-
 fs/coredump.c                                      |   2 +-
 fs/dcache.c                                        |  37 +-
 fs/debugfs/file.c                                  |   2 +-
 fs/debugfs/inode.c                                 |  64 +--
 fs/devpts/inode.c                                  |  16 +-
 fs/ecryptfs/crypto.c                               |   4 +-
 fs/ecryptfs/dentry.c                               |   6 +-
 fs/ecryptfs/file.c                                 |   4 +-
 fs/ecryptfs/inode.c                                | 168 +++---
 fs/ecryptfs/kthread.c                              |   2 +-
 fs/ecryptfs/main.c                                 |   6 +-
 fs/ecryptfs/mmap.c                                 |   2 +-
 fs/efivarfs/inode.c                                |   4 +-
 fs/efivarfs/super.c                                |   2 +-
 fs/efs/namei.c                                     |   4 +-
 fs/exofs/dir.c                                     |   4 +-
 fs/exofs/inode.c                                   |   2 +-
 fs/exofs/namei.c                                   |  10 +-
 fs/exofs/super.c                                   |   2 +-
 fs/exofs/symlink.c                                 |   2 +-
 fs/exportfs/expfs.c                                |   2 +-
 fs/ext2/dir.c                                      |   2 +-
 fs/ext2/ialloc.c                                   |   2 +-
 fs/ext2/inode.c                                    |   2 +-
 fs/ext2/namei.c                                    |  14 +-
 fs/ext2/symlink.c                                  |   2 +-
 fs/ext2/xattr.c                                    |   4 +-
 fs/ext2/xattr_security.c                           |   4 +-
 fs/ext2/xattr_trusted.c                            |   4 +-
 fs/ext2/xattr_user.c                               |   4 +-
 fs/ext3/ialloc.c                                   |   2 +-
 fs/ext3/inode.c                                    |   2 +-
 fs/ext3/namei.c                                    |  34 +-
 fs/ext3/super.c                                    |   6 +-
 fs/ext3/symlink.c                                  |   2 +-
 fs/ext3/xattr.c                                    |  10 +-
 fs/ext3/xattr_security.c                           |   4 +-
 fs/ext3/xattr_trusted.c                            |   4 +-
 fs/ext3/xattr_user.c                               |   4 +-
 fs/ext4/fsync.c                                    |   2 +-
 fs/ext4/ialloc.c                                   |   2 +-
 fs/ext4/inline.c                                   |   4 +-
 fs/ext4/inode.c                                    |   4 +-
 fs/ext4/migrate.c                                  |   2 +-
 fs/ext4/namei.c                                    |  34 +-
 fs/ext4/super.c                                    |   6 +-
 fs/ext4/symlink.c                                  |   2 +-
 fs/ext4/xattr.c                                    |  10 +-
 fs/ext4/xattr_security.c                           |   4 +-
 fs/ext4/xattr_trusted.c                            |   4 +-
 fs/ext4/xattr_user.c                               |   4 +-
 fs/f2fs/f2fs.h                                     |   2 +-
 fs/f2fs/file.c                                     |   4 +-
 fs/f2fs/namei.c                                    |  18 +-
 fs/f2fs/xattr.c                                    |  10 +-
 fs/fat/file.c                                      |   4 +-
 fs/fat/namei_msdos.c                               |   8 +-
 fs/fat/namei_vfat.c                                |  14 +-
 fs/fat/nfs.c                                       |   4 +-
 fs/freevxfs/vxfs_immed.c                           |   2 +-
 fs/fs-writeback.c                                  |   6 +-
 fs/fuse/control.c                                  |   6 +-
 fs/fuse/dir.c                                      |  62 +--
 fs/fuse/inode.c                                    |   4 +-
 fs/gfs2/dentry.c                                   |  12 +-
 fs/gfs2/dir.c                                      |   2 +-
 fs/gfs2/export.c                                   |   8 +-
 fs/gfs2/inode.c                                    |  34 +-
 fs/gfs2/ops_fstype.c                               |   8 +-
 fs/gfs2/super.c                                    |   2 +-
 fs/gfs2/xattr.c                                    |   6 +-
 fs/hfs/attr.c                                      |   6 +-
 fs/hfs/dir.c                                       |   8 +-
 fs/hfs/inode.c                                     |   2 +-
 fs/hfs/sysdep.c                                    |   2 +-
 fs/hfsplus/dir.c                                   |  14 +-
 fs/hfsplus/inode.c                                 |   2 +-
 fs/hfsplus/ioctl.c                                 |   2 +-
 fs/hfsplus/xattr.c                                 |   4 +-
 fs/hfsplus/xattr.h                                 |   4 +-
 fs/hostfs/hostfs_kern.c                            |   2 +-
 fs/hpfs/inode.c                                    |   2 +-
 fs/hpfs/namei.c                                    |   8 +-
 fs/hppfs/hppfs.c                                   |  24 +-
 fs/hugetlbfs/inode.c                               |   4 +-
 fs/inode.c                                         |   6 +-
 fs/internal.h                                      |   2 +-
 fs/isofs/export.c                                  |   2 +-
 fs/jffs2/dir.c                                     |  54 +-
 fs/jffs2/fs.c                                      |   2 +-
 fs/jffs2/security.c                                |   4 +-
 fs/jffs2/super.c                                   |   6 +-
 fs/jffs2/symlink.c                                 |   2 +-
 fs/jffs2/xattr.c                                   |   2 +-
 fs/jffs2/xattr_trusted.c                           |   4 +-
 fs/jffs2/xattr_user.c                              |   4 +-
 fs/jfs/file.c                                      |   2 +-
 fs/jfs/namei.c                                     |  18 +-
 fs/jfs/symlink.c                                   |   2 +-
 fs/jfs/xattr.c                                     |  12 +-
 fs/kernfs/dir.c                                    |   2 +-
 fs/kernfs/inode.c                                  |   8 +-
 fs/libfs.c                                         |  28 +-
 fs/logfs/dir.c                                     |  14 +-
 fs/logfs/file.c                                    |   2 +-
 fs/minix/dir.c                                     |   4 +-
 fs/minix/file.c                                    |   2 +-
 fs/minix/inode.c                                   |   4 +-
 fs/minix/namei.c                                   |  10 +-
 fs/namei.c                                         |   2 +-
 fs/namespace.c                                     |  10 +-
 fs/ncpfs/dir.c                                     |  48 +-
 fs/ncpfs/inode.c                                   |   6 +-
 fs/ncpfs/ioctl.c                                   |   8 +-
 fs/ncpfs/ncplib_kernel.c                           |   2 +-
 fs/ncpfs/symlink.c                                 |   2 +-
 fs/nfs/dir.c                                       |  56 +-
 fs/nfs/direct.c                                    |   4 +-
 fs/nfs/filelayout/filelayout.c                     |   2 +-
 fs/nfs/flexfilelayout/flexfilelayout.c             |   2 +-
 fs/nfs/getroot.c                                   |   4 +-
 fs/nfs/inode.c                                     |  18 +-
 fs/nfs/namespace.c                                 |  10 +-
 fs/nfs/nfs3acl.c                                   |   2 +-
 fs/nfs/nfs3proc.c                                  |  12 +-
 fs/nfs/nfs4client.c                                |   2 +-
 fs/nfs/nfs4file.c                                  |   4 +-
 fs/nfs/nfs4namespace.c                             |   4 +-
 fs/nfs/nfs4proc.c                                  |  60 +--
 fs/nfs/nfs4state.c                                 |   4 +-
 fs/nfs/nfs4trace.h                                 |   4 +-
 fs/nfs/pagelist.c                                  |   2 +-
 fs/nfs/pnfs.h                                      |   4 +-
 fs/nfs/proc.c                                      |   4 +-
 fs/nfs/read.c                                      |   2 +-
 fs/nfs/super.c                                     |   6 +-
 fs/nfs/symlink.c                                   |   2 +-
 fs/nfs/unlink.c                                    |  20 +-
 fs/nfs/write.c                                     |  10 +-
 fs/nfsd/export.c                                   |   4 +-
 fs/nfsd/nfs2acl.c                                  |   8 +-
 fs/nfsd/nfs3acl.c                                  |   8 +-
 fs/nfsd/nfs3proc.c                                 |   6 +-
 fs/nfsd/nfs3xdr.c                                  |  16 +-
 fs/nfsd/nfs4acl.c                                  |   4 +-
 fs/nfsd/nfs4proc.c                                 |   8 +-
 fs/nfsd/nfs4recover.c                              |  26 +-
 fs/nfsd/nfs4state.c                                |   4 +-
 fs/nfsd/nfs4xdr.c                                  |  10 +-
 fs/nfsd/nfsfh.c                                    |  28 +-
 fs/nfsd/nfsfh.h                                    |   6 +-
 fs/nfsd/nfsproc.c                                  |   4 +-
 fs/nfsd/nfsxdr.c                                   |   2 +-
 fs/nfsd/vfs.c                                      |  70 +--
 fs/nfsd/xdr4.h                                     |   2 +-
 fs/nilfs2/dir.c                                    |   2 +-
 fs/nilfs2/inode.c                                  |   2 +-
 fs/nilfs2/namei.c                                  |  18 +-
 fs/nilfs2/super.c                                  |   6 +-
 fs/notify/fanotify/fanotify.c                      |   6 +-
 fs/nsfs.c                                          |   4 +-
 fs/ntfs/inode.c                                    |   2 +-
 fs/ntfs/namei.c                                    |   4 +-
 fs/ocfs2/dcache.c                                  |  14 +-
 fs/ocfs2/dir.h                                     |   2 +-
 fs/ocfs2/dlmfs/dlmfs.c                             |   4 +-
 fs/ocfs2/export.c                                  |   2 +-
 fs/ocfs2/file.c                                    |   8 +-
 fs/ocfs2/inode.c                                   |   2 +-
 fs/ocfs2/namei.c                                   |  14 +-
 fs/ocfs2/refcounttree.c                            |  10 +-
 fs/ocfs2/xattr.c                                   |  22 +-
 fs/omfs/dir.c                                      |  10 +-
 fs/omfs/file.c                                     |   2 +-
 fs/overlayfs/copy_up.c                             |   5 +-
 fs/overlayfs/dir.c                                 |  34 +-
 fs/overlayfs/inode.c                               |  12 +-
 fs/overlayfs/overlayfs.h                           |  18 +-
 fs/overlayfs/readdir.c                             | 181 +++----
 fs/overlayfs/super.c                               | 564 ++++++++++++++-------
 fs/pipe.c                                          |   2 +-
 fs/posix_acl.c                                     |  18 +-
 fs/proc/base.c                                     |  32 +-
 fs/proc/fd.c                                       |   6 +-
 fs/proc/generic.c                                  |   6 +-
 fs/proc/namespaces.c                               |   4 +-
 fs/proc/proc_net.c                                 |   2 +-
 fs/proc/proc_sysctl.c                              |  12 +-
 fs/proc/root.c                                     |   2 +-
 fs/proc/self.c                                     |   2 +-
 fs/proc/thread_self.c                              |   2 +-
 fs/pstore/inode.c                                  |  10 +-
 fs/qnx6/inode.c                                    |   2 +-
 fs/quota/dquot.c                                   |  10 +-
 fs/ramfs/file-nommu.c                              |   2 +-
 fs/reiserfs/dir.c                                  |   4 +-
 fs/reiserfs/inode.c                                |   2 +-
 fs/reiserfs/namei.c                                |  12 +-
 fs/reiserfs/super.c                                |   4 +-
 fs/reiserfs/xattr.c                                | 130 ++---
 fs/reiserfs/xattr.h                                |   2 +-
 fs/reiserfs/xattr_security.c                       |  10 +-
 fs/reiserfs/xattr_trusted.c                        |  10 +-
 fs/reiserfs/xattr_user.c                           |   4 +-
 fs/squashfs/export.c                               |   2 +-
 fs/squashfs/xattr.c                                |   8 +-
 fs/super.c                                         |  40 +-
 fs/sysv/dir.c                                      |   4 +-
 fs/sysv/file.c                                     |   2 +-
 fs/sysv/itree.c                                    |   2 +-
 fs/sysv/namei.c                                    |  10 +-
 fs/sysv/symlink.c                                  |   2 +-
 fs/ubifs/dir.c                                     |  14 +-
 fs/ubifs/file.c                                    |   4 +-
 fs/ubifs/journal.c                                 |   4 +-
 fs/ubifs/xattr.c                                   |  10 +-
 fs/udf/file.c                                      |   2 +-
 fs/udf/namei.c                                     |  16 +-
 fs/ufs/dir.c                                       |   2 +-
 fs/ufs/namei.c                                     |  10 +-
 fs/ufs/super.c                                     |   4 +-
 fs/ufs/symlink.c                                   |   2 +-
 fs/ufs/truncate.c                                  |   2 +-
 fs/xfs/xfs_export.c                                |   2 +-
 fs/xfs/xfs_filestream.c                            |   2 +-
 fs/xfs/xfs_ioctl.c                                 |  20 +-
 fs/xfs/xfs_ioctl32.c                               |  12 +-
 fs/xfs/xfs_iops.c                                  |  18 +-
 fs/xfs/xfs_super.c                                 |   2 +-
 fs/xfs/xfs_xattr.c                                 |   6 +-
 include/linux/dcache.h                             | 120 ++++-
 include/trace/events/btrfs.h                       |   4 +-
 include/trace/events/ext3.h                        |  16 +-
 include/trace/events/ext4.h                        |  16 +-
 ipc/mqueue.c                                       |  22 +-
 ipc/shm.c                                          |   2 +-
 kernel/audit_watch.c                               |   2 +-
 kernel/relay.c                                     |   4 +-
 kernel/trace/trace.c                               |   8 +-
 kernel/trace/trace_events.c                        |   4 +-
 kernel/trace/trace_uprobe.c                        |   2 +-
 mm/shmem.c                                         |  34 +-
 net/socket.c                                       |   6 +-
 net/sunrpc/rpc_pipe.c                              |  32 +-
 security/apparmor/apparmorfs.c                     |   2 +-
 security/apparmor/include/apparmor.h               |   4 +-
 security/apparmor/lsm.c                            |  20 +-
 security/apparmor/path.c                           |   2 +-
 security/inode.c                                   |  20 +-
 security/selinux/hooks.c                           |   8 +-
 security/selinux/selinuxfs.c                       |   2 +-
 security/smack/smack_lsm.c                         |   4 +-
 security/smack/smackfs.c                           |   2 +-
 security/tomoyo/file.c                             |   4 +-
 340 files changed, 2453 insertions(+), 2299 deletions(-)

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-21  3:34 [git pull] more vfs bits Al Viro
@ 2015-02-21 22:45 ` Linus Torvalds
  2015-02-21 22:48   ` Linus Torvalds
                     ` (3 more replies)
  2015-02-22  0:18 ` David Howells
  1 sibling, 4 replies; 30+ messages in thread
From: Linus Torvalds @ 2015-02-21 22:45 UTC (permalink / raw)
  To: Al Viro; +Cc: Linux Kernel Mailing List, linux-fsdevel

On Fri, Feb 20, 2015 at 7:34 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
>         Assorted stuff from this cycle.  The big ones here are multilayer
> overlayfs from Miklos and beginning of sorting ->d_inode accesses out from
> David.

So I've pulled this, but quite frankly, I think I will unpull it again
unless you actually state *what* the advantages of this pointless
series of endless patches are.

There is absolutely no sane reason to use this crap, as far as I can
tell. The new "fs_inode_once()" thing is just stupid. It's named for
what it does, not *why*, and there is no hint to the filesystem as to
why it should use "fs_inode_once()" vs "fs_inode()".

Now, that was true in the "bad old days" when we just used
ACCESS_ONCE(dentry->d_inode) too, but at least in that old model we
don't have some idiotic wrapper around it.

Dammit, if we add wrapper and "helper" functions, they should *help*,
not confuse. This thing is just badly named, and there is no actual
real explanation for why it exists in the first place, nor for when to
use one or the other. There is just an endless series of patches with
pointless churn.

And no, that "explanation" in commit b717805b3c8b is not an
explanation. Why should filesystems have to know/care. Any use of
"fs_inode()" clearly does *not* specify upper/lower, so what the f*ck
is the advantage of that helper wrt just making the rule be that
"dentry->d_inode" is that unspecified thing.

Explain it, or that crap gets undone.

I'm annoyed, because shit like this that comes in at the end of the
merge window when everybody and their dog sends me random crap on the
Friday afternoon before the merge window closes is just annoying as
hell.

Yes, I work weekends too, but there is really *no* excuse for
last-minute pull requests that don't have good explanations for them.
Explanations for why they are last-minute, and explanations for why
they exist at all and why I should waste my Saturday on pulling them.

Today has been a huge waste of time for me, and reading through this
was just the last drop.

                                 Linus

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-21 22:45 ` Linus Torvalds
@ 2015-02-21 22:48   ` Linus Torvalds
  2015-02-22  0:23   ` David Howells
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 30+ messages in thread
From: Linus Torvalds @ 2015-02-21 22:48 UTC (permalink / raw)
  To: Al Viro; +Cc: Linux Kernel Mailing List, linux-fsdevel

On Sat, Feb 21, 2015 at 2:45 PM, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> Explain it, or that crap gets undone.

Also explain why that crap was done one file at a time?

I'm getting really tired of people trying to inflate their commit
counts with tricks like this. What was the advantage of doing the same
thing over-and-over one file at a time? It makes things more
manageable exactly *why*?

                         Linus "grumpy as hell" Torvalds

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-21  3:34 [git pull] more vfs bits Al Viro
  2015-02-21 22:45 ` Linus Torvalds
@ 2015-02-22  0:18 ` David Howells
  2015-02-22  1:14   ` Linus Torvalds
  1 sibling, 1 reply; 30+ messages in thread
From: David Howells @ 2015-02-22  0:18 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: dhowells, Al Viro, Linux Kernel Mailing List, linux-fsdevel

Linus Torvalds <torvalds@linux-foundation.org> wrote:

> >         Assorted stuff from this cycle.  The big ones here are multilayer
> > overlayfs from Miklos and beginning of sorting ->d_inode accesses out from
> > David.
> 
> So I've pulled this, but quite frankly, I think I will unpull it again
> unless you actually state *what* the advantages of this pointless
> series of endless patches are.

Let me describe the problem I'm trying to solve first.

Code that accessed ->d_inode may need to look at some other dentry/inode then
the dentry it is given when the filesystem it is operating on is a layer in
some sort of union, but it sees through the filter of the top union/overlay
layer.

Take overlayfs as an example.  Regular files get dummy dentries and inodes
created in the top layer, but overlayfs has to pull a trick to go around the
VFS and repoint open files at the lower/source layer or the upper/workspace
layer rather than the overlay layer.  Access attempts outside of open files
(eg. utime) get trapped by the dummy inode and dealt with there.

Now this brings me to a particular problem: file->f_path and file->f_inode
point to either the upper layer vfsmount, dentry and inode or the lower layer
vfsmount, dentry and inode.  This means that anything that needs those
parameters does not get to see the fact that an overlay was involved.  Such
things include security LSMs, /proc, notifications, locks and leases.

So what I want to do is:

 (1) Introduce wrappers around accesses to ->d_inode.  These can be used to
     mark such accesses as being classified into two categories:

     (A) Some accesses should only consider the dentry they're given.
     	 Filesystems would fall into this category when dealing with their own
     	 dentries and inodes.

     (B) Other accesses should fall through from the dentry they're given to
     	 an underlying layer.  A lot of non-filesystem accesses, including
     	 those in the VFS side of pathwalk, fall into this category, as do
     	 accesses to external objects made by filesystems such as overlayfs
     	 and ecryptfs.

     Because there are a lot of ->d_inode calls, my intention is to classify
     them by giving them an appropriate wrapper.  Type (A) get wrapped with
     fs_inode{,_once}() and type (B) get wrapped with dentry_inode{,_once}().

     Wrapping them in this way makes it easier to find the cases that are more
     problematic.  SELinux, for example, might need to look at *both* layers
     when assessing the security label to be levied upon an overlay object.

 (2) Introduce wrappers around accesses to a given dentry where that dentry
     might not be used directly but rather fall through (similar to (1B)
     above).

 (3) Start off with wrappers that simply pass dentry or dentry->d_inode
     straight through.

 (4) Add an extra pointer into struct dentry that can be pointed at a lower
     layer - and will critically *pin* that lower layer.

     This will avoid the need for file->f_path to directly pin the dentry to
     which file->f_inode refers.  This then allows file->f_path to point to
     the top layer whilst file->f_inode points to an underlay file.

 (6) Add a DCACHE_WHITEOUT_TYPE type variant for dentries that will in the
     future be recognised by the VFS as a 'negative' type, but can be used by
     the overlay or unionmount to note a difference to an ordinary negative
     type dentry that can also be a fallthrough (at least in unionmount if
     this ever makes it).

 (7) Where feasible, replace if-statements that check the positivity or
     negativity of dentries by doing if (...->d_inode) with checks on the type
     of the dentry.

     Also, where feasible, replace S_ISxxx checks on inode type with checks of
     the dentry type field.  This cuts down on the number of accesses to the
     inode we need to do - which is good if we have to check indirectly.

     To this end, I split DCACHE_FILE_TYPE to differentiate regular and
     special types.

 (5) Make the fallthrough logic work.  You set DCACHE_FALLTHRU on a dentry and
     this tells d_dentry() and dentry_inode() to bypass the given dentry and
     use dentry->layer.lower and dentry->layer.lower->d_inode instead - but
     does not affect the operation of fs_inode().

     Note that the DCACHE_FALLTHRU flag and dentry->layer do not belong to the
     filesystem that owns the dentry on which they are set, but rather belong
     to the facility (be it overlayfs or unionmount) that is managing the
     union.


So the patch series isn't complete as it stands.  I'm trying to do the
wrapping first to reduce the number of ->d_inode accesses that need special
consideration.

> Now, that was true in the "bad old days" when we just used
> ACCESS_ONCE(dentry->d_inode) too, but at least in that old model we
> don't have some idiotic wrapper around it.

I can't make ACCESS_ONCE(fs_inode(dentry)) work if fs_inode() is an inline
function.  I might be able to make it work if it's a macro.  I also don't want
to call ACCESS_ONCE() inside fs_inode().

> Dammit, if we add wrapper and "helper" functions, they should *help*,
> not confuse. This thing is just badly named,

Suggest a better name that's not too long then please.  fs_inode(d) is about
the same length as d->d_inode which means I can just script it and I don't
have to go in and reformat the code.

I did at one point have something longer for both wrappers - d_fs_own_inode()
and d_inode_or_lower().  I would quite like to have used d_inode(), but it
looks a bit too close to ->d_inode.

> so what the f*ck is the advantage of that helper wrt just making the rule be
> that "dentry->d_inode" is that unspecified thing.

I want checkpatch to ultimately throw up an error if anyone adds a new
->d_inode access.  They can be instructed to use either fs_inode() or
dentry_inode().

Further, leaving dentry->d_inode as is all over the place makes it much harder
to find the stuff that needs to be considered carefully - there are over 2000
instances of ->d_inode in the code and grepping to find them is annoying with
so many false positives available.

However, a lot of the ->d_inode accesses can safely be scripted out of the
way, vastly cutting down the output of grep.

David

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-21 22:45 ` Linus Torvalds
  2015-02-21 22:48   ` Linus Torvalds
@ 2015-02-22  0:23   ` David Howells
  2015-02-22  0:59     ` Al Viro
  2015-02-22  0:51   ` Al Viro
  2015-02-22 12:30   ` David Howells
  3 siblings, 1 reply; 30+ messages in thread
From: David Howells @ 2015-02-22  0:23 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: dhowells, Al Viro, Linux Kernel Mailing List, linux-fsdevel

Linus Torvalds <torvalds@linux-foundation.org> wrote:

> Also explain why that crap was done one file at a time?

Because it wasn't.  Here's the script for your perusal.  Al cherry-picked the
output, so you won't find everything the script produces in Al's pull request.

Breaking it down into one commit per fs makes it easier to review the
individual chunks.

David
---
#!/usr/bin/perl -w
use strict;

open(my $fd, "<$0") || die $0;
my @script = <$fd>;
close($fd);

my @file_system_types;
open(my $g, 'git grep -l "struct file_system_type.*=" |') ||
    die "Can't grep for filesystem type";
@file_system_types = <$g>;
close($g);

my @excludes = (
    "fs/attr.c",
    "fs/dcache.c",
    "fs/exportfs/expfs.c",
    "fs/file_table.c",
    "fs/notify/",
    "fs/locks.c",
    "fs/namei.c",
    "fs/namespace.c",
    "fs/open.c",
    "fs/utimes.c",
    "fs/xattr.c",
    "include/linux/",
    "Documentation/filesystems/vfs.txt",
    );

my @treat_as_fs = (
    "drivers/staging/lustre",
    "fs/kernfs",
    "fs/libfs.c",
    "fs/quota/dquot.c",
    "ipc",
    "kernel/relay.c",
    "kernel/trace",
    );

###############################################################################
#
# Find the filesystems and classify them according to whether they occupy a
# directory or a file in the source.
#
###############################################################################
my %fs_names = ();
my %fs_dirs = ();
my %fs_files = ();

# Miscellaneous convenience sets
my %fs_misc = (
#    "arch" => [],
#    "drivers" => [],
#    "fs" => [],
#    "security" => []
    );

my @fs_single = ();

fs_file: foreach my $file (@file_system_types) {
    chomp $file;
    foreach my $ex (@excludes, @treat_as_fs) {
	next fs_file if (substr($file, 0, length($ex)) eq $ex);
    }

    # Handle whole-directory filesystems
    if ($file =~ m!^fs/([a-z0-9]+)/.*[.]c!) {
	my $dir = substr($file, 0, rindex($file, "/"));
	my $name = $1;
	$fs_names{$name} = $dir;
	$fs_dirs{$dir} = [];
	next;
    }

    #next if ($file =~ m!^drivers/staging/lustre!);

    # Handle single-file filesystems
    $fs_files{$file} = [];
}

foreach my $path (@treat_as_fs) {
    if ($path =~ /[.][ch]/) {
	$fs_files{$path} = [];
    } else {
	my $name = substr($path, rindex($path, "/") + 1);
	$fs_names{$name} = $path;
	$fs_dirs{$path} = [];
    }
}

my @to_fs_inode = sort(keys(%fs_dirs));

###############################################################################
#
# Find all occurrences of files containing "->d_inode" and divide them amongst
# the various filesystems and non-filesystems.
#
###############################################################################
my @occurrences;
open($g, 'git grep -l "[-]>d_inode" |') ||
    die "Can't grep for ->d_inode";
@occurrences = <$g>;
close($g);

my %non_fs = ();

file: foreach my $file (@occurrences) {
    chomp $file;
    foreach my $ex (@excludes) {
	next file if (substr($file, 0, length($ex)) eq $ex);
    }

    foreach my $path (@to_fs_inode) {
	if (index($file, $path) == 0) {
	    #print $file, " found in ", $path, "\n";
	    push @{$fs_dirs{$path}}, $file;
	    next file;
	}
    }

    if (exists($fs_files{$file})) {
	foreach my $path (keys(%fs_misc)) {
	    if (index($file, $path) == 0) {
		push @{$fs_misc{$path}}, $file;
		delete $fs_files{$file};
		next file;
	    }
	}
    }

    if (exists($fs_files{$file})) {
	push @{$fs_files{$file}}, $file;
	next file;
    }

    if ($file =~ m!include/trace/events/([_a-zA-Z0-9]+)[.]h!) {
	my $fs = $1;
	if (exists($fs_names{$fs})) {
	    push @{$fs_dirs{$fs_names{$fs}}}, $file;
	    next;
	}
    }

    #print $file, " not found\n";
    $non_fs{$file} = [ $file ];
}

foreach my $path (sort(keys(%fs_files))) {
    push @fs_single, @{$fs_files{$path}};
}

###############################################################################
#
# Summarise how the filesystem file sets will be split up
#
###############################################################################
my $summarise = 0;
if ($summarise) {
    foreach my $path (sort(keys(%fs_dirs))) {
	print $path, ":\n";
	foreach my $file (@{$fs_dirs{$path}}) {
	    print "\t", $file, "\n";
	}
    }

    foreach my $path (sort(keys(%fs_misc))) {
	print $path, "-single-fs:\n";
	foreach my $file (@{$fs_misc{$path}}) {
	    print "\t", $file, "\n";
	}
    }

    print "single-fs:\n";
    foreach my $path (sort(keys(%fs_files))) {
	foreach my $file (@{$fs_files{$path}}) {
	    print "\t", $file, "\n";
	}
    }

    print "non-filesystem:\n";
    foreach my $path (sort(keys(%non_fs))) {
	foreach my $file (@{$non_fs{$path}}) {
	    print "\t", $file, "\n";
	}
    }

    print "\n";
}

###############################################################################
#
# Group the non-filesystems by directories with two or more files that need
# changing.
#
###############################################################################
my %non_groups = ();
my %non_dirs = ();

foreach my $file (keys(%non_fs)) {
    my $p = index($file, "/");
    my $q = index($file, "/", $p + 1);
    $p = $q if ($q != -1);
    my $dir = substr($file, 0, $p);
    $non_dirs{$dir} = 0 unless exists $non_dirs{$dir};
    $non_dirs{$dir}++;
    $non_groups{$dir} = [] unless exists $non_groups{$dir};
    push @{$non_groups{$dir}}, $file;
}

foreach my $dir (sort(keys(%non_dirs))) {
    #print $dir, " -> ", $non_dirs{$dir}, "\n";
    if ($non_dirs{$dir} == 1) {
	my $p = index($dir, "/");
	if ($p != -1) {
	    my $top = substr($dir, 0, $p);
	    $non_dirs{$top} = 0 unless exists $non_dirs{$top};
	    $non_dirs{$top}++;
	    $non_groups{$top} = [] unless exists $non_groups{$top};
	    push @{$non_groups{$top}}, @{$non_groups{$dir}};
	    delete $non_dirs{$dir};
	}
    }
}

#foreach my $dir (sort(keys(%non_dirs))) {
#    print "Non-filesystem ", $dir, ":\n";
#    foreach my $file (@{$non_groups{$dir}}) {
#	print "\t", $file, "\n";
#    }
#}

###############################################################################
#
# Set up the integration branch
#
###############################################################################
system("git", "checkout", "file-pin") == 0 || die;
die if `stg branch` ne "file-pin\n";
system("git", "reset", "--hard", "file-pin-devel") == 0 || die;

###############################################################################
#
# Fabricate commits for d_inode -> fs_inode() conversion
#
###############################################################################
system("git", "checkout", "file-pin-fs-experimental") == 0 || die;
die if `stg branch` ne "file-pin-fs-experimental\n";
system("git", "reset", "--hard", "file-pin") == 0 || die;

sub convert_to_fs_inode($$)
{
    my ($title, $files) = @_;

    unless (@{$files}) {
	print "Skipping $title with no files\n";
	return;
    }

    print "Process $title\n";

    my $dir = $files->[0];
    $dir =~ s![^/]+$!!;
    $dir =~ s!/$!!;
    $dir =~ s!/!_!g;

    foreach my $file (@{$files}) {
	open(my $fd, "<$file") || die $file;
	my @lines = <$fd>;
	close($fd);

	my @out = map {
	    s!ACCESS_ONCE[(](([_a-zA-Z][_a-zA-Z0-9]*(->|[.]))*[_a-zA-Z][_a-zA-Z0-9]*)->d_inode[)]!fs_inode_once($1)!g;
	    s!(([_a-zA-Z][_a-zA-Z0-9]*(->|[.]))*[_a-zA-Z][_a-zA-Z0-9]*)->d_inode!fs_inode($1)!g;
	} @lines;

	open($fd, ">$file") || die $file;
	print $fd @lines;
	close($fd) || die $file;
    }

    system("git", "add", @{$files}) == 0 || die;
    system("git", "commit", "-m",
	   "VFS: (Scripted) Convert ->d_inode to fs_inode() $title\n" .
	   "\n" .
	   'Signed-off-by: David Howells <dhowells@redhat.com>') == 0 || die;
}

foreach my $fs (sort(keys(%fs_dirs))) {
    convert_to_fs_inode("in $fs/", $fs_dirs{$fs});
}

foreach my $fs (sort(keys(%fs_misc))) {
    convert_to_fs_inode("in $fs/", $fs_misc{$fs});
}

#convert_to_fs_inode("miscellany", \@fs_single);
foreach my $file (sort(@fs_single)) {
    convert_to_fs_inode("in $file", [$file]);
}

# Merge the changes back into the integration branch, noting the script in the
# merge message.
my @msg = (
    "(Scripted) Merge in scripted filesystem ->d_inode to fs_inode() conversions\n",
    "\n",
    "Scripted merge in of scripted filesystem ->d_inode to fs_inode() conversions\n",
    "using the following perl script:\n",
    "\n",
    @script,
    "\n",
    'Signed-off-by: David Howells <dhowells@redhat.com>');

system("git", "checkout", "file-pin") == 0 || die;
die if `stg branch` ne "file-pin\n";
system("git", "merge", "--no-ff", "file-pin-fs-experimental", "-m", join("", @msg));

###############################################################################
#
# Fabricate an stg commit for d_inode -> dentry_inode() conversion
#
###############################################################################
system("git", "checkout", "file-pin-nonfs-experimental") == 0 || die;
die if `stg branch` ne "file-pin-nonfs-experimental\n";
system("git", "reset", "--hard", "file-pin") == 0 || die;

sub convert_to_dentry_inode($$)
{
    my ($title, $files) = @_;

    unless (@{$files}) {
	print "Skipping $title with no files\n";
	return;
    }

    print "Process $title\n";

    my $dir = $files->[0];
    $dir =~ s![^/]+$!!;
    $dir =~ s!/$!!;
    $dir =~ s!/!_!g;

    foreach my $file (@{$files}) {
	open(my $fd, "<$file") || die $file;
	my @lines = <$fd>;
	close($fd);

	my @out = map {
	    s!ACCESS_ONCE[(](([_a-zA-Z][_a-zA-Z0-9]*(->|[.]))*[_a-zA-Z][_a-zA-Z0-9]*)->d_inode[)]!dentry_inode_once($1)!g;
	    s!(([_a-zA-Z][_a-zA-Z0-9]*(->|[.]))*[_a-zA-Z][_a-zA-Z0-9]*)->d_inode!dentry_inode($1)!g;
	} @lines;

	open($fd, ">$file") || die $file;
	print $fd @lines;
	close($fd) || die $file;
    }

    system("git", "add", @{$files}) == 0 || die;
    system("git", "commit", "-m",
	   "VFS: (Scripted) Convert ->d_inode to dentry_inode() $title\n" .
	   "\n" .
	   'Signed-off-by: David Howells <dhowells@redhat.com>') == 0 || die;
}

foreach my $dir (sort(keys(%non_dirs))) {
    convert_to_dentry_inode("in $dir", $non_groups{$dir});
}

# Merge the changes back into the integration branch, noting the script in the
# merge message.
@msg = (
    "(Scripted) Merge in scripted non-filesystem ->d_inode to dentry_inode() conversions\n",
    "\n",
    "Scripted merge in of scripted non-filesystem ->d_inode to dentry_inode() conversions\n",
    "using the following perl script:\n",
    "\n",
    @script,
    "\n",
    'Signed-off-by: David Howells <dhowells@redhat.com>');

system("git", "checkout", "file-pin") == 0 || die;
die if `stg branch` ne "file-pin\n";
system("git", "merge", "--no-ff", "file-pin-nonfs-experimental", "-m", join("", @msg));

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-21 22:45 ` Linus Torvalds
  2015-02-21 22:48   ` Linus Torvalds
  2015-02-22  0:23   ` David Howells
@ 2015-02-22  0:51   ` Al Viro
  2015-02-22  1:34     ` Linus Torvalds
  2015-02-22 12:39     ` David Howells
  2015-02-22 12:30   ` David Howells
  3 siblings, 2 replies; 30+ messages in thread
From: Al Viro @ 2015-02-22  0:51 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Linux Kernel Mailing List, linux-fsdevel

On Sat, Feb 21, 2015 at 02:45:34PM -0800, Linus Torvalds wrote:
> So I've pulled this, but quite frankly, I think I will unpull it again
> unless you actually state *what* the advantages of this pointless
> series of endless patches are.

> And no, that "explanation" in commit b717805b3c8b is not an
> explanation. Why should filesystems have to know/care. Any use of
> "fs_inode()" clearly does *not* specify upper/lower, so what the f*ck
> is the advantage of that helper wrt just making the rule be that
> "dentry->d_inode" is that unspecified thing.
> 
> Explain it, or that crap gets undone.

Use of fs_inode does not specify upper/lower; it's choice of dentry_inode() vs.
fs_inode().  And d_inode() side of that pile is what I didn't cherry-pick
from David's tree - it was too massive already.

FWIW, I probably should've collapsed the per-fs patches together, or
held them back until the next cycle; I understand why David did them
that way (less painful rebasing that stuff), but once they switch from
"try to stay sane while developing" to "into the tree it goes" mode,
they ought to have been collapsed together.  And that's something I should
have done - my fault.

Filesystems (non-layered ones) should *not* care; this fs_inode() thing is
exactly what we do right now and, unlike dentry_inode(), it is intended to
stay that way.  And yes, we could've bloody well have left it as ->d_inode;
it's no more than an annotation.  What it gives is a way to keep track of
the accesses that remain to be annotated.

Looking at that queue, it might make sense to hold back everything in that
series past "fanotify: Fix up scripted S_ISDIR/S_ISREG/S_ISLNK conversions"
for now - keep in in vfs.git for the next cycle.  My reason for pushing those
now had been no better than wanting to be rid of the trivial bits to make
life a bit easier for the next couple of months, avoiding fun on on each
conflict with every actively changing filesystem.  With the bulk of such
places annotated at once, the work would be limited to VFS proper plus
a bit of whack-a-mole in the end of cycle, pretty much consisting of annotating
the new ->d_inode instances in filesystems (all to fs_inode(), of course).
But that should've been spelled out in pull request *and* done in one
commit instead of that long tail.  Again, my apologies.

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  0:23   ` David Howells
@ 2015-02-22  0:59     ` Al Viro
  0 siblings, 0 replies; 30+ messages in thread
From: Al Viro @ 2015-02-22  0:59 UTC (permalink / raw)
  To: David Howells; +Cc: Linus Torvalds, Linux Kernel Mailing List, linux-fsdevel

On Sun, Feb 22, 2015 at 12:23:06AM +0000, David Howells wrote:
> Linus Torvalds <torvalds@linux-foundation.org> wrote:
> 
> > Also explain why that crap was done one file at a time?
> 
> Because it wasn't.  Here's the script for your perusal.  Al cherry-picked the
> output, so you won't find everything the script produces in Al's pull request.
> 
> Breaking it down into one commit per fs makes it easier to review the
> individual chunks.
> 
> David

[snip]

BTW, the original queue was in
git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs file-pin.

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  0:18 ` David Howells
@ 2015-02-22  1:14   ` Linus Torvalds
  2015-02-22  1:32     ` Al Viro
  0 siblings, 1 reply; 30+ messages in thread
From: Linus Torvalds @ 2015-02-22  1:14 UTC (permalink / raw)
  To: David Howells; +Cc: Al Viro, Linux Kernel Mailing List, linux-fsdevel

On Sat, Feb 21, 2015 at 4:18 PM, David Howells <dhowells@redhat.com> wrote:
>
> So what I want to do is:
>
>  (1) Introduce wrappers around accesses to ->d_inode.  These can be used to
>      mark such accesses as being classified into two categories:
>
>      (A) Some accesses should only consider the dentry they're given.
>          Filesystems would fall into this category when dealing with their own
>          dentries and inodes.

.. and this is the one that makes no sense to me.

It's the common case, and I don't see how it *possibly* adds any
value. The "I want the inode of this dentry" is traditionally done as
"dentry->d_inode".

What is the *upside* of the wrapper?

>      (B) Other accesses should fall through from the dentry they're given to
>          an underlying layer.  A lot of non-filesystem accesses, including
>          those in the VFS side of pathwalk, fall into this category, as do
>          accesses to external objects made by filesystems such as overlayfs
>          and ecryptfs.

Again, if they actually want something *else* than the "native inode",
then at that point a wrapper makes sense.

If you actually want to document that "this use wants the underlying
inode", then go wild. But that is *different* from all the common uses
inside random filesystems that just want "what's the inode of this
dentry".

IOW, my argument is that I cannot see *any* possible reason to wrap
the normal "give me the inode associated with this dentry".

I *can* see a reason to wrap - and document - the cases that are *not*
that kind of simple thing. I *can* see the reason for saying "give me
the inode of the lower layer", or "give me the inode, or NULL if it's
a whiteout entry".

But it's just that empty "fs_inode()" wrapper itself that I just don't
see the point of.

Every single low-level filesystem that does all the actual core
lookup/mkdir/create/whatever operations care about the native inode.
You seem to even kind of acknowledge that in the naming: "fs_inode()".
And my argument is that there is never any possible reason why that
would ever be anything but "dentry->d_inode".

So the wrapper doesn't actually help anything, and it *does* obfuscate
things. It makes people go "whats' the difference between "fs_inode()"
and "fs_inode_once()". It quite possible makes people think it's an
expensive operation. Who knows. It seems pointless.

>  (6) Add a DCACHE_WHITEOUT_TYPE type variant for dentries that will in the
>      future be recognised by the VFS as a 'negative' type, but can be used by
>      the overlay or unionmount to note a difference to an ordinary negative
>      type dentry that can also be a fallthrough (at least in unionmount if
>      this ever makes it).


Right. And a helper/wrapper makes sense for those cases, and actually
clarifies that "this particular code knows and cares about whiteout
entries".

I'm not arguing against those kinds of wrappers that actually
_clarify_ things. I'm arguing against random wrappers that don't, and
that really fundamentally seem like they cannot possibly ever have any
other valid value.

A low-level filesystem may have a real inode associated with a
whiteout dentry, it could be a device inode with a zero major number
or some other special inode (or it might not be an inode at alln - it
could easily also be just a directory entry type). Such a filesystem
would clearly care about the inode. and would actually really care
about "dentry->d_inode".

And I actually think that having "dentry->d_inode" is *clearer* than
"fs_ionode(dentry)". It's clear that that is a naked native access.
It's not some hidden abstracted case. That's *the* inode associated
with the dentry.

>  (7) Where feasible, replace if-statements that check the positivity or
>      negativity of dentries by doing if (...->d_inode) with checks on the type
>      of the dentry.

.. and this is again the kind of wrapper I think is *good*. It's
abstracting some real issue.

I don't object at all to abstracting out "ok, a dentry is negative if
it has a NULL inode, or if it is marked as a whiteout entry". I think
that writing

        if (d_negative(dentry)) ...

is more readable than

        if (!dentry->d_inode ||  (dentry->d_flags & DCACHE_WHITEOUT)) ..

or variations of that (I guess it's "IS_WHITEOUT(dentry->d_inode)" right now).

So I'm not against helpers that do something meaningful.

And there are downsides to arbitrary random wrappers/helpers. Churn.
Harder to see what the code actually *does*. Bad naming (dentry
operations are generally called "d_xyz()" or "dentry_xyz()").  Does it
do soemthign else? Are there rules for calling this? All the mental
rules you have to have, and that *change* just because you change the
syntax.

>> Now, that was true in the "bad old days" when we just used
>> ACCESS_ONCE(dentry->d_inode) too, but at least in that old model we
>> don't have some idiotic wrapper around it.
>
> I can't make ACCESS_ONCE(fs_inode(dentry)) work if fs_inode() is an inline
> function.  I might be able to make it work if it's a macro.  I also don't want
> to call ACCESS_ONCE() inside fs_inode().

Oh, I see *why* you did it, given that you wanted a wrapper.

But I also see this very much as an example of "the wrapper is
actually causing  more problems than it's solving". The fact that the
first wrapper exists now means that you have to use *another* wrapper.

And dammit, it's not *helping*.

Now, if it was something like "ok, the revalidate() call is very very
special for a low-level filesystem, in that the filesystem cannot
trust the inode pointer, so we have a special
"d_revalidate_inode(dentry) wrapper that does ACCESS_ONCE()", then
such a wrapper would actually be *documentation*, and would kind of
show something real ("revalidate is special").

See what I'm trying to say? At that point - even if the wrapper
doesn't *do* anything - it at least documents some rule, and migth be
worth it for that reason.

But what does "fs_inode_once()" document? Nothing. It's just an
artifact of you having introduced a wrapper and done a
search-and-replace. So now you have the extra abstraction of a
wrapper, with all the disadvantages of abstractions, and none of the
advantages that abstraction is supposed to actually bring us.

> Suggest a better name that's not too long then please.  fs_inode(d) is about
> the same length as d->d_inode which means I can just script it and I don't
> have to go in and reformat the code.

So I didn't check, but I *think* the only valid use for the
ACCESS_ONCE() on ->d_inode is for revalidate, which is kind of special
in that we call it without locks held. So *if* that is true, then
maybe "d_revalidate_inode()" would be a reasonable name. But again, I
didn't check that semantic rule, so maybe it doesn't work.

And yes, I'm annoyed, because I really hate the timing of this pull
request. So it's not just about the wrapper, it's about when/how this
all reached me.

                   Linus

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  1:14   ` Linus Torvalds
@ 2015-02-22  1:32     ` Al Viro
  0 siblings, 0 replies; 30+ messages in thread
From: Al Viro @ 2015-02-22  1:32 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: David Howells, Linux Kernel Mailing List, linux-fsdevel

On Sat, Feb 21, 2015 at 05:14:37PM -0800, Linus Torvalds wrote:

> .. and this is the one that makes no sense to me.
> 
> It's the common case, and I don't see how it *possibly* adds any
> value. The "I want the inode of this dentry" is traditionally done as
> "dentry->d_inode".
> 
> What is the *upside* of the wrapper?

AFAICS, having yet-to-be-annotated cases stick out...

BTW, the goal this series is aiming at probably ought to be spelled out
more clearly: there's a bunch of stacking-related stuff (overlayfs and
ecryptfs in the tree, at least unionmount and aufs outside) that could
benefit from having the notion "this dentry covers that stack of
dentries from underlying fs layers" supported sanely by VFS, rather
than having it open-coded in one way or another.  And every place like
that ends up in incestous relationship with VFS; it was annoying while
it had been just ecryptfs, but it's getting worse now.  Moreover, the
details of behaviour overlayfs ends up having to rely upon are both
potentially brittle *and* leaving quite a few things not working properly
(starting with /proc/*/fd/* readlink, etc.)  The goal behind
all that massage is to have that notion (stacking) understood by VFS.

And no, it's not related to the question of annotating ->d_inode accesses -
just something that wasn't quite obvious from David's description.
IMO it's worth spelling out somewhere in this thread...

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  0:51   ` Al Viro
@ 2015-02-22  1:34     ` Linus Torvalds
  2015-02-22  2:02       ` Al Viro
  2015-02-22 12:39     ` David Howells
  1 sibling, 1 reply; 30+ messages in thread
From: Linus Torvalds @ 2015-02-22  1:34 UTC (permalink / raw)
  To: Al Viro; +Cc: Linux Kernel Mailing List, linux-fsdevel

On Sat, Feb 21, 2015 at 4:51 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
>
> Looking at that queue, it might make sense to hold back everything in that
> series past "fanotify: Fix up scripted S_ISDIR/S_ISREG/S_ISLNK conversions"
> for now

Hmm. Even I'd pull just that, quite frankly, I just think it's
*confusing* to have those badly named "helpers", that were introduced
earlier in that series.

These guys are currently all teh same thing, but even if they weren't,
the naming is not helpful, and not sane:
 - fs_inode
 - fs_inode_once
 - dentry_inode
 - dentry_inode_once

Let's walk through them:

 - dentry_inode*() is supposed to be "the inode that would be used if
the dentry was opened"

   What part of "dentry_inode()" implies "if the dentry was opened" to
you? Nothing. The name is fundamentally bad.

  And what *possible* situation could make that "_once()" version ever
be valid? None. It's bogus. It's crap. It's insane. There is no way
that it is *ever* a valid question to even ask. If the dentry is so
unstable that you can't safely look at the inode, you had damn well
better never ask "ok, what would the inode be if I opened this random
pointer"?

   So one of them is badly named, and the other one is fundamentally
not a valid operation at all, as far as I can tell.

 - fs_inode*() is supposed to be "this is the inode that the native
filesystem uses".

   So again, I think the naming is horrible, since it doesn't really
follow the normal dentry helper routine names. But I'm sure we have
other cases where we screwed that up, so whatever..

   The "_once()" naming is doubly bad, as explained elsewhere. What
possible situation merits using that helper? If it's just
revalidate(), then make it about that.

   But more importantly, this is the one where I don't see how it
could ever possibly be anything but "dentry->d_inode". I'd much rather
just leave that.

So of the four new helpers, I really don't see any of them as "good".
I think "dentry_inode()" could remain, but even there I think the name
should specify *what* it is ("d_opened_inode()"? I don't like that
name either, but at least it would try to explain what the point is,
rather than having to look up a comment above the function definition
to figure out what the point is)

The strongest argument I've seen for them existing at all was that
"markers for what has been looked at". But that's something that
belongs in a development tree, not as a series to confuse others with.

                        Linus

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  1:34     ` Linus Torvalds
@ 2015-02-22  2:02       ` Al Viro
  2015-02-22  2:11         ` Al Viro
                           ` (2 more replies)
  0 siblings, 3 replies; 30+ messages in thread
From: Al Viro @ 2015-02-22  2:02 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Linux Kernel Mailing List, linux-fsdevel

On Sat, Feb 21, 2015 at 05:34:23PM -0800, Linus Torvalds wrote:
> On Sat, Feb 21, 2015 at 4:51 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> >
> > Looking at that queue, it might make sense to hold back everything in that
> > series past "fanotify: Fix up scripted S_ISDIR/S_ISREG/S_ISLNK conversions"
> > for now
> 
> Hmm. Even I'd pull just that, quite frankly, I just think it's
> *confusing* to have those badly named "helpers", that were introduced
> earlier in that series.
> 
> These guys are currently all teh same thing, but even if they weren't,
> the naming is not helpful, and not sane:
>  - fs_inode
>  - fs_inode_once
>  - dentry_inode
>  - dentry_inode_once
> 
> Let's walk through them:
> 
>  - dentry_inode*() is supposed to be "the inode that would be used if
> the dentry was opened"
> 
>    What part of "dentry_inode()" implies "if the dentry was opened" to
> you? Nothing. The name is fundamentally bad.
> 
>   And what *possible* situation could make that "_once()" version ever
> be valid? None. It's bogus. It's crap. It's insane. There is no way
> that it is *ever* a valid question to even ask. If the dentry is so
> unstable that you can't safely look at the inode, you had damn well
> better never ask "ok, what would the inode be if I opened this random
> pointer"?
> 
>    So one of them is badly named, and the other one is fundamentally
> not a valid operation at all, as far as I can tell.
> 
>  - fs_inode*() is supposed to be "this is the inode that the native
> filesystem uses".
> 
>    So again, I think the naming is horrible, since it doesn't really
> follow the normal dentry helper routine names. But I'm sure we have
> other cases where we screwed that up, so whatever..
> 
>    The "_once()" naming is doubly bad, as explained elsewhere. What
> possible situation merits using that helper? If it's just
> revalidate(), then make it about that.
> 
>    But more importantly, this is the one where I don't see how it
> could ever possibly be anything but "dentry->d_inode". I'd much rather
> just leave that.
> 
> So of the four new helpers, I really don't see any of them as "good".
> I think "dentry_inode()" could remain, but even there I think the name
> should specify *what* it is ("d_opened_inode()"? I don't like that
> name either, but at least it would try to explain what the point is,
> rather than having to look up a comment above the function definition
> to figure out what the point is)
> 
> The strongest argument I've seen for them existing at all was that
> "markers for what has been looked at". But that's something that
> belongs in a development tree, not as a series to confuse others with.

Hmm...  ..._once() variants are trivially dropped, IMO.  dentry_inode_once()
is so bloody special that it *SHOULD* stick out; we don't have any places
like that, anyway.

I'm somewhat tempted to do this:
fs_inode -> d_inode
fs_inode_once ->d_inode_rcu (it's not quite ->d_revalidate()-only, there's
a bit in autofs ->d_manage() as well)
dentry_inode -> something. d_opened_inode() might do, but I'm not sure -
still sounds a bit wrong to me.  What it's about is "the actual fs object
behind this name, maybe from upper fs, maybe showing through from underlying
layer".  It's not always opened; it's what we'd get if we opened it (and
hadn't triggered any copyups, that is).  E.g. sys_getxattr() would want to
use that, even if nobody has opened that sucker yet, etc.
dentry_inode_once -> RIP

It's still greppable ([-]>d_inode\> will do it) and IMO it's better than
fs_inode().  And yes, the churn issue remains, but IMO having a pair of
inlined helpers (d_inode(dentry) and d_inode_rcu(dentry)) in dcache.h is
not too horrible per se.

Comments?

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  2:02       ` Al Viro
@ 2015-02-22  2:11         ` Al Viro
  2015-02-22  2:19         ` Linus Torvalds
  2015-02-22 12:44         ` [git pull] more vfs bits David Howells
  2 siblings, 0 replies; 30+ messages in thread
From: Al Viro @ 2015-02-22  2:11 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Linux Kernel Mailing List, linux-fsdevel

On Sun, Feb 22, 2015 at 02:02:07AM +0000, Al Viro wrote:
> Hmm...  ..._once() variants are trivially dropped, IMO.  dentry_inode_once()
> is so bloody special that it *SHOULD* stick out; we don't have any places
> like that, anyway.
> 
> I'm somewhat tempted to do this:
> fs_inode -> d_inode
> fs_inode_once ->d_inode_rcu (it's not quite ->d_revalidate()-only, there's
> a bit in autofs ->d_manage() as well)
> dentry_inode -> something. d_opened_inode() might do, but I'm not sure -
> still sounds a bit wrong to me.  What it's about is "the actual fs object
> behind this name, maybe from upper fs, maybe showing through from underlying
> layer".  It's not always opened; it's what we'd get if we opened it (and
> hadn't triggered any copyups, that is).  E.g. sys_getxattr() would want to
> use that, even if nobody has opened that sucker yet, etc.

*snort*

d_inode/d_inode_rcu/[d_]inode_here(), perhaps? ;-)

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  2:02       ` Al Viro
  2015-02-22  2:11         ` Al Viro
@ 2015-02-22  2:19         ` Linus Torvalds
  2015-02-22  2:51           ` Al Viro
  2015-02-22 12:44         ` [git pull] more vfs bits David Howells
  2 siblings, 1 reply; 30+ messages in thread
From: Linus Torvalds @ 2015-02-22  2:19 UTC (permalink / raw)
  To: Al Viro; +Cc: Linux Kernel Mailing List, linux-fsdevel

On Sat, Feb 21, 2015 at 6:02 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
>
> I'm somewhat tempted to do this:
> fs_inode -> d_inode
> fs_inode_once ->d_inode_rcu (it's not quite ->d_revalidate()-only, there's
> a bit in autofs ->d_manage() as well)

Ok, those at least match our existing naming logic (ie "d_inode()"
would match what we did to "d_count()").

I'm not sure about d_inode_rcu(), for the simple reason that even when
we're doing RCU walking, most of the time we have *not* used the
ACCESS_ONCE() model, we instead end up just using the regular d_inode
and then check the sequence count.

I think.

So the ACCESS_ONCE() thing is more special than just "done under RCU".
It's more like "really special case done without any of the normal
locking _or_ any of the normal RCU checks".

That said, the overhead of using ACCESS_ONCE() is basically nil, so
it's not like we couldn't just start doing more of them, and make it
be more of a "any time we're under RCU" kind of thing.

> dentry_inode -> something. d_opened_inode() might do, but I'm not sure -
> still sounds a bit wrong to me.  What it's about is "the actual fs object
> behind this name, maybe from upper fs, maybe showing through from underlying
> layer"

Yeah, I think "d_backing_store_inode()" would probably be more along
the lines, but that's a mouthful. Maybe shortened to
"d_backing_inode()"?

                        Linus

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  2:19         ` Linus Torvalds
@ 2015-02-22  2:51           ` Al Viro
  2015-02-22  3:16             ` Linus Torvalds
  0 siblings, 1 reply; 30+ messages in thread
From: Al Viro @ 2015-02-22  2:51 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Linux Kernel Mailing List, linux-fsdevel

On Sat, Feb 21, 2015 at 06:19:45PM -0800, Linus Torvalds wrote:

> > dentry_inode -> something. d_opened_inode() might do, but I'm not sure -
> > still sounds a bit wrong to me.  What it's about is "the actual fs object
> > behind this name, maybe from upper fs, maybe showing through from underlying
> > layer"
> 
> Yeah, I think "d_backing_store_inode()" would probably be more along
> the lines, but that's a mouthful. Maybe shortened to
> "d_backing_inode()"?

Umm...  Works for me.  Let's do it this way, then:
	* rename those guys through the whole series
	* leave the "annotate the filesystems" bits to sit in a vfs.git
branch
	* slap trylock_super() + bugfixes I'd been doing today
(procfs and debugfs symlink removals racing with follow_link, oopsable;
double-copy in autofs dev_ioctl.c, with length not rechecked after
copying, theoretically oopsable + reasonably likely data leak) on top of queue
	* feed it through local tests and send an updated pull request later
tonight.

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  2:51           ` Al Viro
@ 2015-02-22  3:16             ` Linus Torvalds
  2015-02-22  8:51               ` Al Viro
  2015-02-22 12:54               ` David Howells
  0 siblings, 2 replies; 30+ messages in thread
From: Linus Torvalds @ 2015-02-22  3:16 UTC (permalink / raw)
  To: Al Viro; +Cc: Linux Kernel Mailing List, linux-fsdevel

On Sat, Feb 21, 2015 at 6:51 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
>
> Umm...  Works for me.  Let's do it this way, then:
>         * rename those guys through the whole series
>         * leave the "annotate the filesystems" bits to sit in a vfs.git
> branch
>         * slap trylock_super() + bugfixes I'd been doing today
> (procfs and debugfs symlink removals racing with follow_link, oopsable;
> double-copy in autofs dev_ioctl.c, with length not rechecked after
> copying, theoretically oopsable + reasonably likely data leak) on top of queue
>         * feed it through local tests and send an updated pull request later
> tonight.

Ok, I guess I can live with that.

                       Linus

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  3:16             ` Linus Torvalds
@ 2015-02-22  8:51               ` Al Viro
  2015-02-22  9:32                 ` Sedat Dilek
  2015-02-22 12:54               ` David Howells
  1 sibling, 1 reply; 30+ messages in thread
From: Al Viro @ 2015-02-22  8:51 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Linux Kernel Mailing List, linux-fsdevel

On Sat, Feb 21, 2015 at 07:16:16PM -0800, Linus Torvalds wrote:
> On Sat, Feb 21, 2015 at 6:51 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> >
> > Umm...  Works for me.  Let's do it this way, then:
> >         * rename those guys through the whole series
> >         * leave the "annotate the filesystems" bits to sit in a vfs.git
> > branch
> >         * slap trylock_super() + bugfixes I'd been doing today
> > (procfs and debugfs symlink removals racing with follow_link, oopsable;
> > double-copy in autofs dev_ioctl.c, with length not rechecked after
> > copying, theoretically oopsable + reasonably likely data leak) on top of queue
> >         * feed it through local tests and send an updated pull request later
> > tonight.
> 
> Ok, I guess I can live with that.

Looks like it survived all the local beating so far...

Stuff in there: assorted fixes, multilayer overlayfs from Miklos, beginning
of David's series (long-term goal being to have VFS understand stacking
relationships, rather than kludging that up in a bunch of places; for now
it's mostly infrastructure pieces along with some optimizations that could
be standalone).  Pushed, please pull from the usual place -
git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git for-linus

Shortlog:
Al Viro (10):
      switch ll_lookup_finish_locks() and ll_revalidate_it_finish() to inode
      configfs: configfs_create() init callback is never NULL and it never fails
      configfs: fold create_dir() into its only caller
      configfs_add_file: fold into its sole caller
      don't bother with most of the bad_file_ops methods
      hypfs: switch to read_iter/write_iter
      Documentation/filesystems/Locking: ->get_sb() is long gone
      debugfs: leave freeing a symlink body until inode eviction
      procfs: fix race between symlink removals and traversals
      autofs4 copy_dev_ioctl(): keep the value of ->size we'd used for allocation

Bastien Nocera (1):
      coredump: Fix typo in comment

David Howells (14):
      configfs: Fix potential NULL d_inode dereference
      Infiniband: Fix potential NULL d_inode dereference
      VFS: Introduce inode-getting helpers for layered/unioned fs environments
      VFS: Add a whiteout dentry type
      VFS: Add a fallthrough flag for marking virtual dentries
      VFS: Split DCACHE_FILE_TYPE into regular and special types
      Apparmor: mediated_filesystem() should use dentry->d_sb not inode->i_sb
      Apparmor: Use d_is_positive/negative() rather than testing dentry->d_inode
      TOMOYO: Use d_is_dir() rather than d_inode and S_ISDIR()
      Smack: Use d_is_positive() rather than testing dentry->d_inode
      SELinux: Use d_is_positive() rather than testing dentry->d_inode
      VFS: (Scripted) Convert S_ISLNK/DIR/REG(dentry->d_inode) to d_is_*(dentry)
      Cachefiles: Fix up scripted S_ISDIR/S_ISREG/S_ISLNK conversions
      fanotify: Fix up scripted S_ISDIR/S_ISREG/S_ISLNK conversions

Kinglong Mee (1):
      fs/aio.c: Remove duplicate function name in pr_debug messages

Konstantin Khlebnikov (1):
      trylock_super(): replacement for grab_super_passive()

Miklos Szeredi (16):
      ovl: check whiteout while reading directory
      ovl: make path-type a bitmap
      ovl: dont replace opaque dir
      ovl: add mutli-layer infrastructure
      ovl: helper to iterate layers
      ovl: multi-layer readdir
      ovl: multi-layer lookup
      ovl: check whiteout on lowest layer as well
      ovl: lookup ENAMETOOLONG on lower means ENOENT
      ovl: allow statfs if no upper layer
      ovl: mount: change order of initialization
      ovl: improve mount helpers
      ovl: make upperdir optional
      ovl: support multiple lower layers
      ovl: add testsuite to docs
      ovl: document lower layer ordering

Omar Sandoval (1):
      posix_acl: fix reference leaks in posix_acl_create

Rasmus Villemoes (1):
      autofs4: Wrong format for printing dentry

Seunghun Lee (1):
      ovl: Prevent rw remount when it should be ro mount

hujianyang (5):
      ovl: Cleanup redundant blank lines
      ovl: Use macros to present ovl_xattr
      ovl: Fix kernel panic while mounting overlayfs
      ovl: Fix opaque regression in ovl_lookup
      ovl: discard independent cursor in readdir()

Diffstat:
 Documentation/filesystems/Locking                  |   2 -
 Documentation/filesystems/overlayfs.txt            |  28 +
 arch/s390/hypfs/inode.c                            |  53 +-
 drivers/infiniband/hw/ipath/ipath_fs.c             |   2 +-
 drivers/infiniband/hw/qib/qib_fs.c                 |   2 +-
 drivers/staging/lustre/lustre/llite/dcache.c       |  12 +-
 drivers/staging/lustre/lustre/llite/file.c         |   8 +-
 .../staging/lustre/lustre/llite/llite_internal.h   |   4 +-
 drivers/staging/lustre/lustre/llite/namei.c        |  12 +-
 fs/9p/vfs_inode.c                                  |   2 +-
 fs/aio.c                                           |   6 +-
 fs/autofs4/dev-ioctl.c                             |   8 +-
 fs/autofs4/expire.c                                |   2 +-
 fs/autofs4/root.c                                  |   6 +-
 fs/bad_inode.c                                     | 147 ------
 fs/btrfs/ioctl.c                                   |   4 +-
 fs/cachefiles/daemon.c                             |   4 +-
 fs/cachefiles/interface.c                          |   4 +-
 fs/cachefiles/namei.c                              |  16 +-
 fs/cachefiles/rdwr.c                               |   2 +-
 fs/ceph/dir.c                                      |   2 +-
 fs/ceph/file.c                                     |   2 +-
 fs/coda/dir.c                                      |   2 +-
 fs/configfs/configfs_internal.h                    |   3 +-
 fs/configfs/dir.c                                  |  72 ++-
 fs/configfs/file.c                                 |  28 +-
 fs/configfs/inode.c                                |  12 +-
 fs/coredump.c                                      |   2 +-
 fs/dcache.c                                        |  37 +-
 fs/debugfs/inode.c                                 |  36 +-
 fs/ecryptfs/file.c                                 |   2 +-
 fs/ecryptfs/inode.c                                |   4 +-
 fs/exportfs/expfs.c                                |   2 +-
 fs/fs-writeback.c                                  |   6 +-
 fs/fuse/dir.c                                      |   2 +-
 fs/gfs2/dir.c                                      |   2 +-
 fs/hfsplus/dir.c                                   |   2 +-
 fs/hppfs/hppfs.c                                   |   4 +-
 fs/internal.h                                      |   2 +-
 fs/jffs2/dir.c                                     |  14 +-
 fs/jffs2/super.c                                   |   2 +-
 fs/libfs.c                                         |   2 +-
 fs/namei.c                                         |   2 +-
 fs/namespace.c                                     |  10 +-
 fs/nfsd/nfs4recover.c                              |   4 +-
 fs/nfsd/nfsfh.c                                    |   8 +-
 fs/nfsd/vfs.c                                      |   8 +-
 fs/notify/fanotify/fanotify.c                      |   6 +-
 fs/overlayfs/copy_up.c                             |   5 +-
 fs/overlayfs/dir.c                                 |  34 +-
 fs/overlayfs/inode.c                               |  12 +-
 fs/overlayfs/overlayfs.h                           |  18 +-
 fs/overlayfs/readdir.c                             | 181 +++----
 fs/overlayfs/super.c                               | 564 ++++++++++++++-------
 fs/posix_acl.c                                     |  18 +-
 fs/proc/generic.c                                  |  12 -
 fs/proc/inode.c                                    |  21 +
 fs/proc/internal.h                                 |   1 +
 fs/reiserfs/xattr.c                                |   4 +-
 fs/super.c                                         |  40 +-
 fs/xfs/xfs_ioctl.c                                 |   2 +-
 include/linux/dcache.h                             | 120 ++++-
 mm/shmem.c                                         |   4 +-
 security/apparmor/include/apparmor.h               |   4 +-
 security/apparmor/lsm.c                            |  20 +-
 security/apparmor/path.c                           |   2 +-
 security/inode.c                                   |   2 +-
 security/selinux/hooks.c                           |   8 +-
 security/smack/smack_lsm.c                         |   4 +-
 security/tomoyo/file.c                             |   4 +-
 70 files changed, 924 insertions(+), 758 deletions(-)

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  8:51               ` Al Viro
@ 2015-02-22  9:32                 ` Sedat Dilek
  2015-02-22  9:37                   ` Al Viro
  0 siblings, 1 reply; 30+ messages in thread
From: Sedat Dilek @ 2015-02-22  9:32 UTC (permalink / raw)
  To: Al Viro; +Cc: Linus Torvalds, Linux Kernel Mailing List, linux-fsdevel

On Sun, Feb 22, 2015 at 9:51 AM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> On Sat, Feb 21, 2015 at 07:16:16PM -0800, Linus Torvalds wrote:
>> On Sat, Feb 21, 2015 at 6:51 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
>> >
>> > Umm...  Works for me.  Let's do it this way, then:
>> >         * rename those guys through the whole series
>> >         * leave the "annotate the filesystems" bits to sit in a vfs.git
>> > branch
>> >         * slap trylock_super() + bugfixes I'd been doing today
>> > (procfs and debugfs symlink removals racing with follow_link, oopsable;
>> > double-copy in autofs dev_ioctl.c, with length not rechecked after
>> > copying, theoretically oopsable + reasonably likely data leak) on top of queue
>> >         * feed it through local tests and send an updated pull request later
>> > tonight.
>>
>> Ok, I guess I can live with that.
>
> Looks like it survived all the local beating so far...
>

How do you test?

I would like to contribute by testing...
By running LTP-lite testsuite and fio v2.2.5.
Maybe, I can also test with unionmount-testsuite the overlayfs part.
Sounds that good to you?

- Sedat -

> Stuff in there: assorted fixes, multilayer overlayfs from Miklos, beginning
> of David's series (long-term goal being to have VFS understand stacking
> relationships, rather than kludging that up in a bunch of places; for now
> it's mostly infrastructure pieces along with some optimizations that could
> be standalone).  Pushed, please pull from the usual place -
> git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git for-linus
>
> Shortlog:
> Al Viro (10):
>       switch ll_lookup_finish_locks() and ll_revalidate_it_finish() to inode
>       configfs: configfs_create() init callback is never NULL and it never fails
>       configfs: fold create_dir() into its only caller
>       configfs_add_file: fold into its sole caller
>       don't bother with most of the bad_file_ops methods
>       hypfs: switch to read_iter/write_iter
>       Documentation/filesystems/Locking: ->get_sb() is long gone
>       debugfs: leave freeing a symlink body until inode eviction
>       procfs: fix race between symlink removals and traversals
>       autofs4 copy_dev_ioctl(): keep the value of ->size we'd used for allocation
>
> Bastien Nocera (1):
>       coredump: Fix typo in comment
>
> David Howells (14):
>       configfs: Fix potential NULL d_inode dereference
>       Infiniband: Fix potential NULL d_inode dereference
>       VFS: Introduce inode-getting helpers for layered/unioned fs environments
>       VFS: Add a whiteout dentry type
>       VFS: Add a fallthrough flag for marking virtual dentries
>       VFS: Split DCACHE_FILE_TYPE into regular and special types
>       Apparmor: mediated_filesystem() should use dentry->d_sb not inode->i_sb
>       Apparmor: Use d_is_positive/negative() rather than testing dentry->d_inode
>       TOMOYO: Use d_is_dir() rather than d_inode and S_ISDIR()
>       Smack: Use d_is_positive() rather than testing dentry->d_inode
>       SELinux: Use d_is_positive() rather than testing dentry->d_inode
>       VFS: (Scripted) Convert S_ISLNK/DIR/REG(dentry->d_inode) to d_is_*(dentry)
>       Cachefiles: Fix up scripted S_ISDIR/S_ISREG/S_ISLNK conversions
>       fanotify: Fix up scripted S_ISDIR/S_ISREG/S_ISLNK conversions
>
> Kinglong Mee (1):
>       fs/aio.c: Remove duplicate function name in pr_debug messages
>
> Konstantin Khlebnikov (1):
>       trylock_super(): replacement for grab_super_passive()
>
> Miklos Szeredi (16):
>       ovl: check whiteout while reading directory
>       ovl: make path-type a bitmap
>       ovl: dont replace opaque dir
>       ovl: add mutli-layer infrastructure
>       ovl: helper to iterate layers
>       ovl: multi-layer readdir
>       ovl: multi-layer lookup
>       ovl: check whiteout on lowest layer as well
>       ovl: lookup ENAMETOOLONG on lower means ENOENT
>       ovl: allow statfs if no upper layer
>       ovl: mount: change order of initialization
>       ovl: improve mount helpers
>       ovl: make upperdir optional
>       ovl: support multiple lower layers
>       ovl: add testsuite to docs
>       ovl: document lower layer ordering
>
> Omar Sandoval (1):
>       posix_acl: fix reference leaks in posix_acl_create
>
> Rasmus Villemoes (1):
>       autofs4: Wrong format for printing dentry
>
> Seunghun Lee (1):
>       ovl: Prevent rw remount when it should be ro mount
>
> hujianyang (5):
>       ovl: Cleanup redundant blank lines
>       ovl: Use macros to present ovl_xattr
>       ovl: Fix kernel panic while mounting overlayfs
>       ovl: Fix opaque regression in ovl_lookup
>       ovl: discard independent cursor in readdir()
>
> Diffstat:
>  Documentation/filesystems/Locking                  |   2 -
>  Documentation/filesystems/overlayfs.txt            |  28 +
>  arch/s390/hypfs/inode.c                            |  53 +-
>  drivers/infiniband/hw/ipath/ipath_fs.c             |   2 +-
>  drivers/infiniband/hw/qib/qib_fs.c                 |   2 +-
>  drivers/staging/lustre/lustre/llite/dcache.c       |  12 +-
>  drivers/staging/lustre/lustre/llite/file.c         |   8 +-
>  .../staging/lustre/lustre/llite/llite_internal.h   |   4 +-
>  drivers/staging/lustre/lustre/llite/namei.c        |  12 +-
>  fs/9p/vfs_inode.c                                  |   2 +-
>  fs/aio.c                                           |   6 +-
>  fs/autofs4/dev-ioctl.c                             |   8 +-
>  fs/autofs4/expire.c                                |   2 +-
>  fs/autofs4/root.c                                  |   6 +-
>  fs/bad_inode.c                                     | 147 ------
>  fs/btrfs/ioctl.c                                   |   4 +-
>  fs/cachefiles/daemon.c                             |   4 +-
>  fs/cachefiles/interface.c                          |   4 +-
>  fs/cachefiles/namei.c                              |  16 +-
>  fs/cachefiles/rdwr.c                               |   2 +-
>  fs/ceph/dir.c                                      |   2 +-
>  fs/ceph/file.c                                     |   2 +-
>  fs/coda/dir.c                                      |   2 +-
>  fs/configfs/configfs_internal.h                    |   3 +-
>  fs/configfs/dir.c                                  |  72 ++-
>  fs/configfs/file.c                                 |  28 +-
>  fs/configfs/inode.c                                |  12 +-
>  fs/coredump.c                                      |   2 +-
>  fs/dcache.c                                        |  37 +-
>  fs/debugfs/inode.c                                 |  36 +-
>  fs/ecryptfs/file.c                                 |   2 +-
>  fs/ecryptfs/inode.c                                |   4 +-
>  fs/exportfs/expfs.c                                |   2 +-
>  fs/fs-writeback.c                                  |   6 +-
>  fs/fuse/dir.c                                      |   2 +-
>  fs/gfs2/dir.c                                      |   2 +-
>  fs/hfsplus/dir.c                                   |   2 +-
>  fs/hppfs/hppfs.c                                   |   4 +-
>  fs/internal.h                                      |   2 +-
>  fs/jffs2/dir.c                                     |  14 +-
>  fs/jffs2/super.c                                   |   2 +-
>  fs/libfs.c                                         |   2 +-
>  fs/namei.c                                         |   2 +-
>  fs/namespace.c                                     |  10 +-
>  fs/nfsd/nfs4recover.c                              |   4 +-
>  fs/nfsd/nfsfh.c                                    |   8 +-
>  fs/nfsd/vfs.c                                      |   8 +-
>  fs/notify/fanotify/fanotify.c                      |   6 +-
>  fs/overlayfs/copy_up.c                             |   5 +-
>  fs/overlayfs/dir.c                                 |  34 +-
>  fs/overlayfs/inode.c                               |  12 +-
>  fs/overlayfs/overlayfs.h                           |  18 +-
>  fs/overlayfs/readdir.c                             | 181 +++----
>  fs/overlayfs/super.c                               | 564 ++++++++++++++-------
>  fs/posix_acl.c                                     |  18 +-
>  fs/proc/generic.c                                  |  12 -
>  fs/proc/inode.c                                    |  21 +
>  fs/proc/internal.h                                 |   1 +
>  fs/reiserfs/xattr.c                                |   4 +-
>  fs/super.c                                         |  40 +-
>  fs/xfs/xfs_ioctl.c                                 |   2 +-
>  include/linux/dcache.h                             | 120 ++++-
>  mm/shmem.c                                         |   4 +-
>  security/apparmor/include/apparmor.h               |   4 +-
>  security/apparmor/lsm.c                            |  20 +-
>  security/apparmor/path.c                           |   2 +-
>  security/inode.c                                   |   2 +-
>  security/selinux/hooks.c                           |   8 +-
>  security/smack/smack_lsm.c                         |   4 +-
>  security/tomoyo/file.c                             |   4 +-
>  70 files changed, 924 insertions(+), 758 deletions(-)
> --
> 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

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  9:32                 ` Sedat Dilek
@ 2015-02-22  9:37                   ` Al Viro
  2015-02-22 10:36                     ` Sedat Dilek
  2015-02-22 13:22                     ` Sedat Dilek
  0 siblings, 2 replies; 30+ messages in thread
From: Al Viro @ 2015-02-22  9:37 UTC (permalink / raw)
  To: Sedat Dilek; +Cc: Linus Torvalds, Linux Kernel Mailing List, linux-fsdevel

On Sun, Feb 22, 2015 at 10:32:02AM +0100, Sedat Dilek wrote:

> How do you test?

Mostly xfstests and LTP, plus assorted tests depending on the areas touched...
Any extra testing is welcome - the more, the merrier...

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  9:37                   ` Al Viro
@ 2015-02-22 10:36                     ` Sedat Dilek
  2015-02-22 15:05                       ` Sedat Dilek
  2015-02-22 13:22                     ` Sedat Dilek
  1 sibling, 1 reply; 30+ messages in thread
From: Sedat Dilek @ 2015-02-22 10:36 UTC (permalink / raw)
  To: David Howells
  Cc: Linus Torvalds, Linux Kernel Mailing List, linux-fsdevel, Al Viro

On Sun, Feb 22, 2015 at 10:37 AM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> On Sun, Feb 22, 2015 at 10:32:02AM +0100, Sedat Dilek wrote:
>
>> How do you test?
>
> Mostly xfstests and LTP, plus assorted tests depending on the areas touched...
> Any extra testing is welcome - the more, the merrier...

As said I wanted to test with unionmount-testsuite from Git HEAD master.

But...

The README is out-of-date and...

...my python3 throws me a...

$ LC_ALL=C ./run --ov --set-up 2>&1 | tee
../unionmount-testsuite-log_ov-set-up_$(uname -r).txt
Traceback (most recent call last):
  File "./run", line 107, in <module>
    set_up(ctx)
  File "/home/wearefam/src/unionmount-testsuite/unionmount-testsuite-git/set_up.py",
line 26, in set_up
    os.sync()
AttributeError: 'module' object has no attribute 'sync'

$ dpkg -l | grep python3
ii  python3
3.2.3-0ubuntu1.2                                    interactive
high-level object-oriented language (default python3 version)
ii  python3-minimal
3.2.3-0ubuntu1.2                                    minimal subset of
the Python language (default python3 version)
ii  python3.2
3.2.3-0ubuntu3.6                                    Interactive
high-level object-oriented language (version 3.2)
ii  python3.2-minimal
3.2.3-0ubuntu3.6                                    Minimal subset of
the Python language (version 3.2)

AFAICS I had reported already the README needs a refresh.

I will continue with LTP-lite testing and fio.

- Sedat -

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-21 22:45 ` Linus Torvalds
                     ` (2 preceding siblings ...)
  2015-02-22  0:51   ` Al Viro
@ 2015-02-22 12:30   ` David Howells
  3 siblings, 0 replies; 30+ messages in thread
From: David Howells @ 2015-02-22 12:30 UTC (permalink / raw)
  To: Al Viro
  Cc: dhowells, Linus Torvalds, Linux Kernel Mailing List, linux-fsdevel

Al Viro <viro@ZenIV.linux.org.uk> wrote:

> FWIW, I probably should've collapsed the per-fs patches together, or
> held them back until the next cycle; I understand why David did them
> that way (less painful rebasing that stuff)

Actually, that's not why I did it that way.  What I wanted was to get the
wrappers upstream in this window then I could push the individual per-fs
commits to the managers of those filesystems to go through their trees in the
next cycle.

I didn't rebase the scripted commits since I can just rerun the script.

David

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  0:51   ` Al Viro
  2015-02-22  1:34     ` Linus Torvalds
@ 2015-02-22 12:39     ` David Howells
  1 sibling, 0 replies; 30+ messages in thread
From: David Howells @ 2015-02-22 12:39 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: dhowells, Al Viro, Linux Kernel Mailing List, linux-fsdevel

Linus Torvalds <torvalds@linux-foundation.org> wrote:

>  - dentry_inode*() is supposed to be "the inode that would be used if
> the dentry was opened"
>
>    What part of "dentry_inode()" implies "if the dentry was opened" to
> you? Nothing. The name is fundamentally bad.

That because I wasn't thinking of it that way because it's used in a lot more
places than just opening code.  Audit, for example.

> And what *possible* situation could make that "_once()" version ever be
> valid? None. It's bogus. It's crap. It's insane. There is no way that it is
> *ever* a valid question to even ask. If the dentry is so unstable that you
> can't safely look at the inode, you had damn well better never ask "ok, what
> would the inode be if I opened this random pointer"?

There were originally some uses of dentry_inode_once(), but I think they
dropped out when I removed most of fs/*.c from consideration by the scripts.

>  - fs_inode*() is supposed to be "this is the inode that the native
> filesystem uses".

Yes.

> So of the four new helpers, I really don't see any of them as "good".
> I think "dentry_inode()" could remain, but even there I think the name
> should specify *what* it is ("d_opened_inode()"?  I don't like that name
> either,

That's also a poor choice.  The inode isn't even opened necessarily.  If it is
opened and you have the struct file *, you should almost certainly be using
file_inode().

David

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  2:02       ` Al Viro
  2015-02-22  2:11         ` Al Viro
  2015-02-22  2:19         ` Linus Torvalds
@ 2015-02-22 12:44         ` David Howells
  2 siblings, 0 replies; 30+ messages in thread
From: David Howells @ 2015-02-22 12:44 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: dhowells, Al Viro, Linux Kernel Mailing List, linux-fsdevel

Linus Torvalds <torvalds@linux-foundation.org> wrote:

> So the ACCESS_ONCE() thing is more special than just "done under RCU".
> It's more like "really special case done without any of the normal
> locking _or_ any of the normal RCU checks".
> 
> That said, the overhead of using ACCESS_ONCE() is basically nil, so
> it's not like we couldn't just start doing more of them, and make it
> be more of a "any time we're under RCU" kind of thing.

Some functions access ->d_inode more than once.  Wouldn't that potentially
increase the number of load instructions?  Admittedly, calls to
dentry->d_inode could be replaced with inode = dentry->d_inode, then use
inode.

> Yeah, I think "d_backing_store_inode()" would probably be more along
> the lines, but that's a mouthful. Maybe shortened to
> "d_backing_inode()"?

Sounds more reasonable than d_opened_inode().  d_actual_inode() might also
work.  d_lower_inode() might work too.

David

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  3:16             ` Linus Torvalds
  2015-02-22  8:51               ` Al Viro
@ 2015-02-22 12:54               ` David Howells
  2015-02-22 16:46                 ` [git pull] more vfs bits, updated Al Viro
  1 sibling, 1 reply; 30+ messages in thread
From: David Howells @ 2015-02-22 12:54 UTC (permalink / raw)
  To: Al Viro
  Cc: dhowells, Linus Torvalds, Linux Kernel Mailing List, linux-fsdevel

You might want to remove dentry_inode_once().  I can still see it in your
vfs/for-linus branch.

It might also be worth renaming d_dentry() to d_backing_dentry() to match
d_backing_inode().

David

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22  9:37                   ` Al Viro
  2015-02-22 10:36                     ` Sedat Dilek
@ 2015-02-22 13:22                     ` Sedat Dilek
  2015-02-22 13:23                       ` Sedat Dilek
  1 sibling, 1 reply; 30+ messages in thread
From: Sedat Dilek @ 2015-02-22 13:22 UTC (permalink / raw)
  To: Al Viro; +Cc: Linus Torvalds, Linux Kernel Mailing List, linux-fsdevel

On Sun, Feb 22, 2015 at 10:37 AM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> On Sun, Feb 22, 2015 at 10:32:02AM +0100, Sedat Dilek wrote:
>
>> How do you test?
>
> Mostly xfstests and LTP, plus assorted tests depending on the areas touched...
> Any extra testing is welcome - the more, the merrier...

My base is Linux-v3.19-9526-ga135c717d5cd...

...plus vfs.git#for-linus up to...

commit 377a2340606837e7a1245280b0738e194335e0a1
"autofs4 copy_dev_ioctl(): keep the value of ->size we'd used for allocation"

In the attached tarballs you will find everything you need (see post-scriptum).

- Sedat -

P.S.: Output of ls-lR.txt

$ cat ls-lR.txt
.:
total 20
drwxr-xr-x 2 wearefam wearefam 4096 Feb 22 12:37 configs
drwxr-xr-x 2 wearefam wearefam 4096 Feb 22 14:12 fio
-rw-r--r-- 1 wearefam wearefam    0 Feb 22 14:15 ls-lR.txt
drwxr-xr-x 2 wearefam wearefam 4096 Feb 22 14:11 ltp
drwxr-xr-x 4 wearefam wearefam 4096 Feb 22 12:40 patches
drwxr-xr-x 2 wearefam wearefam 4096 Feb 22 14:13 scripts

./configs:
total 124
-rw-r--r-- 1 wearefam wearefam 125234 Feb 22 10:55
config-3.19.0-9526.2-iniza-small

./fio:
total 132
-rw-r--r-- 1 wearefam wearefam 61638 Feb 22 14:10
dmesg_3.19.0-9526.2-iniza-small_after-fio-2.2.5.txt
-rw-r--r-- 1 wearefam wearefam 60066 Feb 22 14:09
dmesg_3.19.0-9526.2-iniza-small_before-fio-2.2.5.txt
-rw-r--r-- 1 wearefam wearefam  1980 Feb 22 14:10
dmesg_3.19.0-9526.2-iniza-small_fio-2.2.5.diff
-rw-r--r-- 1 wearefam wearefam  1921 Feb 22 14:10
results_fio-2.2.5_3.19.0-9526.2-iniza-small.txt

./ltp:
total 660
-rw-r--r-- 1 wearefam wearefam  60066 Feb 22 14:05
dmesg_3.19.0-9526.2-iniza-small_after-ltp-20150119.txt
-rw-r--r-- 1 wearefam wearefam  56791 Feb 22 13:40
dmesg_3.19.0-9526.2-iniza-small_before-ltp-20150119.txt
-rw-r--r-- 1 wearefam wearefam   3699 Feb 22 14:05
dmesg_3.19.0-9526.2-iniza-small_ltp-20150119.diff
-rw-r--r-- 1 wearefam wearefam 550587 Feb 22 14:05
results_ltp-20150119_3.19.0-9526.2-iniza-small.txt

./patches:
total 8
drwxr-xr-x 2 wearefam wearefam 4096 Feb 22 01:46 rhashtable-fixes-linux-3.20-rc1
drwxr-xr-x 2 wearefam wearefam 4096 Feb 22 12:40
syscalls-umount01-fixes-ltp-full-20150119

./patches/rhashtable-fixes-linux-3.20-rc1:
total 4
-rw-r--r-- 1 wearefam wearefam 1273 Feb 22 01:44
rhashtable-initialize-all-rhashtable-walker-members.patch

./patches/syscalls-umount01-fixes-ltp-full-20150119:
total 4
-rw-r--r-- 1 wearefam wearefam 1342 Feb 22 11:48
0001-syscalls-umount01-Give-a-hint-on-failure-with-EBUSY.patch

./scripts:
total 8
-rwxr-xr-x 1 wearefam wearefam 1544 Feb 22 14:12 fio-testcase.sh
-rwxr-xr-x 1 wearefam wearefam  696 Feb 22 14:13 ltp-testcase.sh

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22 13:22                     ` Sedat Dilek
@ 2015-02-22 13:23                       ` Sedat Dilek
  0 siblings, 0 replies; 30+ messages in thread
From: Sedat Dilek @ 2015-02-22 13:23 UTC (permalink / raw)
  To: Al Viro; +Cc: Linus Torvalds, Linux Kernel Mailing List, linux-fsdevel

[-- Attachment #1: Type: text/plain, Size: 2882 bytes --]

On Sun, Feb 22, 2015 at 2:22 PM, Sedat Dilek <sedat.dilek@gmail.com> wrote:
> On Sun, Feb 22, 2015 at 10:37 AM, Al Viro <viro@zeniv.linux.org.uk> wrote:
>> On Sun, Feb 22, 2015 at 10:32:02AM +0100, Sedat Dilek wrote:
>>
>>> How do you test?
>>
>> Mostly xfstests and LTP, plus assorted tests depending on the areas touched...
>> Any extra testing is welcome - the more, the merrier...
>
> My base is Linux-v3.19-9526-ga135c717d5cd...
>
> ...plus vfs.git#for-linus up to...
>
> commit 377a2340606837e7a1245280b0738e194335e0a1
> "autofs4 copy_dev_ioctl(): keep the value of ->size we'd used for allocation"
>
> In the attached tarballs you will find everything you need (see post-scriptum).
>
> - Sedat -
>
> P.S.: Output of ls-lR.txt
>
> $ cat ls-lR.txt
> .:
> total 20
> drwxr-xr-x 2 wearefam wearefam 4096 Feb 22 12:37 configs
> drwxr-xr-x 2 wearefam wearefam 4096 Feb 22 14:12 fio
> -rw-r--r-- 1 wearefam wearefam    0 Feb 22 14:15 ls-lR.txt
> drwxr-xr-x 2 wearefam wearefam 4096 Feb 22 14:11 ltp
> drwxr-xr-x 4 wearefam wearefam 4096 Feb 22 12:40 patches
> drwxr-xr-x 2 wearefam wearefam 4096 Feb 22 14:13 scripts
>
> ./configs:
> total 124
> -rw-r--r-- 1 wearefam wearefam 125234 Feb 22 10:55
> config-3.19.0-9526.2-iniza-small
>
> ./fio:
> total 132
> -rw-r--r-- 1 wearefam wearefam 61638 Feb 22 14:10
> dmesg_3.19.0-9526.2-iniza-small_after-fio-2.2.5.txt
> -rw-r--r-- 1 wearefam wearefam 60066 Feb 22 14:09
> dmesg_3.19.0-9526.2-iniza-small_before-fio-2.2.5.txt
> -rw-r--r-- 1 wearefam wearefam  1980 Feb 22 14:10
> dmesg_3.19.0-9526.2-iniza-small_fio-2.2.5.diff
> -rw-r--r-- 1 wearefam wearefam  1921 Feb 22 14:10
> results_fio-2.2.5_3.19.0-9526.2-iniza-small.txt
>
> ./ltp:
> total 660
> -rw-r--r-- 1 wearefam wearefam  60066 Feb 22 14:05
> dmesg_3.19.0-9526.2-iniza-small_after-ltp-20150119.txt
> -rw-r--r-- 1 wearefam wearefam  56791 Feb 22 13:40
> dmesg_3.19.0-9526.2-iniza-small_before-ltp-20150119.txt
> -rw-r--r-- 1 wearefam wearefam   3699 Feb 22 14:05
> dmesg_3.19.0-9526.2-iniza-small_ltp-20150119.diff
> -rw-r--r-- 1 wearefam wearefam 550587 Feb 22 14:05
> results_ltp-20150119_3.19.0-9526.2-iniza-small.txt
>
> ./patches:
> total 8
> drwxr-xr-x 2 wearefam wearefam 4096 Feb 22 01:46 rhashtable-fixes-linux-3.20-rc1
> drwxr-xr-x 2 wearefam wearefam 4096 Feb 22 12:40
> syscalls-umount01-fixes-ltp-full-20150119
>
> ./patches/rhashtable-fixes-linux-3.20-rc1:
> total 4
> -rw-r--r-- 1 wearefam wearefam 1273 Feb 22 01:44
> rhashtable-initialize-all-rhashtable-walker-members.patch
>
> ./patches/syscalls-umount01-fixes-ltp-full-20150119:
> total 4
> -rw-r--r-- 1 wearefam wearefam 1342 Feb 22 11:48
> 0001-syscalls-umount01-Give-a-hint-on-failure-with-EBUSY.patch
>
> ./scripts:
> total 8
> -rwxr-xr-x 1 wearefam wearefam 1544 Feb 22 14:12 fio-testcase.sh
> -rwxr-xr-x 1 wearefam wearefam  696 Feb 22 14:13 ltp-testcase.sh

Forgot the attachments, sorry.

- Sedat -

[-- Attachment #2: for-viro.tar.gz --]
[-- Type: application/x-gzip, Size: 148405 bytes --]

[-- Attachment #3: for-viro.tar.gz.sha256sum --]
[-- Type: application/octet-stream, Size: 82 bytes --]

5344f2b95ba04b313e3296c567e8f095bc80a23939f0180864fb2fb1a72601ea  for-viro.tar.gz

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22 10:36                     ` Sedat Dilek
@ 2015-02-22 15:05                       ` Sedat Dilek
  2015-02-22 15:12                         ` Sedat Dilek
  0 siblings, 1 reply; 30+ messages in thread
From: Sedat Dilek @ 2015-02-22 15:05 UTC (permalink / raw)
  To: David Howells, Miklos Szeredi
  Cc: Linus Torvalds, Linux Kernel Mailing List, linux-fsdevel, Al Viro

[-- Attachment #1: Type: text/plain, Size: 3190 bytes --]

On Sun, Feb 22, 2015 at 11:36 AM, Sedat Dilek <sedat.dilek@gmail.com> wrote:
> On Sun, Feb 22, 2015 at 10:37 AM, Al Viro <viro@zeniv.linux.org.uk> wrote:
>> On Sun, Feb 22, 2015 at 10:32:02AM +0100, Sedat Dilek wrote:
>>
>>> How do you test?
>>
>> Mostly xfstests and LTP, plus assorted tests depending on the areas touched...
>> Any extra testing is welcome - the more, the merrier...
>
> As said I wanted to test with unionmount-testsuite from Git HEAD master.
>
> But...
>
> The README is out-of-date and...
>
> ...my python3 throws me a...
>
> $ LC_ALL=C ./run --ov --set-up 2>&1 | tee
> ../unionmount-testsuite-log_ov-set-up_$(uname -r).txt
> Traceback (most recent call last):
>   File "./run", line 107, in <module>
>     set_up(ctx)
>   File "/home/wearefam/src/unionmount-testsuite/unionmount-testsuite-git/set_up.py",
> line 26, in set_up
>     os.sync()
> AttributeError: 'module' object has no attribute 'sync'
>
> $ dpkg -l | grep python3
> ii  python3
> 3.2.3-0ubuntu1.2                                    interactive
> high-level object-oriented language (default python3 version)
> ii  python3-minimal
> 3.2.3-0ubuntu1.2                                    minimal subset of
> the Python language (default python3 version)
> ii  python3.2
> 3.2.3-0ubuntu3.6                                    Interactive
> high-level object-oriented language (version 3.2)
> ii  python3.2-minimal
> 3.2.3-0ubuntu3.6                                    Minimal subset of
> the Python language (version 3.2)
>
> AFAICS I had reported already the README needs a refresh.
>
> I will continue with LTP-lite testing and fio.
>

[ +Miklos ]

I switched from python-3.2 to python-3.4 from a 3rd-party PPA (see [1]
and [2]) here on Ubuntu/precise.

$ sudo add-apt-repository ppa:fkrull/deadsnakes
$ sudo apt-get update
$ sudo apt-get install python3.4 python3-deadsnakes

$ cd /usr/bin/
$ ln -sf python3.4 python3

$ python3 --version
Python 3.4.2

David, the requirement of which minimal python3 release should be
documented (README?).
Thanks.

As the mount-type changed mount_union.py needs a refresh, too.
We need to distinguish when OverlayFS is built as a module.

$ grep -i overlay /boot/config-3.19.0-9526.2-iniza-small
CONFIG_OVERLAY_FS=m

Formerly: CONFIG_OVERLAYFS_FS=m

diff --git a/mount_union.py b/mount_union.py
index 4999daa40989..e1963d6eb22a 100644
--- a/mount_union.py
+++ b/mount_union.py
@@ -27,6 +27,6 @@ def mount_union(ctx):
         workdir = upper_mntroot + "/work"
         os.mkdir(upperdir)
         os.mkdir(workdir)
-        system("mount -t overlayfs overlayfs " + union_mntroot +
+        system("mount -t overlay overlay " + union_mntroot +
                " -olowerdir=" + lower_mntroot + ",upperdir=" +
upperdir + ",workdir=" + workdir)
         ctx.note_upper_fs(upper_mntroot, testdir)

In the end I could run unionmount-testsuite on vanilla-upstream (w/o
vfs.git#for-linus, test results will follow).

$ sudo modprobe -v overlay

$ sudo LC_ALL=C ./run --ov 2>&1 | tee
../logs/results_unionmount-testsuite_$(uname -r).txt

Have more fun!

Regards,
- Sedat -


[1] http://askubuntu.com/a/290283
[2] http://askubuntu.com/questions/244544/how-do-i-install-python-3-3

[-- Attachment #2: results_unionmount-testsuite_3.19.0-9526.1-iniza-small.txt --]
[-- Type: text/plain, Size: 205470 bytes --]

***
*** ./run --ov --ts=0 open-plain
***
TEST open-plain.py:10: Open O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
TEST open-plain.py:18: Open O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -W q
 ./run --open-file /mnt/a/foo101 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo101 -w -W p
 ./run --open-file /mnt/a/foo101 -r -R pxxx:yyy:zzz
TEST open-plain.py:28: Open O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -W q
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo102 -a -W p
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzzqp
TEST open-plain.py:38: Open O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -W q
 ./run --open-file /mnt/a/foo103 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo103 -r -w -W p
 ./run --open-file /mnt/a/foo103 -r -R pxxx:yyy:zzz
TEST open-plain.py:48: Open O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -W q
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo104 -r -a -W p
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=1 open-plain
***
TEST open-plain.py:10: Open O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
TEST open-plain.py:18: Open O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -W q
 ./run --open-file /mnt/a/foo101 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo101 -w -W p
 ./run --open-file /mnt/a/foo101 -r -R pxxx:yyy:zzz
TEST open-plain.py:28: Open O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -W q
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo102 -a -W p
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzzqp
TEST open-plain.py:38: Open O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -W q
 ./run --open-file /mnt/a/foo103 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo103 -r -w -W p
 ./run --open-file /mnt/a/foo103 -r -R pxxx:yyy:zzz
TEST open-plain.py:48: Open O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -W q
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo104 -r -a -W p
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=0 open-trunc
***
TEST open-trunc.py:10: Open O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -t -R 
 ./run --open-file /mnt/a/foo100 -r -t -R 
TEST open-trunc.py:18: Open O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -t -W q
 ./run --open-file /mnt/a/foo101 -r -R q
 ./run --open-file /mnt/a/foo101 -w -t -W p
 ./run --open-file /mnt/a/foo101 -r -R p
TEST open-trunc.py:28: Open O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -t -W q
 ./run --open-file /mnt/a/foo102 -r -R q
 ./run --open-file /mnt/a/foo102 -a -t -W p
 ./run --open-file /mnt/a/foo102 -r -R p
TEST open-trunc.py:38: Open O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -t -W q
 ./run --open-file /mnt/a/foo103 -r -R q
 ./run --open-file /mnt/a/foo103 -r -w -t -W p
 ./run --open-file /mnt/a/foo103 -r -R p
TEST open-trunc.py:48: Open O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -t -W q
 ./run --open-file /mnt/a/foo104 -r -R q
 ./run --open-file /mnt/a/foo104 -r -a -t -W p
 ./run --open-file /mnt/a/foo104 -r -R p
***
*** ./run --ov --ts=1 open-trunc
***
TEST open-trunc.py:10: Open O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -t -R 
 ./run --open-file /mnt/a/foo100 -r -t -R 
TEST open-trunc.py:18: Open O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -t -W q
 ./run --open-file /mnt/a/foo101 -r -R q
 ./run --open-file /mnt/a/foo101 -w -t -W p
 ./run --open-file /mnt/a/foo101 -r -R p
TEST open-trunc.py:28: Open O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -t -W q
 ./run --open-file /mnt/a/foo102 -r -R q
 ./run --open-file /mnt/a/foo102 -a -t -W p
 ./run --open-file /mnt/a/foo102 -r -R p
TEST open-trunc.py:38: Open O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -t -W q
 ./run --open-file /mnt/a/foo103 -r -R q
 ./run --open-file /mnt/a/foo103 -r -w -t -W p
 ./run --open-file /mnt/a/foo103 -r -R p
TEST open-trunc.py:48: Open O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -t -W q
 ./run --open-file /mnt/a/foo104 -r -R q
 ./run --open-file /mnt/a/foo104 -r -a -t -W p
 ./run --open-file /mnt/a/foo104 -r -R p
***
*** ./run --ov --ts=0 open-creat
***
TEST open-creat.py:10: Open O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo100 -r -c -R :xxx:yyy:zzz
TEST open-creat.py:18: Open O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -W q
 ./run --open-file /mnt/a/foo101 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo101 -w -c -W p
 ./run --open-file /mnt/a/foo101 -r -c -R pxxx:yyy:zzz
TEST open-creat.py:28: Open O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -W q
 ./run --open-file /mnt/a/foo102 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo102 -a -c -W p
 ./run --open-file /mnt/a/foo102 -r -c -R :xxx:yyy:zzzqp
TEST open-creat.py:38: Open O_CREAT|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -W q
 ./run --open-file /mnt/a/foo103 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo103 -r -w -c -W p
 ./run --open-file /mnt/a/foo103 -r -c -R pxxx:yyy:zzz
TEST open-creat.py:48: Open O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -W q
 ./run --open-file /mnt/a/foo104 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo104 -r -a -c -W p
 ./run --open-file /mnt/a/foo104 -r -c -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=1 open-creat
***
TEST open-creat.py:10: Open O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo100 -r -c -R :xxx:yyy:zzz
TEST open-creat.py:18: Open O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -W q
 ./run --open-file /mnt/a/foo101 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo101 -w -c -W p
 ./run --open-file /mnt/a/foo101 -r -c -R pxxx:yyy:zzz
TEST open-creat.py:28: Open O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -W q
 ./run --open-file /mnt/a/foo102 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo102 -a -c -W p
 ./run --open-file /mnt/a/foo102 -r -c -R :xxx:yyy:zzzqp
TEST open-creat.py:38: Open O_CREAT|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -W q
 ./run --open-file /mnt/a/foo103 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo103 -r -w -c -W p
 ./run --open-file /mnt/a/foo103 -r -c -R pxxx:yyy:zzz
TEST open-creat.py:48: Open O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -W q
 ./run --open-file /mnt/a/foo104 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo104 -r -a -c -W p
 ./run --open-file /mnt/a/foo104 -r -c -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=0 open-creat-trunc
***
TEST open-creat-trunc.py:10: Open O_CREAT|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -t -R 
 ./run --open-file /mnt/a/foo100 -r -c -t -R 
TEST open-creat-trunc.py:18: Open O_CREAT|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -t -W q
 ./run --open-file /mnt/a/foo101 -r -R q
 ./run --open-file /mnt/a/foo101 -w -c -t -W p
 ./run --open-file /mnt/a/foo101 -r -R p
TEST open-creat-trunc.py:28: Open O_CREAT|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -t -W q
 ./run --open-file /mnt/a/foo102 -r -R q
 ./run --open-file /mnt/a/foo102 -a -c -t -W p
 ./run --open-file /mnt/a/foo102 -r -R p
TEST open-creat-trunc.py:38: Open O_CREAT|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -t -W q
 ./run --open-file /mnt/a/foo103 -r -R q
 ./run --open-file /mnt/a/foo103 -r -w -c -t -W p
 ./run --open-file /mnt/a/foo103 -r -R p
TEST open-creat-trunc.py:48: Open O_CREAT|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -t -W q
 ./run --open-file /mnt/a/foo104 -r -R q
 ./run --open-file /mnt/a/foo104 -r -a -c -t -W p
 ./run --open-file /mnt/a/foo104 -r -R p
***
*** ./run --ov --ts=1 open-creat-trunc
***
TEST open-creat-trunc.py:10: Open O_CREAT|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -t -R 
 ./run --open-file /mnt/a/foo100 -r -c -t -R 
TEST open-creat-trunc.py:18: Open O_CREAT|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -t -W q
 ./run --open-file /mnt/a/foo101 -r -R q
 ./run --open-file /mnt/a/foo101 -w -c -t -W p
 ./run --open-file /mnt/a/foo101 -r -R p
TEST open-creat-trunc.py:28: Open O_CREAT|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -t -W q
 ./run --open-file /mnt/a/foo102 -r -R q
 ./run --open-file /mnt/a/foo102 -a -c -t -W p
 ./run --open-file /mnt/a/foo102 -r -R p
TEST open-creat-trunc.py:38: Open O_CREAT|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -t -W q
 ./run --open-file /mnt/a/foo103 -r -R q
 ./run --open-file /mnt/a/foo103 -r -w -c -t -W p
 ./run --open-file /mnt/a/foo103 -r -R p
TEST open-creat-trunc.py:48: Open O_CREAT|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -t -W q
 ./run --open-file /mnt/a/foo104 -r -R q
 ./run --open-file /mnt/a/foo104 -r -a -c -t -W p
 ./run --open-file /mnt/a/foo104 -r -R p
***
*** ./run --ov --ts=0 open-creat-excl
***
TEST open-creat-excl.py:10: Open O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:18: Open O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:26: Open O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:34: Open O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:42: Open O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=1 open-creat-excl
***
TEST open-creat-excl.py:10: Open O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:18: Open O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:26: Open O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:34: Open O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:42: Open O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=0 open-creat-excl-trunc
***
TEST open-creat-excl-trunc.py:10: Open O_CREAT|O_EXCL|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:18: Open O_CREAT|O_EXCL|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:26: Open O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:34: Open O_CREAT|O_EXCL|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:42: Open O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=1 open-creat-excl-trunc
***
TEST open-creat-excl-trunc.py:10: Open O_CREAT|O_EXCL|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:18: Open O_CREAT|O_EXCL|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:26: Open O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:34: Open O_CREAT|O_EXCL|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:42: Open O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=0 noent-plain
***
TEST noent-plain.py:10: Open O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
TEST noent-plain.py:18: Open O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -w -E ENOENT
TEST noent-plain.py:26: Open O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -a -E ENOENT
TEST noent-plain.py:34: Open O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -E ENOENT
 ./run --open-file /mnt/a/no_foo103 -r -w -E ENOENT
TEST noent-plain.py:42: Open O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -E ENOENT
 ./run --open-file /mnt/a/no_foo104 -r -a -E ENOENT
***
*** ./run --ov --ts=1 noent-plain
***
TEST noent-plain.py:10: Open O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
TEST noent-plain.py:18: Open O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -w -E ENOENT
TEST noent-plain.py:26: Open O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -a -E ENOENT
TEST noent-plain.py:34: Open O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -E ENOENT
 ./run --open-file /mnt/a/no_foo103 -r -w -E ENOENT
TEST noent-plain.py:42: Open O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -E ENOENT
 ./run --open-file /mnt/a/no_foo104 -r -a -E ENOENT
***
*** ./run --ov --ts=0 noent-trunc
***
TEST noent-trunc.py:10: Open O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -t -E ENOENT
 ./run --open-file /mnt/a/no_foo100 -r -t -E ENOENT
TEST noent-trunc.py:18: Open O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -t -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -w -t -E ENOENT
TEST noent-trunc.py:26: Open O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -t -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -a -t -E ENOENT
TEST noent-trunc.py:34: Open O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -t -E ENOENT
 ./run --open-file /mnt/a/no_foo103 -r -w -t -E ENOENT
TEST noent-trunc.py:42: Open O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -t -E ENOENT
 ./run --open-file /mnt/a/no_foo104 -r -a -t -E ENOENT
***
*** ./run --ov --ts=1 noent-trunc
***
TEST noent-trunc.py:10: Open O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -t -E ENOENT
 ./run --open-file /mnt/a/no_foo100 -r -t -E ENOENT
TEST noent-trunc.py:18: Open O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -t -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -w -t -E ENOENT
TEST noent-trunc.py:26: Open O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -t -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -a -t -E ENOENT
TEST noent-trunc.py:34: Open O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -t -E ENOENT
 ./run --open-file /mnt/a/no_foo103 -r -w -t -E ENOENT
TEST noent-trunc.py:42: Open O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -t -E ENOENT
 ./run --open-file /mnt/a/no_foo104 -r -a -t -E ENOENT
***
*** ./run --ov --ts=0 noent-creat
***
TEST noent-creat.py:10: Create O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -R 
TEST noent-creat.py:18: Create O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -W p
 ./run --open-file /mnt/a/no_foo101 -r -R p
TEST noent-creat.py:28: Create O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -W p
 ./run --open-file /mnt/a/no_foo102 -r -R qp
TEST noent-creat.py:38: Create O_CREAT|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -W p
 ./run --open-file /mnt/a/no_foo103 -r -R p
TEST noent-creat.py:48: Create O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -W p
 ./run --open-file /mnt/a/no_foo104 -r -R qp
***
*** ./run --ov --ts=1 noent-creat
***
TEST noent-creat.py:10: Create O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -R 
TEST noent-creat.py:18: Create O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -W p
 ./run --open-file /mnt/a/no_foo101 -r -R p
TEST noent-creat.py:28: Create O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -W p
 ./run --open-file /mnt/a/no_foo102 -r -R qp
TEST noent-creat.py:38: Create O_CREAT|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -W p
 ./run --open-file /mnt/a/no_foo103 -r -R p
TEST noent-creat.py:48: Create O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -W p
 ./run --open-file /mnt/a/no_foo104 -r -R qp
***
*** ./run --ov --ts=0 noent-creat-trunc
***
TEST noent-creat-trunc.py:10: Create O_CREAT|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -t -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -t -R 
TEST noent-creat-trunc.py:18: Create O_CREAT|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -t -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -t -W p
 ./run --open-file /mnt/a/no_foo101 -r -R p
TEST noent-creat-trunc.py:28: Create O_CREAT|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -t -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -W p
 ./run --open-file /mnt/a/no_foo102 -r -R qp
TEST noent-creat-trunc.py:38: Create O_CREAT|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -t -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -W p
 ./run --open-file /mnt/a/no_foo103 -r -R p
TEST noent-creat-trunc.py:48: Create O_CREAT|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -t -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -W p
 ./run --open-file /mnt/a/no_foo104 -r -R qp
***
*** ./run --ov --ts=1 noent-creat-trunc
***
TEST noent-creat-trunc.py:10: Create O_CREAT|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -t -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -t -R 
TEST noent-creat-trunc.py:18: Create O_CREAT|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -t -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -t -W p
 ./run --open-file /mnt/a/no_foo101 -r -R p
TEST noent-creat-trunc.py:28: Create O_CREAT|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -t -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -W p
 ./run --open-file /mnt/a/no_foo102 -r -R qp
TEST noent-creat-trunc.py:38: Create O_CREAT|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -t -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -W p
 ./run --open-file /mnt/a/no_foo103 -r -R p
TEST noent-creat-trunc.py:48: Create O_CREAT|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -t -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -W p
 ./run --open-file /mnt/a/no_foo104 -r -R qp
***
*** ./run --ov --ts=0 noent-creat-excl
***
TEST noent-creat-excl.py:10: Create O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -e -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST noent-creat-excl.py:19: Create O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -e -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST noent-creat-excl.py:29: Create O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -e -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST noent-creat-excl.py:39: Create O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST noent-creat-excl.py:49: Create O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=1 noent-creat-excl
***
TEST noent-creat-excl.py:10: Create O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -e -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST noent-creat-excl.py:19: Create O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -e -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST noent-creat-excl.py:29: Create O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -e -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST noent-creat-excl.py:39: Create O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST noent-creat-excl.py:49: Create O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=0 noent-creat-excl-trunc
***
TEST noent-creat-excl-trunc.py:10: Create O_CREAT|O_EXCL|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -e -t -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST noent-creat-excl-trunc.py:19: Create O_CREAT|O_EXCL|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -e -t -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST noent-creat-excl-trunc.py:29: Create O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -e -t -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST noent-creat-excl-trunc.py:39: Create O_CREAT|O_EXCL|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -t -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST noent-creat-excl-trunc.py:49: Create O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -t -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=1 noent-creat-excl-trunc
***
TEST noent-creat-excl-trunc.py:10: Create O_CREAT|O_EXCL|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -e -t -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST noent-creat-excl-trunc.py:19: Create O_CREAT|O_EXCL|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -e -t -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST noent-creat-excl-trunc.py:29: Create O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -e -t -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST noent-creat-excl-trunc.py:39: Create O_CREAT|O_EXCL|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -t -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST noent-creat-excl-trunc.py:49: Create O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -t -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=0 sym1-plain
***
TEST sym1-plain.py:10: Open(symlink) O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
TEST sym1-plain.py:19: Open(symlink) O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -W q
 ./run --open-file /mnt/a/direct_sym101 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym101 -w -W p
 ./run --open-file /mnt/a/direct_sym101 -r -R pxxx:yyy:zzz
TEST sym1-plain.py:30: Open(symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -W q
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym102 -a -W p
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzzqp
TEST sym1-plain.py:41: Open(symlink) O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -W q
 ./run --open-file /mnt/a/direct_sym103 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym103 -r -w -W p
 ./run --open-file /mnt/a/direct_sym103 -r -R pxxx:yyy:zzz
TEST sym1-plain.py:52: Open(symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -W q
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym104 -r -a -W p
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=1 sym1-plain
***
TEST sym1-plain.py:10: Open(symlink) O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
TEST sym1-plain.py:19: Open(symlink) O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -W q
 ./run --open-file /mnt/a/direct_sym101 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym101 -w -W p
 ./run --open-file /mnt/a/direct_sym101 -r -R pxxx:yyy:zzz
TEST sym1-plain.py:30: Open(symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -W q
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym102 -a -W p
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzzqp
TEST sym1-plain.py:41: Open(symlink) O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -W q
 ./run --open-file /mnt/a/direct_sym103 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym103 -r -w -W p
 ./run --open-file /mnt/a/direct_sym103 -r -R pxxx:yyy:zzz
TEST sym1-plain.py:52: Open(symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -W q
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym104 -r -a -W p
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=0 sym1-trunc
***
TEST sym1-trunc.py:10: Open(symlink) O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -t -R 
 ./run --open-file /mnt/a/direct_sym100 -r -t -R 
TEST sym1-trunc.py:19: Open(symlink) O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -t -W q
 ./run --open-file /mnt/a/direct_sym101 -r -R q
 ./run --open-file /mnt/a/direct_sym101 -w -t -W p
 ./run --open-file /mnt/a/direct_sym101 -r -R p
TEST sym1-trunc.py:30: Open(symlink) O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -t -W q
 ./run --open-file /mnt/a/direct_sym102 -r -R q
 ./run --open-file /mnt/a/direct_sym102 -a -t -W p
 ./run --open-file /mnt/a/direct_sym102 -r -R p
TEST sym1-trunc.py:41: Open(symlink) O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -t -W q
 ./run --open-file /mnt/a/direct_sym103 -r -R q
 ./run --open-file /mnt/a/direct_sym103 -r -w -t -W p
 ./run --open-file /mnt/a/direct_sym103 -r -R p
TEST sym1-trunc.py:52: Open(symlink) O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -t -W q
 ./run --open-file /mnt/a/direct_sym104 -r -R q
 ./run --open-file /mnt/a/direct_sym104 -r -a -t -W p
 ./run --open-file /mnt/a/direct_sym104 -r -R p
***
*** ./run --ov --ts=1 sym1-trunc
***
TEST sym1-trunc.py:10: Open(symlink) O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -t -R 
 ./run --open-file /mnt/a/direct_sym100 -r -t -R 
TEST sym1-trunc.py:19: Open(symlink) O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -t -W q
 ./run --open-file /mnt/a/direct_sym101 -r -R q
 ./run --open-file /mnt/a/direct_sym101 -w -t -W p
 ./run --open-file /mnt/a/direct_sym101 -r -R p
TEST sym1-trunc.py:30: Open(symlink) O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -t -W q
 ./run --open-file /mnt/a/direct_sym102 -r -R q
 ./run --open-file /mnt/a/direct_sym102 -a -t -W p
 ./run --open-file /mnt/a/direct_sym102 -r -R p
TEST sym1-trunc.py:41: Open(symlink) O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -t -W q
 ./run --open-file /mnt/a/direct_sym103 -r -R q
 ./run --open-file /mnt/a/direct_sym103 -r -w -t -W p
 ./run --open-file /mnt/a/direct_sym103 -r -R p
TEST sym1-trunc.py:52: Open(symlink) O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -t -W q
 ./run --open-file /mnt/a/direct_sym104 -r -R q
 ./run --open-file /mnt/a/direct_sym104 -r -a -t -W p
 ./run --open-file /mnt/a/direct_sym104 -r -R p
***
*** ./run --ov --ts=0 sym1-creat
***
TEST sym1-creat.py:10: Open(symlink) O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -c -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym100 -r -c -R :xxx:yyy:zzz
TEST sym1-creat.py:19: Open(symlink) O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -c -W q
 ./run --open-file /mnt/a/direct_sym101 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym101 -w -c -W p
 ./run --open-file /mnt/a/direct_sym101 -r -c -R pxxx:yyy:zzz
TEST sym1-creat.py:30: Open(symlink) O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -c -W q
 ./run --open-file /mnt/a/direct_sym102 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym102 -a -c -W p
 ./run --open-file /mnt/a/direct_sym102 -r -c -R :xxx:yyy:zzzqp
TEST sym1-creat.py:41: Open(symlink) O_CREAT|O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -c -W q
 ./run --open-file /mnt/a/direct_sym103 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym103 -r -w -c -W p
 ./run --open-file /mnt/a/direct_sym103 -r -c -R pxxx:yyy:zzz
TEST sym1-creat.py:52: Open(symlink) O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -c -W q
 ./run --open-file /mnt/a/direct_sym104 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym104 -r -a -c -W p
 ./run --open-file /mnt/a/direct_sym104 -r -c -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=1 sym1-creat
***
TEST sym1-creat.py:10: Open(symlink) O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -c -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym100 -r -c -R :xxx:yyy:zzz
TEST sym1-creat.py:19: Open(symlink) O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -c -W q
 ./run --open-file /mnt/a/direct_sym101 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym101 -w -c -W p
 ./run --open-file /mnt/a/direct_sym101 -r -c -R pxxx:yyy:zzz
TEST sym1-creat.py:30: Open(symlink) O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -c -W q
 ./run --open-file /mnt/a/direct_sym102 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym102 -a -c -W p
 ./run --open-file /mnt/a/direct_sym102 -r -c -R :xxx:yyy:zzzqp
TEST sym1-creat.py:41: Open(symlink) O_CREAT|O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -c -W q
 ./run --open-file /mnt/a/direct_sym103 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym103 -r -w -c -W p
 ./run --open-file /mnt/a/direct_sym103 -r -c -R pxxx:yyy:zzz
TEST sym1-creat.py:52: Open(symlink) O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -c -W q
 ./run --open-file /mnt/a/direct_sym104 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym104 -r -a -c -W p
 ./run --open-file /mnt/a/direct_sym104 -r -c -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=0 sym1-creat-excl
***
TEST sym1-creat-excl.py:10: Open(symlink) O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:19: Open(symlink) O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym101 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:28: Open(symlink) O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:37: Open(symlink) O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym103 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:46: Open(symlink) O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=1 sym1-creat-excl
***
TEST sym1-creat-excl.py:10: Open(symlink) O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:19: Open(symlink) O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym101 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:28: Open(symlink) O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:37: Open(symlink) O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym103 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:46: Open(symlink) O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=0 sym2-plain
***
TEST sym2-plain.py:10: Open(symlink->symlink) O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym100 -r -R :xxx:yyy:zzz
TEST sym2-plain.py:20: Open(symlink->symlink) O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -W q
 ./run --open-file /mnt/a/indirect_sym101 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym101 -w -W p
 ./run --open-file /mnt/a/indirect_sym101 -r -R pxxx:yyy:zzz
TEST sym2-plain.py:32: Open(symlink->symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -W q
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym102 -a -W p
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzzqp
TEST sym2-plain.py:44: Open(symlink->symlink) O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -W q
 ./run --open-file /mnt/a/indirect_sym103 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym103 -r -w -W p
 ./run --open-file /mnt/a/indirect_sym103 -r -R pxxx:yyy:zzz
TEST sym2-plain.py:56: Open(symlink->symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -W q
 ./run --open-file /mnt/a/indirect_sym104 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym104 -r -a -W p
 ./run --open-file /mnt/a/indirect_sym104 -r -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=1 sym2-plain
***
TEST sym2-plain.py:10: Open(symlink->symlink) O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym100 -r -R :xxx:yyy:zzz
TEST sym2-plain.py:20: Open(symlink->symlink) O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -W q
 ./run --open-file /mnt/a/indirect_sym101 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym101 -w -W p
 ./run --open-file /mnt/a/indirect_sym101 -r -R pxxx:yyy:zzz
TEST sym2-plain.py:32: Open(symlink->symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -W q
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym102 -a -W p
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzzqp
TEST sym2-plain.py:44: Open(symlink->symlink) O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -W q
 ./run --open-file /mnt/a/indirect_sym103 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym103 -r -w -W p
 ./run --open-file /mnt/a/indirect_sym103 -r -R pxxx:yyy:zzz
TEST sym2-plain.py:56: Open(symlink->symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -W q
 ./run --open-file /mnt/a/indirect_sym104 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym104 -r -a -W p
 ./run --open-file /mnt/a/indirect_sym104 -r -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=0 sym2-trunc
***
TEST sym2-trunc.py:10: Open(symlink->symlink) O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -t -R 
 ./run --open-file /mnt/a/indirect_sym100 -r -t -R 
TEST sym2-trunc.py:20: Open(symlink->symlink) O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -t -W q
 ./run --open-file /mnt/a/indirect_sym101 -r -R q
 ./run --open-file /mnt/a/indirect_sym101 -w -t -W p
 ./run --open-file /mnt/a/indirect_sym101 -r -R p
TEST sym2-trunc.py:32: Open(symlink->symlink) O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -t -W q
 ./run --open-file /mnt/a/indirect_sym102 -r -R q
 ./run --open-file /mnt/a/indirect_sym102 -a -t -W p
 ./run --open-file /mnt/a/indirect_sym102 -r -R p
TEST sym2-trunc.py:44: Open(symlink->symlink) O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -t -W q
 ./run --open-file /mnt/a/indirect_sym103 -r -R q
 ./run --open-file /mnt/a/indirect_sym103 -r -w -t -W p
 ./run --open-file /mnt/a/indirect_sym103 -r -R p
TEST sym2-trunc.py:56: Open(symlink->symlink) O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -t -W q
 ./run --open-file /mnt/a/indirect_sym104 -r -R q
 ./run --open-file /mnt/a/indirect_sym104 -r -a -t -W p
 ./run --open-file /mnt/a/indirect_sym104 -r -R p
***
*** ./run --ov --ts=1 sym2-trunc
***
TEST sym2-trunc.py:10: Open(symlink->symlink) O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -t -R 
 ./run --open-file /mnt/a/indirect_sym100 -r -t -R 
TEST sym2-trunc.py:20: Open(symlink->symlink) O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -t -W q
 ./run --open-file /mnt/a/indirect_sym101 -r -R q
 ./run --open-file /mnt/a/indirect_sym101 -w -t -W p
 ./run --open-file /mnt/a/indirect_sym101 -r -R p
TEST sym2-trunc.py:32: Open(symlink->symlink) O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -t -W q
 ./run --open-file /mnt/a/indirect_sym102 -r -R q
 ./run --open-file /mnt/a/indirect_sym102 -a -t -W p
 ./run --open-file /mnt/a/indirect_sym102 -r -R p
TEST sym2-trunc.py:44: Open(symlink->symlink) O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -t -W q
 ./run --open-file /mnt/a/indirect_sym103 -r -R q
 ./run --open-file /mnt/a/indirect_sym103 -r -w -t -W p
 ./run --open-file /mnt/a/indirect_sym103 -r -R p
TEST sym2-trunc.py:56: Open(symlink->symlink) O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -t -W q
 ./run --open-file /mnt/a/indirect_sym104 -r -R q
 ./run --open-file /mnt/a/indirect_sym104 -r -a -t -W p
 ./run --open-file /mnt/a/indirect_sym104 -r -R p
***
*** ./run --ov --ts=0 sym2-creat
***
TEST sym2-creat.py:10: Open(symlink->symlink) O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -c -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym100 -r -c -R :xxx:yyy:zzz
TEST sym2-creat.py:20: Open(symlink->symlink) O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -c -W q
 ./run --open-file /mnt/a/indirect_sym101 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym101 -w -c -W p
 ./run --open-file /mnt/a/indirect_sym101 -r -c -R pxxx:yyy:zzz
TEST sym2-creat.py:32: Open(symlink->symlink) O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -c -W q
 ./run --open-file /mnt/a/indirect_sym102 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym102 -a -c -W p
 ./run --open-file /mnt/a/indirect_sym102 -r -c -R :xxx:yyy:zzzqp
TEST sym2-creat.py:44: Open(symlink->symlink) O_CREAT|O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -c -W q
 ./run --open-file /mnt/a/indirect_sym103 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym103 -r -w -c -W p
 ./run --open-file /mnt/a/indirect_sym103 -r -c -R pxxx:yyy:zzz
TEST sym2-creat.py:56: Open(symlink->symlink) O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -c -W q
 ./run --open-file /mnt/a/indirect_sym104 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym104 -r -a -c -W p
 ./run --open-file /mnt/a/indirect_sym104 -r -c -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=1 sym2-creat
***
TEST sym2-creat.py:10: Open(symlink->symlink) O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -c -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym100 -r -c -R :xxx:yyy:zzz
TEST sym2-creat.py:20: Open(symlink->symlink) O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -c -W q
 ./run --open-file /mnt/a/indirect_sym101 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym101 -w -c -W p
 ./run --open-file /mnt/a/indirect_sym101 -r -c -R pxxx:yyy:zzz
TEST sym2-creat.py:32: Open(symlink->symlink) O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -c -W q
 ./run --open-file /mnt/a/indirect_sym102 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym102 -a -c -W p
 ./run --open-file /mnt/a/indirect_sym102 -r -c -R :xxx:yyy:zzzqp
TEST sym2-creat.py:44: Open(symlink->symlink) O_CREAT|O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -c -W q
 ./run --open-file /mnt/a/indirect_sym103 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym103 -r -w -c -W p
 ./run --open-file /mnt/a/indirect_sym103 -r -c -R pxxx:yyy:zzz
TEST sym2-creat.py:56: Open(symlink->symlink) O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -c -W q
 ./run --open-file /mnt/a/indirect_sym104 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym104 -r -a -c -W p
 ./run --open-file /mnt/a/indirect_sym104 -r -c -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=0 sym2-creat-excl
***
TEST sym2-creat-excl.py:10: Open(symlink->symlink) O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym100 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:20: Open(symlink->symlink) O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym101 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:30: Open(symlink->symlink) O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:40: Open(symlink->symlink) O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym103 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:50: Open(symlink->symlink) O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=1 sym2-creat-excl
***
TEST sym2-creat-excl.py:10: Open(symlink->symlink) O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym100 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:20: Open(symlink->symlink) O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym101 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:30: Open(symlink->symlink) O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:40: Open(symlink->symlink) O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym103 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:50: Open(symlink->symlink) O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=0 symx-plain
***
TEST symx-plain.py:10: Open(broken) O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
TEST symx-plain.py:19: Open(broken) O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -r -E ENOENT
TEST symx-plain.py:28: Open(broken) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
TEST symx-plain.py:37: Open(broken) O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -E ENOENT
 ./run --open-file /mnt/a/no_foo103 -r -E ENOENT
TEST symx-plain.py:46: Open(broken) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -E ENOENT
 ./run --open-file /mnt/a/no_foo104 -r -E ENOENT
***
*** ./run --ov --ts=1 symx-plain
***
TEST symx-plain.py:10: Open(broken) O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
TEST symx-plain.py:19: Open(broken) O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -r -E ENOENT
TEST symx-plain.py:28: Open(broken) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
TEST symx-plain.py:37: Open(broken) O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -E ENOENT
 ./run --open-file /mnt/a/no_foo103 -r -E ENOENT
TEST symx-plain.py:46: Open(broken) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -E ENOENT
 ./run --open-file /mnt/a/no_foo104 -r -E ENOENT
***
*** ./run --ov --ts=0 symx-trunc
***
TEST symx-trunc.py:10: Open(broken) O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -t -E ENOENT
TEST symx-trunc.py:18: Open(broken) O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -t -E ENOENT
TEST symx-trunc.py:26: Open(broken) O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -t -E ENOENT
TEST symx-trunc.py:34: Open(broken) O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -t -E ENOENT
TEST symx-trunc.py:42: Open(broken) O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -t -E ENOENT
***
*** ./run --ov --ts=1 symx-trunc
***
TEST symx-trunc.py:10: Open(broken) O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -t -E ENOENT
TEST symx-trunc.py:18: Open(broken) O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -t -E ENOENT
TEST symx-trunc.py:26: Open(broken) O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -t -E ENOENT
TEST symx-trunc.py:34: Open(broken) O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -t -E ENOENT
TEST symx-trunc.py:42: Open(broken) O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -t -E ENOENT
***
*** ./run --ov --ts=0 symx-creat
***
TEST symx-creat.py:10: Open(broken) O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -c -R 
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST symx-creat.py:19: Open(broken) O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -c -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST symx-creat.py:28: Open(broken) O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -c -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST symx-creat.py:37: Open(broken) O_CREAT|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -c -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST symx-creat.py:46: Open(broken) O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -c -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=1 symx-creat
***
TEST symx-creat.py:10: Open(broken) O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -c -R 
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST symx-creat.py:19: Open(broken) O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -c -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST symx-creat.py:28: Open(broken) O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -c -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST symx-creat.py:37: Open(broken) O_CREAT|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -c -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST symx-creat.py:46: Open(broken) O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -c -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=0 symx-creat-excl
***
TEST symx-creat-excl.py:10: Open(broken) O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -c -e -E EEXIST
TEST symx-creat-excl.py:18: Open(broken) O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -c -e -E EEXIST
TEST symx-creat-excl.py:26: Open(broken) O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -c -e -E EEXIST
TEST symx-creat-excl.py:34: Open(broken) O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -c -e -E EEXIST
TEST symx-creat-excl.py:42: Open(broken) O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -c -e -E EEXIST
***
*** ./run --ov --ts=1 symx-creat-excl
***
TEST symx-creat-excl.py:10: Open(broken) O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -c -e -E EEXIST
TEST symx-creat-excl.py:18: Open(broken) O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -c -e -E EEXIST
TEST symx-creat-excl.py:26: Open(broken) O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -c -e -E EEXIST
TEST symx-creat-excl.py:34: Open(broken) O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -c -e -E EEXIST
TEST symx-creat-excl.py:42: Open(broken) O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -c -e -E EEXIST
***
*** ./run --ov --ts=0 symx-creat-trunc
***
TEST symx-creat-trunc.py:10: Open(broken) O_CREAT|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -c -t -R 
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST symx-creat-trunc.py:19: Open(broken) O_CREAT|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -c -t -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST symx-creat-trunc.py:28: Open(broken) O_CREAT|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -c -t -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST symx-creat-trunc.py:37: Open(broken) O_CREAT|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -c -t -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST symx-creat-trunc.py:46: Open(broken) O_CREAT|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -c -t -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=1 symx-creat-trunc
***
TEST symx-creat-trunc.py:10: Open(broken) O_CREAT|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -c -t -R 
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST symx-creat-trunc.py:19: Open(broken) O_CREAT|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -c -t -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST symx-creat-trunc.py:28: Open(broken) O_CREAT|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -c -t -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST symx-creat-trunc.py:37: Open(broken) O_CREAT|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -c -t -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST symx-creat-trunc.py:46: Open(broken) O_CREAT|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -c -t -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=0 truncate
***
TEST truncate.py:9: Truncate file
 ./run --truncate /mnt/a/foo100 0
 ./run --truncate /mnt/a/foo101 1
 ./run --open-file /mnt/a/foo101 -r -R :
 ./run --truncate /mnt/a/foo102 2
 ./run --open-file /mnt/a/foo102 -r -R :x
 ./run --truncate /mnt/a/foo103 3
 ./run --open-file /mnt/a/foo103 -r -R :xx
 ./run --truncate /mnt/a/foo104 4
 ./run --open-file /mnt/a/foo104 -r -R :xxx
 ./run --truncate /mnt/a/foo105 5
 ./run --open-file /mnt/a/foo105 -r -R :xxx:
 ./run --truncate /mnt/a/foo106 6
 ./run --open-file /mnt/a/foo106 -r -R :xxx:y
 ./run --truncate /mnt/a/foo107 7
 ./run --open-file /mnt/a/foo107 -r -R :xxx:yy
 ./run --truncate /mnt/a/foo108 8
 ./run --open-file /mnt/a/foo108 -r -R :xxx:yyy
 ./run --truncate /mnt/a/foo109 9
 ./run --open-file /mnt/a/foo109 -r -R :xxx:yyy:
 ./run --truncate /mnt/a/foo110 10
 ./run --open-file /mnt/a/foo110 -r -R :xxx:yyy:z
 ./run --truncate /mnt/a/foo111 11
 ./run --open-file /mnt/a/foo111 -r -R :xxx:yyy:zz
 ./run --truncate /mnt/a/foo112 12
 ./run --open-file /mnt/a/foo112 -r -R :xxx:yyy:zzz
 ./run --truncate /mnt/a/foo113 13
 ./run --open-file /mnt/a/foo113 -r -R :xxx:yyy:zzz\0
 ./run --truncate /mnt/a/foo114 14
 ./run --open-file /mnt/a/foo114 -r -R :xxx:yyy:zzz\0\0
 ./run --truncate /mnt/a/foo115 15
 ./run --open-file /mnt/a/foo115 -r -R :xxx:yyy:zzz\0\0\0
 ./run --truncate /mnt/a/foo116 16
 ./run --open-file /mnt/a/foo116 -r -R :xxx:yyy:zzz\0\0\0\0
 ./run --truncate /mnt/a/foo117 17
 ./run --open-file /mnt/a/foo117 -r -R :xxx:yyy:zzz\0\0\0\0\0
 ./run --truncate /mnt/a/foo118 18
 ./run --open-file /mnt/a/foo118 -r -R :xxx:yyy:zzz\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo119 19
 ./run --open-file /mnt/a/foo119 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo120 20
 ./run --open-file /mnt/a/foo120 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo121 21
 ./run --open-file /mnt/a/foo121 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo122 22
 ./run --open-file /mnt/a/foo122 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo123 23
 ./run --open-file /mnt/a/foo123 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo124 24
 ./run --open-file /mnt/a/foo124 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo125 25
 ./run --open-file /mnt/a/foo125 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo126 26
 ./run --open-file /mnt/a/foo126 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo127 27
 ./run --open-file /mnt/a/foo127 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo128 28
 ./run --open-file /mnt/a/foo128 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
***
*** ./run --ov --ts=1 truncate
***
TEST truncate.py:9: Truncate file
 ./run --truncate /mnt/a/foo100 0
 ./run --truncate /mnt/a/foo101 1
 ./run --open-file /mnt/a/foo101 -r -R :
 ./run --truncate /mnt/a/foo102 2
 ./run --open-file /mnt/a/foo102 -r -R :x
 ./run --truncate /mnt/a/foo103 3
 ./run --open-file /mnt/a/foo103 -r -R :xx
 ./run --truncate /mnt/a/foo104 4
 ./run --open-file /mnt/a/foo104 -r -R :xxx
 ./run --truncate /mnt/a/foo105 5
 ./run --open-file /mnt/a/foo105 -r -R :xxx:
 ./run --truncate /mnt/a/foo106 6
 ./run --open-file /mnt/a/foo106 -r -R :xxx:y
 ./run --truncate /mnt/a/foo107 7
 ./run --open-file /mnt/a/foo107 -r -R :xxx:yy
 ./run --truncate /mnt/a/foo108 8
 ./run --open-file /mnt/a/foo108 -r -R :xxx:yyy
 ./run --truncate /mnt/a/foo109 9
 ./run --open-file /mnt/a/foo109 -r -R :xxx:yyy:
 ./run --truncate /mnt/a/foo110 10
 ./run --open-file /mnt/a/foo110 -r -R :xxx:yyy:z
 ./run --truncate /mnt/a/foo111 11
 ./run --open-file /mnt/a/foo111 -r -R :xxx:yyy:zz
 ./run --truncate /mnt/a/foo112 12
 ./run --open-file /mnt/a/foo112 -r -R :xxx:yyy:zzz
 ./run --truncate /mnt/a/foo113 13
 ./run --open-file /mnt/a/foo113 -r -R :xxx:yyy:zzz\0
 ./run --truncate /mnt/a/foo114 14
 ./run --open-file /mnt/a/foo114 -r -R :xxx:yyy:zzz\0\0
 ./run --truncate /mnt/a/foo115 15
 ./run --open-file /mnt/a/foo115 -r -R :xxx:yyy:zzz\0\0\0
 ./run --truncate /mnt/a/foo116 16
 ./run --open-file /mnt/a/foo116 -r -R :xxx:yyy:zzz\0\0\0\0
 ./run --truncate /mnt/a/foo117 17
 ./run --open-file /mnt/a/foo117 -r -R :xxx:yyy:zzz\0\0\0\0\0
 ./run --truncate /mnt/a/foo118 18
 ./run --open-file /mnt/a/foo118 -r -R :xxx:yyy:zzz\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo119 19
 ./run --open-file /mnt/a/foo119 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo120 20
 ./run --open-file /mnt/a/foo120 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo121 21
 ./run --open-file /mnt/a/foo121 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo122 22
 ./run --open-file /mnt/a/foo122 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo123 23
 ./run --open-file /mnt/a/foo123 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo124 24
 ./run --open-file /mnt/a/foo124 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo125 25
 ./run --open-file /mnt/a/foo125 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo126 26
 ./run --open-file /mnt/a/foo126 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo127 27
 ./run --open-file /mnt/a/foo127 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo128 28
 ./run --open-file /mnt/a/foo128 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
***
*** ./run --ov --ts=0 dir-open
***
TEST dir-open.py:10: Open O_RDONLY
 ./run --open-file /mnt/a/dir100 -r
 ./run --open-file /mnt/a/dir100 -r
TEST dir-open.py:18: Open O_WRONLY
 ./run --open-file /mnt/a/dir101 -w -E EISDIR
 ./run --open-file /mnt/a/dir101 -r
 ./run --open-file /mnt/a/dir101 -w -E EISDIR
 ./run --open-file /mnt/a/dir101 -r
TEST dir-open.py:28: Open O_WRONLY * 2
 ./run --open-file /mnt/a/dir102 -w -E EISDIR
 ./run --open-file /mnt/a/dir102 -w -E EISDIR
 ./run --open-file /mnt/a/dir102 -r
TEST dir-open.py:37: Open O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/dir103 -a -E EISDIR
 ./run --open-file /mnt/a/dir103 -r
 ./run --open-file /mnt/a/dir103 -a -E EISDIR
 ./run --open-file /mnt/a/dir103 -r
TEST dir-open.py:47: Open O_RDWR
 ./run --open-file /mnt/a/dir104 -r -w -E EISDIR
 ./run --open-file /mnt/a/dir104 -r
 ./run --open-file /mnt/a/dir104 -r -w -E EISDIR
 ./run --open-file /mnt/a/dir104 -r
TEST dir-open.py:57: Open O_APPEND|O_RDWR
 ./run --open-file /mnt/a/dir105 -r -a -E EISDIR
 ./run --open-file /mnt/a/dir105 -r
 ./run --open-file /mnt/a/dir105 -r -a -E EISDIR
 ./run --open-file /mnt/a/dir105 -r
***
*** ./run --ov --ts=1 dir-open
***
TEST dir-open.py:10: Open O_RDONLY
 ./run --open-file /mnt/a/dir100 -r
 ./run --open-file /mnt/a/dir100 -r
TEST dir-open.py:18: Open O_WRONLY
 ./run --open-file /mnt/a/dir101 -w -E EISDIR
 ./run --open-file /mnt/a/dir101 -r
 ./run --open-file /mnt/a/dir101 -w -E EISDIR
 ./run --open-file /mnt/a/dir101 -r
TEST dir-open.py:28: Open O_WRONLY * 2
 ./run --open-file /mnt/a/dir102 -w -E EISDIR
 ./run --open-file /mnt/a/dir102 -w -E EISDIR
 ./run --open-file /mnt/a/dir102 -r
TEST dir-open.py:37: Open O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/dir103 -a -E EISDIR
 ./run --open-file /mnt/a/dir103 -r
 ./run --open-file /mnt/a/dir103 -a -E EISDIR
 ./run --open-file /mnt/a/dir103 -r
TEST dir-open.py:47: Open O_RDWR
 ./run --open-file /mnt/a/dir104 -r -w -E EISDIR
 ./run --open-file /mnt/a/dir104 -r
 ./run --open-file /mnt/a/dir104 -r -w -E EISDIR
 ./run --open-file /mnt/a/dir104 -r
TEST dir-open.py:57: Open O_APPEND|O_RDWR
 ./run --open-file /mnt/a/dir105 -r -a -E EISDIR
 ./run --open-file /mnt/a/dir105 -r
 ./run --open-file /mnt/a/dir105 -r -a -E EISDIR
 ./run --open-file /mnt/a/dir105 -r
***
*** ./run --ov --ts=0 dir-weird-open
***
TEST dir-weird-open.py:10: Open O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir100 -r -c -E EISDIR
 ./run --open-file /mnt/a/dir100 -r
TEST dir-weird-open.py:18: Open O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir101 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/dir101 -r
TEST dir-weird-open.py:26: Open O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir102 -r -t -E EISDIR
 ./run --open-file /mnt/a/dir102 -r
TEST dir-weird-open.py:34: Open O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir103 -r -c -t -E EISDIR
 ./run --open-file /mnt/a/dir103 -r
TEST dir-weird-open.py:42: Open O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir104 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir104 -r
TEST dir-weird-open.py:50: Open O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir105 -w -c -E EISDIR
 ./run --open-file /mnt/a/dir105 -r
TEST dir-weird-open.py:58: Open O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir106 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/dir106 -r
TEST dir-weird-open.py:66: Open O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir107 -w -t -E EISDIR
 ./run --open-file /mnt/a/dir107 -r
TEST dir-weird-open.py:74: Open O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir108 -w -c -t -E EISDIR
 ./run --open-file /mnt/a/dir108 -r
TEST dir-weird-open.py:82: Open O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir109 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir109 -r
***
*** ./run --ov --ts=1 dir-weird-open
***
TEST dir-weird-open.py:10: Open O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir100 -r -c -E EISDIR
 ./run --open-file /mnt/a/dir100 -r
TEST dir-weird-open.py:18: Open O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir101 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/dir101 -r
TEST dir-weird-open.py:26: Open O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir102 -r -t -E EISDIR
 ./run --open-file /mnt/a/dir102 -r
TEST dir-weird-open.py:34: Open O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir103 -r -c -t -E EISDIR
 ./run --open-file /mnt/a/dir103 -r
TEST dir-weird-open.py:42: Open O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir104 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir104 -r
TEST dir-weird-open.py:50: Open O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir105 -w -c -E EISDIR
 ./run --open-file /mnt/a/dir105 -r
TEST dir-weird-open.py:58: Open O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir106 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/dir106 -r
TEST dir-weird-open.py:66: Open O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir107 -w -t -E EISDIR
 ./run --open-file /mnt/a/dir107 -r
TEST dir-weird-open.py:74: Open O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir108 -w -c -t -E EISDIR
 ./run --open-file /mnt/a/dir108 -r
TEST dir-weird-open.py:82: Open O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir109 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir109 -r
***
*** ./run --ov --ts=0 dir-open-dir
***
TEST dir-open-dir.py:10: Open O_DIRECTORY | O_RDONLY
 ./run --open-file /mnt/a/dir100 -r -d
 ./run --open-file /mnt/a/dir100 -r -d
TEST dir-open-dir.py:18: Open O_DIRECTORY | O_WRONLY
 ./run --open-file /mnt/a/dir101 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir101 -r -d
 ./run --open-file /mnt/a/dir101 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir101 -r -d
TEST dir-open-dir.py:28: Open O_DIRECTORY | O_WRONLY * 2
 ./run --open-file /mnt/a/dir102 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir102 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir102 -r -d
TEST dir-open-dir.py:37: Open O_DIRECTORY | O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/dir103 -a -d -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
 ./run --open-file /mnt/a/dir103 -a -d -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
TEST dir-open-dir.py:47: Open O_DIRECTORY | O_RDWR
 ./run --open-file /mnt/a/dir104 -r -w -d -E EISDIR
 ./run --open-file /mnt/a/dir104 -r -d
 ./run --open-file /mnt/a/dir104 -r -w -d -E EISDIR
 ./run --open-file /mnt/a/dir104 -r -d
TEST dir-open-dir.py:57: Open O_DIRECTORY | O_APPEND|O_RDWR
 ./run --open-file /mnt/a/dir105 -r -a -d -E EISDIR
 ./run --open-file /mnt/a/dir105 -r -d
 ./run --open-file /mnt/a/dir105 -r -a -d -E EISDIR
 ./run --open-file /mnt/a/dir105 -r -d
***
*** ./run --ov --ts=1 dir-open-dir
***
TEST dir-open-dir.py:10: Open O_DIRECTORY | O_RDONLY
 ./run --open-file /mnt/a/dir100 -r -d
 ./run --open-file /mnt/a/dir100 -r -d
TEST dir-open-dir.py:18: Open O_DIRECTORY | O_WRONLY
 ./run --open-file /mnt/a/dir101 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir101 -r -d
 ./run --open-file /mnt/a/dir101 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir101 -r -d
TEST dir-open-dir.py:28: Open O_DIRECTORY | O_WRONLY * 2
 ./run --open-file /mnt/a/dir102 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir102 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir102 -r -d
TEST dir-open-dir.py:37: Open O_DIRECTORY | O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/dir103 -a -d -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
 ./run --open-file /mnt/a/dir103 -a -d -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
TEST dir-open-dir.py:47: Open O_DIRECTORY | O_RDWR
 ./run --open-file /mnt/a/dir104 -r -w -d -E EISDIR
 ./run --open-file /mnt/a/dir104 -r -d
 ./run --open-file /mnt/a/dir104 -r -w -d -E EISDIR
 ./run --open-file /mnt/a/dir104 -r -d
TEST dir-open-dir.py:57: Open O_DIRECTORY | O_APPEND|O_RDWR
 ./run --open-file /mnt/a/dir105 -r -a -d -E EISDIR
 ./run --open-file /mnt/a/dir105 -r -d
 ./run --open-file /mnt/a/dir105 -r -a -d -E EISDIR
 ./run --open-file /mnt/a/dir105 -r -d
***
*** ./run --ov --ts=0 dir-weird-open-dir
***
TEST dir-weird-open-dir.py:10: Open O_DIRECTORY | O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir100 -r -d -c -E EISDIR
 ./run --open-file /mnt/a/dir100 -r -d
TEST dir-weird-open-dir.py:18: Open O_DIRECTORY | O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir101 -r -d -c -e -E EEXIST
 ./run --open-file /mnt/a/dir101 -r -d
TEST dir-weird-open-dir.py:26: Open O_DIRECTORY | O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir102 -r -d -t -E EISDIR
 ./run --open-file /mnt/a/dir102 -r -d
TEST dir-weird-open-dir.py:34: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir103 -r -d -c -t -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
TEST dir-weird-open-dir.py:42: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir104 -r -d -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir104 -r -d
TEST dir-weird-open-dir.py:50: Open O_DIRECTORY | O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir105 -w -d -c -E EISDIR
 ./run --open-file /mnt/a/dir105 -r -d
TEST dir-weird-open-dir.py:58: Open O_DIRECTORY | O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir106 -w -d -c -e -E EEXIST
 ./run --open-file /mnt/a/dir106 -r -d
TEST dir-weird-open-dir.py:66: Open O_DIRECTORY | O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir107 -w -d -t -E EISDIR
 ./run --open-file /mnt/a/dir107 -r -d
TEST dir-weird-open-dir.py:74: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir108 -w -d -c -t -E EISDIR
 ./run --open-file /mnt/a/dir108 -r -d
TEST dir-weird-open-dir.py:82: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir109 -w -d -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir109 -r -d
***
*** ./run --ov --ts=1 dir-weird-open-dir
***
TEST dir-weird-open-dir.py:10: Open O_DIRECTORY | O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir100 -r -d -c -E EISDIR
 ./run --open-file /mnt/a/dir100 -r -d
TEST dir-weird-open-dir.py:18: Open O_DIRECTORY | O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir101 -r -d -c -e -E EEXIST
 ./run --open-file /mnt/a/dir101 -r -d
TEST dir-weird-open-dir.py:26: Open O_DIRECTORY | O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir102 -r -d -t -E EISDIR
 ./run --open-file /mnt/a/dir102 -r -d
TEST dir-weird-open-dir.py:34: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir103 -r -d -c -t -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
TEST dir-weird-open-dir.py:42: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir104 -r -d -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir104 -r -d
TEST dir-weird-open-dir.py:50: Open O_DIRECTORY | O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir105 -w -d -c -E EISDIR
 ./run --open-file /mnt/a/dir105 -r -d
TEST dir-weird-open-dir.py:58: Open O_DIRECTORY | O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir106 -w -d -c -e -E EEXIST
 ./run --open-file /mnt/a/dir106 -r -d
TEST dir-weird-open-dir.py:66: Open O_DIRECTORY | O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir107 -w -d -t -E EISDIR
 ./run --open-file /mnt/a/dir107 -r -d
TEST dir-weird-open-dir.py:74: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir108 -w -d -c -t -E EISDIR
 ./run --open-file /mnt/a/dir108 -r -d
TEST dir-weird-open-dir.py:82: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir109 -w -d -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir109 -r -d
***
*** ./run --ov --ts=0 dir-sym1-open
***
TEST dir-sym1-open.py:10: Open(dir symlink) O_RDONLY
 ./run --open-file /mnt/a/direct_dir_sym100 -r
 ./run --open-file /mnt/a/direct_dir_sym100 -r
TEST dir-sym1-open.py:19: Open(dir symlink) O_WRONLY
 ./run --open-file /mnt/a/direct_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym101 -r
 ./run --open-file /mnt/a/direct_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym101 -r
TEST dir-sym1-open.py:30: Open(dir symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym102 -r
 ./run --open-file /mnt/a/direct_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym102 -r
TEST dir-sym1-open.py:41: Open(dir symlink) O_RDWR
 ./run --open-file /mnt/a/direct_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym103 -r
 ./run --open-file /mnt/a/direct_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym103 -r
TEST dir-sym1-open.py:52: Open(dir symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym104 -r
 ./run --open-file /mnt/a/direct_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym104 -r
***
*** ./run --ov --ts=1 dir-sym1-open
***
TEST dir-sym1-open.py:10: Open(dir symlink) O_RDONLY
 ./run --open-file /mnt/a/direct_dir_sym100 -r
 ./run --open-file /mnt/a/direct_dir_sym100 -r
TEST dir-sym1-open.py:19: Open(dir symlink) O_WRONLY
 ./run --open-file /mnt/a/direct_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym101 -r
 ./run --open-file /mnt/a/direct_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym101 -r
TEST dir-sym1-open.py:30: Open(dir symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym102 -r
 ./run --open-file /mnt/a/direct_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym102 -r
TEST dir-sym1-open.py:41: Open(dir symlink) O_RDWR
 ./run --open-file /mnt/a/direct_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym103 -r
 ./run --open-file /mnt/a/direct_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym103 -r
TEST dir-sym1-open.py:52: Open(dir symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym104 -r
 ./run --open-file /mnt/a/direct_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym104 -r
***
*** ./run --ov --ts=0 dir-sym1-weird-open
***
TEST dir-sym1-weird-open.py:11: Open(dir symlink) O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym100 -r -c -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym100 -r
TEST dir-sym1-weird-open.py:20: Open(dir symlink) O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym101 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym101 -r
TEST dir-sym1-weird-open.py:29: Open(dir symlink) O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/direct_dir_sym102 -r -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym102 -r
TEST dir-sym1-weird-open.py:38: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym103 -r -c -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym103 -r
TEST dir-sym1-weird-open.py:47: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym104 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym104 -r
TEST dir-sym1-weird-open.py:56: Open(dir symlink) O_WRONLY | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym105 -w -c -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym105 -r
TEST dir-sym1-weird-open.py:65: Open(dir symlink) O_WRONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym106 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym106 -r
TEST dir-sym1-weird-open.py:74: Open(dir symlink) O_WRONLY | O_TRUNC
 ./run --open-file /mnt/a/direct_dir_sym107 -w -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym107 -r
TEST dir-sym1-weird-open.py:83: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym108 -w -c -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym108 -r
TEST dir-sym1-weird-open.py:92: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym109 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym109 -r
***
*** ./run --ov --ts=1 dir-sym1-weird-open
***
TEST dir-sym1-weird-open.py:11: Open(dir symlink) O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym100 -r -c -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym100 -r
TEST dir-sym1-weird-open.py:20: Open(dir symlink) O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym101 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym101 -r
TEST dir-sym1-weird-open.py:29: Open(dir symlink) O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/direct_dir_sym102 -r -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym102 -r
TEST dir-sym1-weird-open.py:38: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym103 -r -c -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym103 -r
TEST dir-sym1-weird-open.py:47: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym104 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym104 -r
TEST dir-sym1-weird-open.py:56: Open(dir symlink) O_WRONLY | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym105 -w -c -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym105 -r
TEST dir-sym1-weird-open.py:65: Open(dir symlink) O_WRONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym106 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym106 -r
TEST dir-sym1-weird-open.py:74: Open(dir symlink) O_WRONLY | O_TRUNC
 ./run --open-file /mnt/a/direct_dir_sym107 -w -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym107 -r
TEST dir-sym1-weird-open.py:83: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym108 -w -c -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym108 -r
TEST dir-sym1-weird-open.py:92: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym109 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym109 -r
***
*** ./run --ov --ts=0 dir-sym2-open
***
TEST dir-sym2-open.py:10: Open(dir symlink) O_RDONLY
 ./run --open-file /mnt/a/indirect_dir_sym100 -r
 ./run --open-file /mnt/a/indirect_dir_sym100 -r
TEST dir-sym2-open.py:20: Open(dir symlink) O_WRONLY
 ./run --open-file /mnt/a/indirect_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym101 -r
 ./run --open-file /mnt/a/indirect_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym101 -r
TEST dir-sym2-open.py:32: Open(dir symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym102 -r
 ./run --open-file /mnt/a/indirect_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym102 -r
TEST dir-sym2-open.py:44: Open(dir symlink) O_RDWR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r
 ./run --open-file /mnt/a/indirect_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r
TEST dir-sym2-open.py:56: Open(dir symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym104 -r
 ./run --open-file /mnt/a/indirect_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym104 -r
***
*** ./run --ov --ts=1 dir-sym2-open
***
TEST dir-sym2-open.py:10: Open(dir symlink) O_RDONLY
 ./run --open-file /mnt/a/indirect_dir_sym100 -r
 ./run --open-file /mnt/a/indirect_dir_sym100 -r
TEST dir-sym2-open.py:20: Open(dir symlink) O_WRONLY
 ./run --open-file /mnt/a/indirect_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym101 -r
 ./run --open-file /mnt/a/indirect_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym101 -r
TEST dir-sym2-open.py:32: Open(dir symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym102 -r
 ./run --open-file /mnt/a/indirect_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym102 -r
TEST dir-sym2-open.py:44: Open(dir symlink) O_RDWR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r
 ./run --open-file /mnt/a/indirect_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r
TEST dir-sym2-open.py:56: Open(dir symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym104 -r
 ./run --open-file /mnt/a/indirect_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym104 -r
***
*** ./run --ov --ts=0 dir-sym2-weird-open
***
TEST dir-sym2-weird-open.py:11: Open(dir symlink) O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym100 -r -c -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym100 -r
TEST dir-sym2-weird-open.py:21: Open(dir symlink) O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym101 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym101 -r
TEST dir-sym2-weird-open.py:31: Open(dir symlink) O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/indirect_dir_sym102 -r -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym102 -r
TEST dir-sym2-weird-open.py:41: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym103 -r -c -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r
TEST dir-sym2-weird-open.py:51: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym104 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym104 -r
TEST dir-sym2-weird-open.py:61: Open(dir symlink) O_WRONLY | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym105 -w -c -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym105 -r
TEST dir-sym2-weird-open.py:71: Open(dir symlink) O_WRONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym106 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym106 -r
TEST dir-sym2-weird-open.py:81: Open(dir symlink) O_WRONLY | O_TRUNC
 ./run --open-file /mnt/a/indirect_dir_sym107 -w -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym107 -r
TEST dir-sym2-weird-open.py:91: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym108 -w -c -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym108 -r
TEST dir-sym2-weird-open.py:101: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym109 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym109 -r
***
*** ./run --ov --ts=1 dir-sym2-weird-open
***
TEST dir-sym2-weird-open.py:11: Open(dir symlink) O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym100 -r -c -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym100 -r
TEST dir-sym2-weird-open.py:21: Open(dir symlink) O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym101 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym101 -r
TEST dir-sym2-weird-open.py:31: Open(dir symlink) O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/indirect_dir_sym102 -r -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym102 -r
TEST dir-sym2-weird-open.py:41: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym103 -r -c -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r
TEST dir-sym2-weird-open.py:51: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym104 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym104 -r
TEST dir-sym2-weird-open.py:61: Open(dir symlink) O_WRONLY | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym105 -w -c -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym105 -r
TEST dir-sym2-weird-open.py:71: Open(dir symlink) O_WRONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym106 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym106 -r
TEST dir-sym2-weird-open.py:81: Open(dir symlink) O_WRONLY | O_TRUNC
 ./run --open-file /mnt/a/indirect_dir_sym107 -w -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym107 -r
TEST dir-sym2-weird-open.py:91: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym108 -w -c -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym108 -r
TEST dir-sym2-weird-open.py:101: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym109 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym109 -r
***
*** ./run --ov --ts=0 readlink
***
TEST readlink.py:9: Readlink file
 ./run --readlink /mnt/a/foo100 -E EINVAL
TEST readlink.py:15: Readlink direct symlink to file
 ./run --readlink /mnt/a/direct_sym101 -R ../a/foo101
TEST readlink.py:21: Readlink indirect symlink to file
 ./run --readlink /mnt/a/indirect_sym102 -R direct_sym102
TEST readlink.py:30: Readlink dir
 ./run --readlink /mnt/a/dir103 -E EINVAL
TEST readlink.py:36: Readlink direct symlink to dir
 ./run --readlink /mnt/a/direct_dir_sym104 -R ../a/dir104
TEST readlink.py:42: Readlink indirect symlink to dir
 ./run --readlink /mnt/a/indirect_dir_sym105 -R direct_dir_sym105
TEST readlink.py:51: Readlink absent file
 ./run --readlink /mnt/a/no_foo106 -E ENOENT
TEST readlink.py:57: Readlink broken symlink to absent file
 ./run --readlink /mnt/a/pointless107 -R no_foo107
TEST readlink.py:63: Readlink broken symlink
 ./run --readlink /mnt/a/pointless108 -R no_foo108
TEST readlink.py:69: Readlink absent file pointed to by broken symlink
 ./run --readlink /mnt/a/no_foo109 -E ENOENT
***
*** ./run --ov --ts=1 readlink
***
TEST readlink.py:9: Readlink file
 ./run --readlink /mnt/a/foo100 -E EINVAL
TEST readlink.py:15: Readlink direct symlink to file
 ./run --readlink /mnt/a/direct_sym101 -R ../a/foo101
TEST readlink.py:21: Readlink indirect symlink to file
 ./run --readlink /mnt/a/indirect_sym102 -R direct_sym102
TEST readlink.py:30: Readlink dir
 ./run --readlink /mnt/a/dir103 -E EINVAL
TEST readlink.py:36: Readlink direct symlink to dir
 ./run --readlink /mnt/a/direct_dir_sym104 -R ../a/dir104
TEST readlink.py:42: Readlink indirect symlink to dir
 ./run --readlink /mnt/a/indirect_dir_sym105 -R direct_dir_sym105
TEST readlink.py:51: Readlink absent file
 ./run --readlink /mnt/a/no_foo106 -E ENOENT
TEST readlink.py:57: Readlink broken symlink to absent file
 ./run --readlink /mnt/a/pointless107 -R no_foo107
TEST readlink.py:63: Readlink broken symlink
 ./run --readlink /mnt/a/pointless108 -R no_foo108
TEST readlink.py:69: Readlink absent file pointed to by broken symlink
 ./run --readlink /mnt/a/no_foo109 -E ENOENT
***
*** ./run --ov --ts=0 mkdir
***
TEST mkdir.py:10: Create directory
 ./run --mkdir /mnt/a/no_dir100 0755
 ./run --mkdir /mnt/a/no_dir100 0755 -E EEXIST
TEST mkdir.py:18: Create directory over file
 ./run --mkdir /mnt/a/foo101 0755 -E EEXIST
 ./run --mkdir /mnt/a/foo101 0755 -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST mkdir.py:28: Create directory over empty dir
 ./run --mkdir /mnt/a/empty102 0755 -E EEXIST
TEST mkdir.py:35: Create directory in empty dir
 ./run --mkdir /mnt/a/empty103/sub 0755
 ./run --mkdir /mnt/a/empty103/sub 0755 -E EEXIST
TEST mkdir.py:43: Create directory over dir
 ./run --mkdir /mnt/a/dir104 0755 -E EEXIST
 ./run --open-file /mnt/a/dir104/a -r -R 
TEST mkdir.py:51: Create directory in dir
 ./run --mkdir /mnt/a/dir105/sub 0755
 ./run --mkdir /mnt/a/dir105/sub 0755 -E EEXIST
 ./run --open-file /mnt/a/dir105/a -r -R 
TEST mkdir.py:61: Create directory over sym to file
 ./run --mkdir /mnt/a/direct_sym106 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_sym106 0755 -E EEXIST
 ./run --mkdir /mnt/a/foo106 0755 -E EEXIST
 ./run --open-file /mnt/a/foo106 -r -R :xxx:yyy:zzz
TEST mkdir.py:73: Create directory over sym to sym to file
 ./run --mkdir /mnt/a/indirect_sym107 0755 -E EEXIST
 ./run --mkdir /mnt/a/indirect_sym107 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_sym107 0755 -E EEXIST
 ./run --mkdir /mnt/a/foo107 0755 -E EEXIST
 ./run --open-file /mnt/a/foo107 -r -R :xxx:yyy:zzz
TEST mkdir.py:87: Create directory over sym to dir
 ./run --mkdir /mnt/a/direct_dir_sym108 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_dir_sym108 0755 -E EEXIST
 ./run --mkdir /mnt/a/dir108 0755 -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym108/a -r -R 
 ./run --open-file /mnt/a/dir108/a -r -R 
TEST mkdir.py:99: Create directory over sym to sym to dir
 ./run --mkdir /mnt/a/indirect_dir_sym109 0755 -E EEXIST
 ./run --mkdir /mnt/a/indirect_dir_sym109 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_dir_sym109 0755 -E EEXIST
 ./run --mkdir /mnt/a/dir109 0755 -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym109/a -r -R 
 ./run --open-file /mnt/a/direct_dir_sym109/a -r -R 
 ./run --open-file /mnt/a/dir109/a -r -R 
TEST mkdir.py:114: Create directory over dangling sym
 ./run --mkdir /mnt/a/pointless110 0755 -E EEXIST
 ./run --mkdir /mnt/a/pointless110 0755 -E EEXIST
***
*** ./run --ov --ts=1 mkdir
***
TEST mkdir.py:10: Create directory
 ./run --mkdir /mnt/a/no_dir100 0755
 ./run --mkdir /mnt/a/no_dir100 0755 -E EEXIST
TEST mkdir.py:18: Create directory over file
 ./run --mkdir /mnt/a/foo101 0755 -E EEXIST
 ./run --mkdir /mnt/a/foo101 0755 -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST mkdir.py:28: Create directory over empty dir
 ./run --mkdir /mnt/a/empty102 0755 -E EEXIST
TEST mkdir.py:35: Create directory in empty dir
 ./run --mkdir /mnt/a/empty103/sub 0755
 ./run --mkdir /mnt/a/empty103/sub 0755 -E EEXIST
TEST mkdir.py:43: Create directory over dir
 ./run --mkdir /mnt/a/dir104 0755 -E EEXIST
 ./run --open-file /mnt/a/dir104/a -r -R 
TEST mkdir.py:51: Create directory in dir
 ./run --mkdir /mnt/a/dir105/sub 0755
 ./run --mkdir /mnt/a/dir105/sub 0755 -E EEXIST
 ./run --open-file /mnt/a/dir105/a -r -R 
TEST mkdir.py:61: Create directory over sym to file
 ./run --mkdir /mnt/a/direct_sym106 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_sym106 0755 -E EEXIST
 ./run --mkdir /mnt/a/foo106 0755 -E EEXIST
 ./run --open-file /mnt/a/foo106 -r -R :xxx:yyy:zzz
TEST mkdir.py:73: Create directory over sym to sym to file
 ./run --mkdir /mnt/a/indirect_sym107 0755 -E EEXIST
 ./run --mkdir /mnt/a/indirect_sym107 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_sym107 0755 -E EEXIST
 ./run --mkdir /mnt/a/foo107 0755 -E EEXIST
 ./run --open-file /mnt/a/foo107 -r -R :xxx:yyy:zzz
TEST mkdir.py:87: Create directory over sym to dir
 ./run --mkdir /mnt/a/direct_dir_sym108 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_dir_sym108 0755 -E EEXIST
 ./run --mkdir /mnt/a/dir108 0755 -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym108/a -r -R 
 ./run --open-file /mnt/a/dir108/a -r -R 
TEST mkdir.py:99: Create directory over sym to sym to dir
 ./run --mkdir /mnt/a/indirect_dir_sym109 0755 -E EEXIST
 ./run --mkdir /mnt/a/indirect_dir_sym109 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_dir_sym109 0755 -E EEXIST
 ./run --mkdir /mnt/a/dir109 0755 -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym109/a -r -R 
 ./run --open-file /mnt/a/direct_dir_sym109/a -r -R 
 ./run --open-file /mnt/a/dir109/a -r -R 
TEST mkdir.py:114: Create directory over dangling sym
 ./run --mkdir /mnt/a/pointless110 0755 -E EEXIST
 ./run --mkdir /mnt/a/pointless110 0755 -E EEXIST
***
*** ./run --ov --ts=0 rmdir
***
TEST rmdir.py:10: Remove nonexistent directory
 ./run --rmdir /mnt/a/no_dir100 -E ENOENT
 ./run --rmdir /mnt/a/no_dir100 -E ENOENT
TEST rmdir.py:18: Remove subdir from nonexistent directory
 ./run --rmdir /mnt/a/no_dir101/sub -E ENOENT
 ./run --rmdir /mnt/a/no_dir101/sub -E ENOENT
TEST rmdir.py:26: Remove-dir a file
 ./run --rmdir /mnt/a/foo102 -E ENOTDIR
 ./run --rmdir /mnt/a/foo102 -E ENOTDIR
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST rmdir.py:36: Remove subdir from file
 ./run --rmdir /mnt/a/foo103/sub -E ENOTDIR
 ./run --rmdir /mnt/a/foo103/sub -E ENOTDIR
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST rmdir.py:46: Remove empty dir
 ./run --rmdir /mnt/a/empty104
 ./run --rmdir /mnt/a/empty104 -E ENOENT
 ./run --rmdir /mnt/a/empty104/sub -E ENOENT
TEST rmdir.py:56: Remove directory from empty dir
 ./run --rmdir /mnt/a/empty105/sub -E ENOENT
 ./run --rmdir /mnt/a/empty105/sub -E ENOENT
TEST rmdir.py:64: Remove populated directory
 ./run --rmdir /mnt/a/dir106 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir106/a -r -R 
 ./run --unlink /mnt/a/dir106/a
 ./run --open-file /mnt/a/dir106/a -r -E ENOENT
 ./run --unlink /mnt/a/dir106/a -E ENOENT
- rmtree /mnt/a/dir106
 ./run --open-file /mnt/a/dir106/a -r -R  -E ENOENT
TEST rmdir.py:78: Remove populated directory with created file
 ./run --open-file /mnt/a/empty107/b -w -c -e -W abcq
 ./run --rmdir /mnt/a/empty107 -E ENOTEMPTY
 ./run --unlink /mnt/a/empty107/b
 ./run --open-file /mnt/a/empty107/b -r -E ENOENT
 ./run --unlink /mnt/a/empty107/b -E ENOENT
- rmtree /mnt/a/empty107
 ./run --open-file /mnt/a/empty107/b -r -R  -E ENOENT
TEST rmdir.py:92: Remove populated directory with copied up file
 ./run --rmdir /mnt/a/dir108 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir108/a -r -R 
 ./run --open-file /mnt/a/dir108/a -w -W abcd
 ./run --open-file /mnt/a/dir108/a -r -R abcd
 ./run --unlink /mnt/a/dir108/a
 ./run --open-file /mnt/a/dir108/a -r -E ENOENT
 ./run --unlink /mnt/a/dir108/a -E ENOENT
- rmtree /mnt/a/dir108
 ./run --open-file /mnt/a/dir108/a -r -R  -E ENOENT
TEST rmdir.py:108: Remove populated directory with mkdir after unlink
 ./run --rmdir /mnt/a/dir109 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir109/a -r -R 
 ./run --rmdir /mnt/a/dir109 -E ENOTEMPTY
 ./run --unlink /mnt/a/dir109/a
 ./run --open-file /mnt/a/dir109/a -r -E ENOENT
 ./run --unlink /mnt/a/dir109/a -E ENOENT
 ./run --mkdir /mnt/a/dir109/a 0755
 ./run --mkdir /mnt/a/dir109/a 0755 -E EEXIST
 ./run --rmdir /mnt/a/dir109 -E ENOTEMPTY
 ./run --rmdir /mnt/a/dir109/a
 ./run --rmdir /mnt/a/dir109/a -E ENOENT
- rmtree /mnt/a/dir109
 ./run --open-file /mnt/a/dir109/a -r -R  -E ENOENT
TEST rmdir.py:131: Remove directory from dir
 ./run --rmdir /mnt/a/dir110/pop/c
 ./run --rmdir /mnt/a/dir110/pop/c -E ENOENT
 ./run --mkdir /mnt/a/dir110/pop/c 0755
 ./run --mkdir /mnt/a/dir110/pop/c 0755 -E EEXIST
 ./run --open-file /mnt/a/dir110/pop/b -r -R :aaa:bbb:ccc
- rmtree /mnt/a/dir110
 ./run --open-file /mnt/a/dir110/pop/b -r -E ENOENT
TEST rmdir.py:148: Remove-dir symlinks to file
 ./run --rmdir /mnt/a/indirect_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/indirect_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/foo111 -E ENOTDIR
 ./run --rmdir /mnt/a/foo111 -E ENOTDIR
 ./run --open-file /mnt/a/foo111 -r -R :xxx:yyy:zzz
TEST rmdir.py:164: Remove directory over sym to dir
 ./run --rmdir /mnt/a/direct_dir_sym112 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_dir_sym112 -E ENOTDIR
 ./run --rmdir /mnt/a/dir112 -E ENOTEMPTY
 ./run --open-file /mnt/a/direct_dir_sym112/a -r -R 
 ./run --open-file /mnt/a/dir112/a -r -R 
- rmtree /mnt/a/dir112
 ./run --open-file /mnt/a/direct_dir_sym112/a -r -E ENOENT
 ./run --open-file /mnt/a/dir112/a -r -E ENOENT
TEST rmdir.py:179: Remove directory over sym to sym to dir
 ./run --rmdir /mnt/a/indirect_dir_sym113 -E ENOTDIR
 ./run --rmdir /mnt/a/indirect_dir_sym113 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_dir_sym113 -E ENOTDIR
 ./run --rmdir /mnt/a/dir113 -E ENOTEMPTY
 ./run --open-file /mnt/a/indirect_dir_sym113/a -r -R 
 ./run --open-file /mnt/a/direct_dir_sym113/a -r -R 
 ./run --open-file /mnt/a/dir113/a -r -R 
- rmtree /mnt/a/dir113
 ./run --open-file /mnt/a/indirect_dir_sym113/a -r -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym113/a -r -E ENOENT
 ./run --open-file /mnt/a/dir113/a -r -E ENOENT
TEST rmdir.py:198: Remove directory over dangling sym
 ./run --rmdir /mnt/a/pointless114 -E ENOTDIR
 ./run --rmdir /mnt/a/pointless114 -E ENOTDIR
 ./run --rmdir /mnt/a/no_foo114 -E ENOENT
***
*** ./run --ov --ts=1 rmdir
***
TEST rmdir.py:10: Remove nonexistent directory
 ./run --rmdir /mnt/a/no_dir100 -E ENOENT
 ./run --rmdir /mnt/a/no_dir100 -E ENOENT
TEST rmdir.py:18: Remove subdir from nonexistent directory
 ./run --rmdir /mnt/a/no_dir101/sub -E ENOENT
 ./run --rmdir /mnt/a/no_dir101/sub -E ENOENT
TEST rmdir.py:26: Remove-dir a file
 ./run --rmdir /mnt/a/foo102 -E ENOTDIR
 ./run --rmdir /mnt/a/foo102 -E ENOTDIR
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST rmdir.py:36: Remove subdir from file
 ./run --rmdir /mnt/a/foo103/sub -E ENOTDIR
 ./run --rmdir /mnt/a/foo103/sub -E ENOTDIR
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST rmdir.py:46: Remove empty dir
 ./run --rmdir /mnt/a/empty104
 ./run --rmdir /mnt/a/empty104 -E ENOENT
 ./run --rmdir /mnt/a/empty104/sub -E ENOENT
TEST rmdir.py:56: Remove directory from empty dir
 ./run --rmdir /mnt/a/empty105/sub -E ENOENT
 ./run --rmdir /mnt/a/empty105/sub -E ENOENT
TEST rmdir.py:64: Remove populated directory
 ./run --rmdir /mnt/a/dir106 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir106/a -r -R 
 ./run --unlink /mnt/a/dir106/a
 ./run --open-file /mnt/a/dir106/a -r -E ENOENT
 ./run --unlink /mnt/a/dir106/a -E ENOENT
- rmtree /mnt/a/dir106
 ./run --open-file /mnt/a/dir106/a -r -R  -E ENOENT
TEST rmdir.py:78: Remove populated directory with created file
 ./run --open-file /mnt/a/empty107/b -w -c -e -W abcq
 ./run --rmdir /mnt/a/empty107 -E ENOTEMPTY
 ./run --unlink /mnt/a/empty107/b
 ./run --open-file /mnt/a/empty107/b -r -E ENOENT
 ./run --unlink /mnt/a/empty107/b -E ENOENT
- rmtree /mnt/a/empty107
 ./run --open-file /mnt/a/empty107/b -r -R  -E ENOENT
TEST rmdir.py:92: Remove populated directory with copied up file
 ./run --rmdir /mnt/a/dir108 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir108/a -r -R 
 ./run --open-file /mnt/a/dir108/a -w -W abcd
 ./run --open-file /mnt/a/dir108/a -r -R abcd
 ./run --unlink /mnt/a/dir108/a
 ./run --open-file /mnt/a/dir108/a -r -E ENOENT
 ./run --unlink /mnt/a/dir108/a -E ENOENT
- rmtree /mnt/a/dir108
 ./run --open-file /mnt/a/dir108/a -r -R  -E ENOENT
TEST rmdir.py:108: Remove populated directory with mkdir after unlink
 ./run --rmdir /mnt/a/dir109 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir109/a -r -R 
 ./run --rmdir /mnt/a/dir109 -E ENOTEMPTY
 ./run --unlink /mnt/a/dir109/a
 ./run --open-file /mnt/a/dir109/a -r -E ENOENT
 ./run --unlink /mnt/a/dir109/a -E ENOENT
 ./run --mkdir /mnt/a/dir109/a 0755
 ./run --mkdir /mnt/a/dir109/a 0755 -E EEXIST
 ./run --rmdir /mnt/a/dir109 -E ENOTEMPTY
 ./run --rmdir /mnt/a/dir109/a
 ./run --rmdir /mnt/a/dir109/a -E ENOENT
- rmtree /mnt/a/dir109
 ./run --open-file /mnt/a/dir109/a -r -R  -E ENOENT
TEST rmdir.py:131: Remove directory from dir
 ./run --rmdir /mnt/a/dir110/pop/c
 ./run --rmdir /mnt/a/dir110/pop/c -E ENOENT
 ./run --mkdir /mnt/a/dir110/pop/c 0755
 ./run --mkdir /mnt/a/dir110/pop/c 0755 -E EEXIST
 ./run --open-file /mnt/a/dir110/pop/b -r -R :aaa:bbb:ccc
- rmtree /mnt/a/dir110
 ./run --open-file /mnt/a/dir110/pop/b -r -E ENOENT
TEST rmdir.py:148: Remove-dir symlinks to file
 ./run --rmdir /mnt/a/indirect_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/indirect_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/foo111 -E ENOTDIR
 ./run --rmdir /mnt/a/foo111 -E ENOTDIR
 ./run --open-file /mnt/a/foo111 -r -R :xxx:yyy:zzz
TEST rmdir.py:164: Remove directory over sym to dir
 ./run --rmdir /mnt/a/direct_dir_sym112 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_dir_sym112 -E ENOTDIR
 ./run --rmdir /mnt/a/dir112 -E ENOTEMPTY
 ./run --open-file /mnt/a/direct_dir_sym112/a -r -R 
 ./run --open-file /mnt/a/dir112/a -r -R 
- rmtree /mnt/a/dir112
 ./run --open-file /mnt/a/direct_dir_sym112/a -r -E ENOENT
 ./run --open-file /mnt/a/dir112/a -r -E ENOENT
TEST rmdir.py:179: Remove directory over sym to sym to dir
 ./run --rmdir /mnt/a/indirect_dir_sym113 -E ENOTDIR
 ./run --rmdir /mnt/a/indirect_dir_sym113 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_dir_sym113 -E ENOTDIR
 ./run --rmdir /mnt/a/dir113 -E ENOTEMPTY
 ./run --open-file /mnt/a/indirect_dir_sym113/a -r -R 
 ./run --open-file /mnt/a/direct_dir_sym113/a -r -R 
 ./run --open-file /mnt/a/dir113/a -r -R 
- rmtree /mnt/a/dir113
 ./run --open-file /mnt/a/indirect_dir_sym113/a -r -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym113/a -r -E ENOENT
 ./run --open-file /mnt/a/dir113/a -r -E ENOENT
TEST rmdir.py:198: Remove directory over dangling sym
 ./run --rmdir /mnt/a/pointless114 -E ENOTDIR
 ./run --rmdir /mnt/a/pointless114 -E ENOTDIR
 ./run --rmdir /mnt/a/no_foo114 -E ENOENT
***
*** ./run --ov --ts=0 hard-link
***
TEST hard-link.py:10: Hard link file
 ./run --link /mnt/a/foo100 /mnt/a/no_foo100
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo100 -r -R :xxx:yyy:zzz
TEST hard-link.py:20: Hard link non-existent file
 ./run --link /mnt/a/no_foo101 /mnt/a/no_foo101a -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo101a -r -E ENOENT
TEST hard-link.py:30: Hard link non-existent file over a file
 ./run --link /mnt/a/no_foo102 /mnt/a/foo102 -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST hard-link.py:40: Hard link file over file
 ./run --link /mnt/a/foo103 /mnt/a/dir103/a -E EEXIST
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/dir103/a -r -R 
TEST hard-link.py:50: Hard link file over new file
 ./run --open-file /mnt/a/foo104-new -w -c -W aaaa
 ./run --link /mnt/a/foo104 /mnt/a/foo104-new -E EEXIST
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo104-new -r -R aaaa
TEST hard-link.py:61: Hard link new file over lower file
 ./run --open-file /mnt/a/foo105-new -w -c -W aaaa
 ./run --link /mnt/a/foo105-new /mnt/a/foo105 -E EEXIST
 ./run --open-file /mnt/a/foo105-new -r -R aaaa
 ./run --open-file /mnt/a/foo105 -r -R :xxx:yyy:zzz
TEST hard-link.py:72: Hard link file over itself
 ./run --link /mnt/a/foo106 /mnt/a/foo106 -E EEXIST
 ./run --open-file /mnt/a/foo106 -r -R :xxx:yyy:zzz
TEST hard-link.py:80: Hard link new file over itself
 ./run --open-file /mnt/a/foo107-new -w -c -W aaaa
 ./run --link /mnt/a/foo107-new /mnt/a/foo107-new -E EEXIST
 ./run --open-file /mnt/a/foo107-new -r -R aaaa
TEST hard-link.py:89: Hard link non-existent file over itself
 ./run --link /mnt/a/no_foo108 /mnt/a/no_foo108 -E ENOENT
 ./run --open-file /mnt/a/no_foo108 -r -E ENOENT
TEST hard-link.py:97: Hard link unlinked file
 ./run --unlink /mnt/a/foo109
 ./run --link /mnt/a/foo109 /mnt/a/no_foo109 -E ENOENT
 ./run --open-file /mnt/a/foo109 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo109 -r -E ENOENT
TEST hard-link.py:108: Hard link renamed file
 ./run --rename /mnt/a/foo110 /mnt/a/no_foo110
 ./run --link /mnt/a/foo110 /mnt/a/no_foo110-a -E ENOENT
 ./run --link /mnt/a/no_foo110 /mnt/a/foo110
 ./run --open-file /mnt/a/foo110 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo110 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo110-a -r -E ENOENT
***
*** ./run --ov --ts=1 hard-link
***
TEST hard-link.py:10: Hard link file
 ./run --link /mnt/a/foo100 /mnt/a/no_foo100
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo100 -r -R :xxx:yyy:zzz
TEST hard-link.py:20: Hard link non-existent file
 ./run --link /mnt/a/no_foo101 /mnt/a/no_foo101a -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo101a -r -E ENOENT
TEST hard-link.py:30: Hard link non-existent file over a file
 ./run --link /mnt/a/no_foo102 /mnt/a/foo102 -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST hard-link.py:40: Hard link file over file
 ./run --link /mnt/a/foo103 /mnt/a/dir103/a -E EEXIST
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/dir103/a -r -R 
TEST hard-link.py:50: Hard link file over new file
 ./run --open-file /mnt/a/foo104-new -w -c -W aaaa
 ./run --link /mnt/a/foo104 /mnt/a/foo104-new -E EEXIST
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo104-new -r -R aaaa
TEST hard-link.py:61: Hard link new file over lower file
 ./run --open-file /mnt/a/foo105-new -w -c -W aaaa
 ./run --link /mnt/a/foo105-new /mnt/a/foo105 -E EEXIST
 ./run --open-file /mnt/a/foo105-new -r -R aaaa
 ./run --open-file /mnt/a/foo105 -r -R :xxx:yyy:zzz
TEST hard-link.py:72: Hard link file over itself
 ./run --link /mnt/a/foo106 /mnt/a/foo106 -E EEXIST
 ./run --open-file /mnt/a/foo106 -r -R :xxx:yyy:zzz
TEST hard-link.py:80: Hard link new file over itself
 ./run --open-file /mnt/a/foo107-new -w -c -W aaaa
 ./run --link /mnt/a/foo107-new /mnt/a/foo107-new -E EEXIST
 ./run --open-file /mnt/a/foo107-new -r -R aaaa
TEST hard-link.py:89: Hard link non-existent file over itself
 ./run --link /mnt/a/no_foo108 /mnt/a/no_foo108 -E ENOENT
 ./run --open-file /mnt/a/no_foo108 -r -E ENOENT
TEST hard-link.py:97: Hard link unlinked file
 ./run --unlink /mnt/a/foo109
 ./run --link /mnt/a/foo109 /mnt/a/no_foo109 -E ENOENT
 ./run --open-file /mnt/a/foo109 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo109 -r -E ENOENT
TEST hard-link.py:108: Hard link renamed file
 ./run --rename /mnt/a/foo110 /mnt/a/no_foo110
 ./run --link /mnt/a/foo110 /mnt/a/no_foo110-a -E ENOENT
 ./run --link /mnt/a/no_foo110 /mnt/a/foo110
 ./run --open-file /mnt/a/foo110 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo110 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo110-a -r -E ENOENT
***
*** ./run --ov --ts=0 hard-link-dir
***
TEST hard-link-dir.py:10: Hard link dir
 ./run --link /mnt/a/empty100 /mnt/a/no_dir100 -E EPERM
 ./run --open-file /mnt/a/empty100 -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST hard-link-dir.py:20: Hard link file over dir
 ./run --link /mnt/a/foo101 /mnt/a/empty101 -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/empty101 -r -d
TEST hard-link-dir.py:30: Hard link dir over dir
 ./run --link /mnt/a/dir102 /mnt/a/empty102 -E EEXIST
 ./run --open-file /mnt/a/dir102 -r -d
 ./run --open-file /mnt/a/empty102 -r -d
TEST hard-link-dir.py:40: Hard link dir over dir
 ./run --link /mnt/a/dir103 /mnt/a/foo103 -E EEXIST
 ./run --open-file /mnt/a/dir103 -r -d
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST hard-link-dir.py:50: Hard link dir over itself
 ./run --link /mnt/a/dir104 /mnt/a/dir104 -E EEXIST
 ./run --open-file /mnt/a/dir104 -r -d
TEST hard-link-dir.py:58: Hard link dir over its parent
 ./run --link /mnt/a/dir105/pop /mnt/a/dir105 -E EEXIST
 ./run --open-file /mnt/a/dir105/pop -r -d
 ./run --open-file /mnt/a/dir105 -r -d
TEST hard-link-dir.py:68: Hard link removed dir
 ./run --rmdir /mnt/a/empty106
 ./run --link /mnt/a/empty106 /mnt/a/no_dir106 -E ENOENT
 ./run --open-file /mnt/a/empty106 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir106 -r -d -E ENOENT
TEST hard-link-dir.py:79: Hard link renamed dir
 ./run --mkdir /mnt/a/empty107/new 0755
 ./run --rename /mnt/a/empty107/new /mnt/a/no_dir107
 ./run --link /mnt/a/empty107/new /mnt/a/no_dir107-a -E ENOENT
 ./run --link /mnt/a/no_dir107 /mnt/a/empty107/new -E EPERM
 ./run --open-file /mnt/a/empty107/new -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir107 -r -d
 ./run --open-file /mnt/a/no_dir107-a -r -d -E ENOENT
***
*** ./run --ov --ts=1 hard-link-dir
***
TEST hard-link-dir.py:10: Hard link dir
 ./run --link /mnt/a/empty100 /mnt/a/no_dir100 -E EPERM
 ./run --open-file /mnt/a/empty100 -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST hard-link-dir.py:20: Hard link file over dir
 ./run --link /mnt/a/foo101 /mnt/a/empty101 -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/empty101 -r -d
TEST hard-link-dir.py:30: Hard link dir over dir
 ./run --link /mnt/a/dir102 /mnt/a/empty102 -E EEXIST
 ./run --open-file /mnt/a/dir102 -r -d
 ./run --open-file /mnt/a/empty102 -r -d
TEST hard-link-dir.py:40: Hard link dir over dir
 ./run --link /mnt/a/dir103 /mnt/a/foo103 -E EEXIST
 ./run --open-file /mnt/a/dir103 -r -d
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST hard-link-dir.py:50: Hard link dir over itself
 ./run --link /mnt/a/dir104 /mnt/a/dir104 -E EEXIST
 ./run --open-file /mnt/a/dir104 -r -d
TEST hard-link-dir.py:58: Hard link dir over its parent
 ./run --link /mnt/a/dir105/pop /mnt/a/dir105 -E EEXIST
 ./run --open-file /mnt/a/dir105/pop -r -d
 ./run --open-file /mnt/a/dir105 -r -d
TEST hard-link-dir.py:68: Hard link removed dir
 ./run --rmdir /mnt/a/empty106
 ./run --link /mnt/a/empty106 /mnt/a/no_dir106 -E ENOENT
 ./run --open-file /mnt/a/empty106 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir106 -r -d -E ENOENT
TEST hard-link-dir.py:79: Hard link renamed dir
 ./run --mkdir /mnt/a/empty107/new 0755
 ./run --rename /mnt/a/empty107/new /mnt/a/no_dir107
 ./run --link /mnt/a/empty107/new /mnt/a/no_dir107-a -E ENOENT
 ./run --link /mnt/a/no_dir107 /mnt/a/empty107/new -E EPERM
 ./run --open-file /mnt/a/empty107/new -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir107 -r -d
 ./run --open-file /mnt/a/no_dir107-a -r -d -E ENOENT
***
*** ./run --ov --ts=0 hard-link-sym
***
TEST hard-link-sym.py:10: Hard link symlink
 ./run --link /mnt/a/direct_sym100 /mnt/a/no_foo100
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo100 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:20: Hard link dangling symlink
 ./run --link /mnt/a/pointless101 /mnt/a/no_foo101
 ./run --open-file /mnt/a/pointless101 -r -E ELOOP
 ./run --open-file /mnt/a/no_foo101 -r -E ELOOP
TEST hard-link-sym.py:30: Hard link non-existent file over a symlink
 ./run --link /mnt/a/no_foo102 /mnt/a/direct_sym102 -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:40: Hard link symlink over file
 ./run --link /mnt/a/direct_sym103 /mnt/a/dir103/a -E EEXIST
 ./run --open-file /mnt/a/direct_sym103 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/dir103/a -r -R 
TEST hard-link-sym.py:50: Hard link symlink over new file
 ./run --open-file /mnt/a/foo104-new -w -c -W aaaa
 ./run --link /mnt/a/direct_sym104 /mnt/a/foo104-new -E EEXIST
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo104-new -r -R aaaa
TEST hard-link-sym.py:61: Hard link new file over symlink
 ./run --open-file /mnt/a/foo105-new -w -c -W aaaa
 ./run --link /mnt/a/foo105-new /mnt/a/direct_sym105 -E EEXIST
 ./run --open-file /mnt/a/foo105-new -r -R aaaa
 ./run --open-file /mnt/a/direct_sym105 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:72: Hard link symlink over itself
 ./run --link /mnt/a/direct_sym106 /mnt/a/direct_sym106 -E EEXIST
 ./run --open-file /mnt/a/direct_sym106 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:80: Hard link symlink over another symlink
 ./run --link /mnt/a/direct_sym107 /mnt/a/pointless107 -E EEXIST
 ./run --open-file /mnt/a/direct_sym107 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/pointless107 -r -E ENOENT
TEST hard-link-sym.py:90: Hard link unlinked symlink
 ./run --unlink /mnt/a/direct_sym108
 ./run --link /mnt/a/direct_sym108 /mnt/a/no_foo108 -E ENOENT
 ./run --open-file /mnt/a/direct_sym108 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo108 -r -E ENOENT
TEST hard-link-sym.py:101: Hard link renamed symlink
 ./run --rename /mnt/a/direct_sym109 /mnt/a/no_foo109
 ./run --link /mnt/a/direct_sym109 /mnt/a/no_foo109-a -E ENOENT
 ./run --link /mnt/a/no_foo109 /mnt/a/direct_sym109
 ./run --open-file /mnt/a/direct_sym109 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo109 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo109-a -r -E ENOENT
***
*** ./run --ov --ts=1 hard-link-sym
***
TEST hard-link-sym.py:10: Hard link symlink
 ./run --link /mnt/a/direct_sym100 /mnt/a/no_foo100
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo100 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:20: Hard link dangling symlink
 ./run --link /mnt/a/pointless101 /mnt/a/no_foo101
 ./run --open-file /mnt/a/pointless101 -r -E ELOOP
 ./run --open-file /mnt/a/no_foo101 -r -E ELOOP
TEST hard-link-sym.py:30: Hard link non-existent file over a symlink
 ./run --link /mnt/a/no_foo102 /mnt/a/direct_sym102 -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:40: Hard link symlink over file
 ./run --link /mnt/a/direct_sym103 /mnt/a/dir103/a -E EEXIST
 ./run --open-file /mnt/a/direct_sym103 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/dir103/a -r -R 
TEST hard-link-sym.py:50: Hard link symlink over new file
 ./run --open-file /mnt/a/foo104-new -w -c -W aaaa
 ./run --link /mnt/a/direct_sym104 /mnt/a/foo104-new -E EEXIST
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo104-new -r -R aaaa
TEST hard-link-sym.py:61: Hard link new file over symlink
 ./run --open-file /mnt/a/foo105-new -w -c -W aaaa
 ./run --link /mnt/a/foo105-new /mnt/a/direct_sym105 -E EEXIST
 ./run --open-file /mnt/a/foo105-new -r -R aaaa
 ./run --open-file /mnt/a/direct_sym105 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:72: Hard link symlink over itself
 ./run --link /mnt/a/direct_sym106 /mnt/a/direct_sym106 -E EEXIST
 ./run --open-file /mnt/a/direct_sym106 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:80: Hard link symlink over another symlink
 ./run --link /mnt/a/direct_sym107 /mnt/a/pointless107 -E EEXIST
 ./run --open-file /mnt/a/direct_sym107 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/pointless107 -r -E ENOENT
TEST hard-link-sym.py:90: Hard link unlinked symlink
 ./run --unlink /mnt/a/direct_sym108
 ./run --link /mnt/a/direct_sym108 /mnt/a/no_foo108 -E ENOENT
 ./run --open-file /mnt/a/direct_sym108 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo108 -r -E ENOENT
TEST hard-link-sym.py:101: Hard link renamed symlink
 ./run --rename /mnt/a/direct_sym109 /mnt/a/no_foo109
 ./run --link /mnt/a/direct_sym109 /mnt/a/no_foo109-a -E ENOENT
 ./run --link /mnt/a/no_foo109 /mnt/a/direct_sym109
 ./run --open-file /mnt/a/direct_sym109 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo109 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo109-a -r -E ENOENT
***
*** ./run --ov --ts=0 unlink
***
TEST unlink.py:9: Unlink file
 ./run --unlink /mnt/a/foo100
 ./run --open-file /mnt/a/foo100 -r -E ENOENT
 ./run --unlink /mnt/a/foo100 -E ENOENT
 ./run --open-file /mnt/a/foo100 -r -E ENOENT
TEST unlink.py:19: Unlink direct symlink to file
 ./run --open-file /mnt/a/direct_sym101 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/direct_sym101
 ./run --open-file /mnt/a/direct_sym101 -r -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/direct_sym101 -E ENOENT
 ./run --open-file /mnt/a/direct_sym101 -r -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST unlink.py:33: Unlink indirect symlink to file
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/indirect_sym102
 ./run --open-file /mnt/a/indirect_sym102 -r -E ENOENT
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/indirect_sym102 -E ENOENT
 ./run --open-file /mnt/a/indirect_sym102 -r -E ENOENT
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
TEST unlink.py:52: Unlink dir
 ./run --unlink /mnt/a/dir103 -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
 ./run --unlink /mnt/a/dir103 -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
TEST unlink.py:62: Unlink direct symlink to dir
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d
 ./run --unlink /mnt/a/direct_dir_sym104
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d -E ENOENT
 ./run --open-file /mnt/a/dir104 -r -d
 ./run --unlink /mnt/a/direct_dir_sym104 -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d -E ENOENT
 ./run --open-file /mnt/a/dir104 -r -d
TEST unlink.py:82: Unlink indirect symlink to dir
 ./run --open-file /mnt/a/indirect_dir_sym105 -r -d
 ./run --unlink /mnt/a/indirect_dir_sym105
 ./run --open-file /mnt/a/indirect_dir_sym105 -r -d -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym105 -r -d
 ./run --open-file /mnt/a/dir105 -r -d
 ./run --unlink /mnt/a/indirect_dir_sym105 -E ENOENT
 ./run --open-file /mnt/a/indirect_dir_sym105 -r -d -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym105 -r -d
TEST unlink.py:107: Unlink absent file
 ./run --unlink /mnt/a/no_foo106 -E ENOENT
 ./run --unlink /mnt/a/no_foo106 -E ENOENT
TEST unlink.py:114: Unlink broken symlink to absent file
 ./run --unlink /mnt/a/pointless107
 ./run --unlink /mnt/a/pointless107 -E ENOENT
TEST unlink.py:121: Unlink broken symlink
 ./run --unlink /mnt/a/pointless108
 ./run --unlink /mnt/a/pointless108 -E ENOENT
TEST unlink.py:128: Unlink absent file pointed to by broken symlink
 ./run --unlink /mnt/a/no_foo109 -E ENOENT
 ./run --unlink /mnt/a/no_foo109 -E ENOENT
***
*** ./run --ov --ts=1 unlink
***
TEST unlink.py:9: Unlink file
 ./run --unlink /mnt/a/foo100
 ./run --open-file /mnt/a/foo100 -r -E ENOENT
 ./run --unlink /mnt/a/foo100 -E ENOENT
 ./run --open-file /mnt/a/foo100 -r -E ENOENT
TEST unlink.py:19: Unlink direct symlink to file
 ./run --open-file /mnt/a/direct_sym101 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/direct_sym101
 ./run --open-file /mnt/a/direct_sym101 -r -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/direct_sym101 -E ENOENT
 ./run --open-file /mnt/a/direct_sym101 -r -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST unlink.py:33: Unlink indirect symlink to file
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/indirect_sym102
 ./run --open-file /mnt/a/indirect_sym102 -r -E ENOENT
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/indirect_sym102 -E ENOENT
 ./run --open-file /mnt/a/indirect_sym102 -r -E ENOENT
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
TEST unlink.py:52: Unlink dir
 ./run --unlink /mnt/a/dir103 -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
 ./run --unlink /mnt/a/dir103 -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
TEST unlink.py:62: Unlink direct symlink to dir
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d
 ./run --unlink /mnt/a/direct_dir_sym104
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d -E ENOENT
 ./run --open-file /mnt/a/dir104 -r -d
 ./run --unlink /mnt/a/direct_dir_sym104 -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d -E ENOENT
 ./run --open-file /mnt/a/dir104 -r -d
TEST unlink.py:82: Unlink indirect symlink to dir
 ./run --open-file /mnt/a/indirect_dir_sym105 -r -d
 ./run --unlink /mnt/a/indirect_dir_sym105
 ./run --open-file /mnt/a/indirect_dir_sym105 -r -d -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym105 -r -d
 ./run --open-file /mnt/a/dir105 -r -d
 ./run --unlink /mnt/a/indirect_dir_sym105 -E ENOENT
 ./run --open-file /mnt/a/indirect_dir_sym105 -r -d -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym105 -r -d
TEST unlink.py:107: Unlink absent file
 ./run --unlink /mnt/a/no_foo106 -E ENOENT
 ./run --unlink /mnt/a/no_foo106 -E ENOENT
TEST unlink.py:114: Unlink broken symlink to absent file
 ./run --unlink /mnt/a/pointless107
 ./run --unlink /mnt/a/pointless107 -E ENOENT
TEST unlink.py:121: Unlink broken symlink
 ./run --unlink /mnt/a/pointless108
 ./run --unlink /mnt/a/pointless108 -E ENOENT
TEST unlink.py:128: Unlink absent file pointed to by broken symlink
 ./run --unlink /mnt/a/no_foo109 -E ENOENT
 ./run --unlink /mnt/a/no_foo109 -E ENOENT
***
*** ./run --ov --ts=0 rename-file
***
TEST rename-file.py:10: Rename file and rename back
 ./run --rename /mnt/a/foo100 /mnt/a/no_foo100
 ./run --rename /mnt/a/foo100 /mnt/a/no_foo100 -E ENOENT
 ./run --rename /mnt/a/no_foo100 /mnt/a/foo100
 ./run --rename /mnt/a/no_foo100 /mnt/a/foo100 -E ENOENT
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
TEST rename-file.py:23: Rename file and unlink old name
 ./run --rename /mnt/a/foo101 /mnt/a/no_foo101
 ./run --unlink /mnt/a/foo101 -E ENOENT
 ./run --rename /mnt/a/no_foo101 /mnt/a/foo101
 ./run --rename /mnt/a/no_foo101 /mnt/a/foo101 -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/foo101
 ./run --unlink /mnt/a/foo101 -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -r -E ENOENT
TEST rename-file.py:39: Rename file and rmdir old name
 ./run --rename /mnt/a/foo102 /mnt/a/no_foo102
 ./run --rmdir /mnt/a/foo102 -E ENOENT
 ./run --rename /mnt/a/no_foo102 /mnt/a/foo102
 ./run --rename /mnt/a/no_foo102 /mnt/a/foo102 -E ENOENT
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
 ./run --rmdir /mnt/a/foo102 -E ENOTDIR
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
TEST rename-file.py:54: Unlink file and rename old name
 ./run --unlink /mnt/a/foo103
 ./run --rename /mnt/a/foo103 /mnt/a/no_foo103 -E ENOENT
 ./run --unlink /mnt/a/foo103 -E ENOENT
 ./run --unlink /mnt/a/no_foo103 -E ENOENT
TEST rename-file.py:65: Rmdir file and rename old name
 ./run --rmdir /mnt/a/foo104 -E ENOTDIR
 ./run --rename /mnt/a/foo104 /mnt/a/no_foo104
 ./run --rmdir /mnt/a/foo104 -E ENOENT
 ./run --unlink /mnt/a/no_foo104
TEST rename-file.py:76: Rename file twice
 ./run --rename /mnt/a/foo105 /mnt/a/no_foo105
 ./run --rename /mnt/a/foo105 /mnt/a/no_foo105 -E ENOENT
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo105x
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo105x -E ENOENT
 ./run --open-file /mnt/a/foo105 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo105 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo105x -r -R :xxx:yyy:zzz
TEST rename-file.py:91: Rename file over another
 ./run --rename /mnt/a/foo106 /mnt/a/dir106/a
 ./run --rename /mnt/a/foo106 /mnt/a/dir106/a -E ENOENT
 ./run --open-file /mnt/a/foo106 -r -E ENOENT
 ./run --open-file /mnt/a/dir106/a -r -R :xxx:yyy:zzz
TEST rename-file.py:102: Rename file over itself
 ./run --rename /mnt/a/foo107 /mnt/a/foo107
 ./run --open-file /mnt/a/foo107 -r -R :xxx:yyy:zzz
TEST rename-file.py:110: Rename file over a dir
 ./run --rename /mnt/a/foo108 /mnt/a/empty108 -E EISDIR
 ./run --rename /mnt/a/foo108 /mnt/a/dir108 -E EISDIR
 ./run --open-file /mnt/a/foo108 -r -R :xxx:yyy:zzz
TEST rename-file.py:121: Rename file over parent dir
 ./run --rename /mnt/a/foo109 /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/foo109 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=1 rename-file
***
TEST rename-file.py:10: Rename file and rename back
 ./run --rename /mnt/a/foo100 /mnt/a/no_foo100
 ./run --rename /mnt/a/foo100 /mnt/a/no_foo100 -E ENOENT
 ./run --rename /mnt/a/no_foo100 /mnt/a/foo100
 ./run --rename /mnt/a/no_foo100 /mnt/a/foo100 -E ENOENT
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
TEST rename-file.py:23: Rename file and unlink old name
 ./run --rename /mnt/a/foo101 /mnt/a/no_foo101
 ./run --unlink /mnt/a/foo101 -E ENOENT
 ./run --rename /mnt/a/no_foo101 /mnt/a/foo101
 ./run --rename /mnt/a/no_foo101 /mnt/a/foo101 -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/foo101
 ./run --unlink /mnt/a/foo101 -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -r -E ENOENT
TEST rename-file.py:39: Rename file and rmdir old name
 ./run --rename /mnt/a/foo102 /mnt/a/no_foo102
 ./run --rmdir /mnt/a/foo102 -E ENOENT
 ./run --rename /mnt/a/no_foo102 /mnt/a/foo102
 ./run --rename /mnt/a/no_foo102 /mnt/a/foo102 -E ENOENT
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
 ./run --rmdir /mnt/a/foo102 -E ENOTDIR
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
TEST rename-file.py:54: Unlink file and rename old name
 ./run --unlink /mnt/a/foo103
 ./run --rename /mnt/a/foo103 /mnt/a/no_foo103 -E ENOENT
 ./run --unlink /mnt/a/foo103 -E ENOENT
 ./run --unlink /mnt/a/no_foo103 -E ENOENT
TEST rename-file.py:65: Rmdir file and rename old name
 ./run --rmdir /mnt/a/foo104 -E ENOTDIR
 ./run --rename /mnt/a/foo104 /mnt/a/no_foo104
 ./run --rmdir /mnt/a/foo104 -E ENOENT
 ./run --unlink /mnt/a/no_foo104
TEST rename-file.py:76: Rename file twice
 ./run --rename /mnt/a/foo105 /mnt/a/no_foo105
 ./run --rename /mnt/a/foo105 /mnt/a/no_foo105 -E ENOENT
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo105x
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo105x -E ENOENT
 ./run --open-file /mnt/a/foo105 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo105 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo105x -r -R :xxx:yyy:zzz
TEST rename-file.py:91: Rename file over another
 ./run --rename /mnt/a/foo106 /mnt/a/dir106/a
 ./run --rename /mnt/a/foo106 /mnt/a/dir106/a -E ENOENT
 ./run --open-file /mnt/a/foo106 -r -E ENOENT
 ./run --open-file /mnt/a/dir106/a -r -R :xxx:yyy:zzz
TEST rename-file.py:102: Rename file over itself
 ./run --rename /mnt/a/foo107 /mnt/a/foo107
 ./run --open-file /mnt/a/foo107 -r -R :xxx:yyy:zzz
TEST rename-file.py:110: Rename file over a dir
 ./run --rename /mnt/a/foo108 /mnt/a/empty108 -E EISDIR
 ./run --rename /mnt/a/foo108 /mnt/a/dir108 -E EISDIR
 ./run --open-file /mnt/a/foo108 -r -R :xxx:yyy:zzz
TEST rename-file.py:121: Rename file over parent dir
 ./run --rename /mnt/a/foo109 /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/foo109 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=0 rename-empty-dir
***
TEST rename-empty-dir.py:10: Rename empty dir and rename back
 ./run --rename /mnt/a/empty100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/empty100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100 -E ENOENT
 ./run --open-file /mnt/a/empty100 -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-empty-dir.py:23: Rename empty dir and remove old name
 ./run --rename /mnt/a/empty101 /mnt/a/no_dir101 -E EXDEV
 ./run --rmdir /mnt/a/empty101
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101 -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101 -E ENOENT
 ./run --open-file /mnt/a/empty101 -r -d -E ENOENT
 ./run --rmdir /mnt/a/empty101 -E ENOENT
 ./run --rmdir /mnt/a/empty101 -E ENOENT
 ./run --open-file /mnt/a/empty101 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-empty-dir.py:39: Rename empty dir and unlink old name
 ./run --rename /mnt/a/empty102 /mnt/a/no_dir102 -E EXDEV
 ./run --unlink /mnt/a/empty102 -E EISDIR
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102 -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102 -E ENOENT
 ./run --open-file /mnt/a/empty102 -r -d
 ./run --unlink /mnt/a/empty102 -E EISDIR
 ./run --open-file /mnt/a/empty102 -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-empty-dir.py:54: Remove dir and rename old name
 ./run --rmdir /mnt/a/empty103
 ./run --rename /mnt/a/empty103 /mnt/a/no_dir103 -E ENOENT
 ./run --rmdir /mnt/a/empty103 -E ENOENT
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
TEST rename-empty-dir.py:65: Unlink dir and rename old name
 ./run --unlink /mnt/a/empty104 -E EISDIR
 ./run --rename /mnt/a/empty104 /mnt/a/no_dir104 -E EXDEV
 ./run --unlink /mnt/a/empty104 -E EISDIR
 ./run --rmdir /mnt/a/no_dir104 -E ENOENT
TEST rename-empty-dir.py:76: Rename empty dir twice
 ./run --rename /mnt/a/empty105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/empty105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/empty105 -r -d
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d -E ENOENT
TEST rename-empty-dir.py:91: Rename empty dir over another populated dir
 ./run --rename /mnt/a/empty106 /mnt/a/dir106 -E EXDEV
 ./run --open-file /mnt/a/empty106 -r -d
 ./run --open-file /mnt/a/dir106 -r -d
TEST rename-empty-dir.py:101: Rename empty dir over itself
 ./run --rename /mnt/a/empty107 /mnt/a/empty107
 ./run --open-file /mnt/a/empty107 -r -d
TEST rename-empty-dir.py:109: Rename empty dir over a file
 ./run --rename /mnt/a/empty108 /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/empty108 /mnt/a/dir108/a -E ENOTDIR
 ./run --open-file /mnt/a/empty108 -r -d
TEST rename-empty-dir.py:120: Rename empty dir over parent dir
 ./run --rename /mnt/a/empty109 /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/empty109 -r -d
***
*** ./run --ov --ts=1 rename-empty-dir
***
TEST rename-empty-dir.py:10: Rename empty dir and rename back
 ./run --rename /mnt/a/empty100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/empty100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100 -E ENOENT
 ./run --open-file /mnt/a/empty100 -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-empty-dir.py:23: Rename empty dir and remove old name
 ./run --rename /mnt/a/empty101 /mnt/a/no_dir101 -E EXDEV
 ./run --rmdir /mnt/a/empty101
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101 -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101 -E ENOENT
 ./run --open-file /mnt/a/empty101 -r -d -E ENOENT
 ./run --rmdir /mnt/a/empty101 -E ENOENT
 ./run --rmdir /mnt/a/empty101 -E ENOENT
 ./run --open-file /mnt/a/empty101 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-empty-dir.py:39: Rename empty dir and unlink old name
 ./run --rename /mnt/a/empty102 /mnt/a/no_dir102 -E EXDEV
 ./run --unlink /mnt/a/empty102 -E EISDIR
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102 -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102 -E ENOENT
 ./run --open-file /mnt/a/empty102 -r -d
 ./run --unlink /mnt/a/empty102 -E EISDIR
 ./run --open-file /mnt/a/empty102 -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-empty-dir.py:54: Remove dir and rename old name
 ./run --rmdir /mnt/a/empty103
 ./run --rename /mnt/a/empty103 /mnt/a/no_dir103 -E ENOENT
 ./run --rmdir /mnt/a/empty103 -E ENOENT
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
TEST rename-empty-dir.py:65: Unlink dir and rename old name
 ./run --unlink /mnt/a/empty104 -E EISDIR
 ./run --rename /mnt/a/empty104 /mnt/a/no_dir104 -E EXDEV
 ./run --unlink /mnt/a/empty104 -E EISDIR
 ./run --rmdir /mnt/a/no_dir104 -E ENOENT
TEST rename-empty-dir.py:76: Rename empty dir twice
 ./run --rename /mnt/a/empty105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/empty105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/empty105 -r -d
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d -E ENOENT
TEST rename-empty-dir.py:91: Rename empty dir over another populated dir
 ./run --rename /mnt/a/empty106 /mnt/a/dir106 -E EXDEV
 ./run --open-file /mnt/a/empty106 -r -d
 ./run --open-file /mnt/a/dir106 -r -d
TEST rename-empty-dir.py:101: Rename empty dir over itself
 ./run --rename /mnt/a/empty107 /mnt/a/empty107
 ./run --open-file /mnt/a/empty107 -r -d
TEST rename-empty-dir.py:109: Rename empty dir over a file
 ./run --rename /mnt/a/empty108 /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/empty108 /mnt/a/dir108/a -E ENOTDIR
 ./run --open-file /mnt/a/empty108 -r -d
TEST rename-empty-dir.py:120: Rename empty dir over parent dir
 ./run --rename /mnt/a/empty109 /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/empty109 -r -d
***
*** ./run --ov --ts=0 rename-new-dir
***
TEST rename-new-dir.py:10: Rename empty dir and rename back
 ./run --mkdir /mnt/a/empty100-new 0755
 ./run --rename /mnt/a/empty100-new /mnt/a/no_dir100
 ./run --rename /mnt/a/empty100-new /mnt/a/no_dir100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100-new
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100-new -E ENOENT
 ./run --open-file /mnt/a/empty100-new -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-new-dir.py:24: Rename empty dir and remove old name
 ./run --mkdir /mnt/a/empty101-new 0755
 ./run --rename /mnt/a/empty101-new /mnt/a/no_dir101
 ./run --rmdir /mnt/a/empty101-new -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101-new
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101-new -E ENOENT
 ./run --open-file /mnt/a/empty101-new -r -d
 ./run --rmdir /mnt/a/empty101-new
 ./run --rmdir /mnt/a/empty101-new -E ENOENT
 ./run --open-file /mnt/a/empty101-new -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-new-dir.py:41: Rename empty dir and unlink old name
 ./run --mkdir /mnt/a/empty102-new 0755
 ./run --rename /mnt/a/empty102-new /mnt/a/no_dir102
 ./run --unlink /mnt/a/empty102-new -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102-new
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102-new -E ENOENT
 ./run --open-file /mnt/a/empty102-new -r -d
 ./run --unlink /mnt/a/empty102-new -E EISDIR
 ./run --open-file /mnt/a/empty102-new -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-new-dir.py:57: Remove dir and rename old name
 ./run --mkdir /mnt/a/empty103-new 0755
 ./run --rmdir /mnt/a/empty103-new
 ./run --rename /mnt/a/empty103-new /mnt/a/no_dir103 -E ENOENT
 ./run --rmdir /mnt/a/empty103-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
TEST rename-new-dir.py:69: Unlink dir and rename old name
 ./run --mkdir /mnt/a/empty104-new 0755
 ./run --unlink /mnt/a/empty104-new -E EISDIR
 ./run --rename /mnt/a/empty104-new /mnt/a/no_dir104
 ./run --unlink /mnt/a/empty104-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir104
TEST rename-new-dir.py:81: Rename empty dir twice
 ./run --mkdir /mnt/a/empty105-new 0755
 ./run --rename /mnt/a/empty105-new /mnt/a/no_dir105
 ./run --rename /mnt/a/empty105-new /mnt/a/no_dir105 -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d
TEST rename-new-dir.py:97: Rename empty dir over another populated dir
 ./run --mkdir /mnt/a/empty106-new 0755
 ./run --rename /mnt/a/empty106-new /mnt/a/dir106 -E ENOTEMPTY
 ./run --open-file /mnt/a/empty106-new -r -d
 ./run --open-file /mnt/a/dir106 -r -d
TEST rename-new-dir.py:108: Rename empty dir over itself
 ./run --mkdir /mnt/a/empty107-new 0755
 ./run --rename /mnt/a/empty107-new /mnt/a/empty107-new
 ./run --open-file /mnt/a/empty107-new -r -d
TEST rename-new-dir.py:117: Rename empty dir over a file
 ./run --mkdir /mnt/a/empty108-new 0755
 ./run --rename /mnt/a/empty108-new /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/empty108-new /mnt/a/dir108/a -E ENOTDIR
 ./run --open-file /mnt/a/empty108-new -r -d
TEST rename-new-dir.py:129: Rename empty dir over parent dir
 ./run --mkdir /mnt/a/empty109-new 0755
 ./run --rename /mnt/a/empty109-new /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/empty109-new -r -d
TEST rename-new-dir.py:161: Rename empty dir over removed empty lower dir
 ./run --mkdir /mnt/a/empty110-new 0755
 ./run --rmdir /mnt/a/empty110
 ./run --rename /mnt/a/empty110-new /mnt/a/empty110
 ./run --open-file /mnt/a/empty110 -r -d
TEST rename-new-dir.py:172: Rename empty dir over removed populated lower dir
 ./run --mkdir /mnt/a/empty111-new 0755
- rmtree /mnt/a/dir111
 ./run --rename /mnt/a/empty111-new /mnt/a/dir111
 ./run --open-file /mnt/a/dir111/a -r -E ENOENT
 ./run --open-file /mnt/a/dir111/pop -r -d -E ENOENT
 ./run --open-file /mnt/a/dir111 -r -d
***
*** ./run --ov --ts=1 rename-new-dir
***
TEST rename-new-dir.py:10: Rename empty dir and rename back
 ./run --mkdir /mnt/a/empty100-new 0755
 ./run --rename /mnt/a/empty100-new /mnt/a/no_dir100
 ./run --rename /mnt/a/empty100-new /mnt/a/no_dir100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100-new
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100-new -E ENOENT
 ./run --open-file /mnt/a/empty100-new -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-new-dir.py:24: Rename empty dir and remove old name
 ./run --mkdir /mnt/a/empty101-new 0755
 ./run --rename /mnt/a/empty101-new /mnt/a/no_dir101
 ./run --rmdir /mnt/a/empty101-new -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101-new
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101-new -E ENOENT
 ./run --open-file /mnt/a/empty101-new -r -d
 ./run --rmdir /mnt/a/empty101-new
 ./run --rmdir /mnt/a/empty101-new -E ENOENT
 ./run --open-file /mnt/a/empty101-new -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-new-dir.py:41: Rename empty dir and unlink old name
 ./run --mkdir /mnt/a/empty102-new 0755
 ./run --rename /mnt/a/empty102-new /mnt/a/no_dir102
 ./run --unlink /mnt/a/empty102-new -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102-new
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102-new -E ENOENT
 ./run --open-file /mnt/a/empty102-new -r -d
 ./run --unlink /mnt/a/empty102-new -E EISDIR
 ./run --open-file /mnt/a/empty102-new -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-new-dir.py:57: Remove dir and rename old name
 ./run --mkdir /mnt/a/empty103-new 0755
 ./run --rmdir /mnt/a/empty103-new
 ./run --rename /mnt/a/empty103-new /mnt/a/no_dir103 -E ENOENT
 ./run --rmdir /mnt/a/empty103-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
TEST rename-new-dir.py:69: Unlink dir and rename old name
 ./run --mkdir /mnt/a/empty104-new 0755
 ./run --unlink /mnt/a/empty104-new -E EISDIR
 ./run --rename /mnt/a/empty104-new /mnt/a/no_dir104
 ./run --unlink /mnt/a/empty104-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir104
TEST rename-new-dir.py:81: Rename empty dir twice
 ./run --mkdir /mnt/a/empty105-new 0755
 ./run --rename /mnt/a/empty105-new /mnt/a/no_dir105
 ./run --rename /mnt/a/empty105-new /mnt/a/no_dir105 -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d
TEST rename-new-dir.py:97: Rename empty dir over another populated dir
 ./run --mkdir /mnt/a/empty106-new 0755
 ./run --rename /mnt/a/empty106-new /mnt/a/dir106 -E ENOTEMPTY
 ./run --open-file /mnt/a/empty106-new -r -d
 ./run --open-file /mnt/a/dir106 -r -d
TEST rename-new-dir.py:108: Rename empty dir over itself
 ./run --mkdir /mnt/a/empty107-new 0755
 ./run --rename /mnt/a/empty107-new /mnt/a/empty107-new
 ./run --open-file /mnt/a/empty107-new -r -d
TEST rename-new-dir.py:117: Rename empty dir over a file
 ./run --mkdir /mnt/a/empty108-new 0755
 ./run --rename /mnt/a/empty108-new /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/empty108-new /mnt/a/dir108/a -E ENOTDIR
 ./run --open-file /mnt/a/empty108-new -r -d
TEST rename-new-dir.py:129: Rename empty dir over parent dir
 ./run --mkdir /mnt/a/empty109-new 0755
 ./run --rename /mnt/a/empty109-new /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/empty109-new -r -d
TEST rename-new-dir.py:161: Rename empty dir over removed empty lower dir
 ./run --mkdir /mnt/a/empty110-new 0755
 ./run --rmdir /mnt/a/empty110
 ./run --rename /mnt/a/empty110-new /mnt/a/empty110
 ./run --open-file /mnt/a/empty110 -r -d
TEST rename-new-dir.py:172: Rename empty dir over removed populated lower dir
 ./run --mkdir /mnt/a/empty111-new 0755
- rmtree /mnt/a/dir111
 ./run --rename /mnt/a/empty111-new /mnt/a/dir111
 ./run --open-file /mnt/a/dir111/a -r -E ENOENT
 ./run --open-file /mnt/a/dir111/pop -r -d -E ENOENT
 ./run --open-file /mnt/a/dir111 -r -d
***
*** ./run --ov --ts=0 rename-pop-dir
***
TEST rename-pop-dir.py:10: Rename dir and rename back
 ./run --rename /mnt/a/dir100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/dir100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100 -E ENOENT
 ./run --open-file /mnt/a/dir100 -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-pop-dir.py:23: Rename dir and remove old name
 ./run --rename /mnt/a/dir101 /mnt/a/no_dir101 -E EXDEV
 ./run --rmdir /mnt/a/dir101 -E ENOTEMPTY
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101 -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101 -E ENOENT
 ./run --open-file /mnt/a/dir101 -r -d
 ./run --rmdir /mnt/a/dir101 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir101 -r -d
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-pop-dir.py:38: Rename dir and unlink old name
 ./run --rename /mnt/a/dir102 /mnt/a/no_dir102 -E EXDEV
 ./run --unlink /mnt/a/dir102 -E EISDIR
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102 -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102 -E ENOENT
 ./run --open-file /mnt/a/dir102 -r -d
 ./run --unlink /mnt/a/dir102 -E EISDIR
 ./run --open-file /mnt/a/dir102 -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-pop-dir.py:53: Remove dir and rename old name
 ./run --rmdir /mnt/a/dir103 -E ENOTEMPTY
 ./run --rename /mnt/a/dir103 /mnt/a/no_dir103 -E EXDEV
 ./run --rmdir /mnt/a/dir103 -E ENOTEMPTY
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
TEST rename-pop-dir.py:64: Unlink dir and rename old name
 ./run --unlink /mnt/a/dir104 -E EISDIR
 ./run --rename /mnt/a/dir104 /mnt/a/no_dir104 -E EXDEV
 ./run --unlink /mnt/a/dir104 -E EISDIR
 ./run --rmdir /mnt/a/no_dir104 -E ENOENT
TEST rename-pop-dir.py:75: Rename dir twice
 ./run --rename /mnt/a/dir105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/dir105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/dir105 -r -d
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d -E ENOENT
TEST rename-pop-dir.py:90: Rename dir over another populated dir
 ./run --rename /mnt/a/dir106 /mnt/a/empty106 -E EXDEV
 ./run --open-file /mnt/a/dir106 -r -d
 ./run --open-file /mnt/a/empty106 -r -d
TEST rename-pop-dir.py:100: Rename dir over itself
 ./run --rename /mnt/a/dir107 /mnt/a/dir107
 ./run --open-file /mnt/a/dir107 -r -d
TEST rename-pop-dir.py:108: Rename dir over a child file
 ./run --rename /mnt/a/dir108 /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/dir108 /mnt/a/dir108/a -E EINVAL
 ./run --open-file /mnt/a/dir108 -r -d
TEST rename-pop-dir.py:119: Rename dir over a file
 ./run --rename /mnt/a/dir109/pop /mnt/a/dir109/a -E ENOTDIR
 ./run --open-file /mnt/a/dir109/pop -r -d
TEST rename-pop-dir.py:128: Rename dir over parent dir
 ./run --rename /mnt/a/dir110 /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/dir110 -r -d
***
*** ./run --ov --ts=1 rename-pop-dir
***
TEST rename-pop-dir.py:10: Rename dir and rename back
 ./run --rename /mnt/a/dir100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/dir100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100 -E ENOENT
 ./run --open-file /mnt/a/dir100 -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-pop-dir.py:23: Rename dir and remove old name
 ./run --rename /mnt/a/dir101 /mnt/a/no_dir101 -E EXDEV
 ./run --rmdir /mnt/a/dir101 -E ENOTEMPTY
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101 -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101 -E ENOENT
 ./run --open-file /mnt/a/dir101 -r -d
 ./run --rmdir /mnt/a/dir101 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir101 -r -d
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-pop-dir.py:38: Rename dir and unlink old name
 ./run --rename /mnt/a/dir102 /mnt/a/no_dir102 -E EXDEV
 ./run --unlink /mnt/a/dir102 -E EISDIR
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102 -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102 -E ENOENT
 ./run --open-file /mnt/a/dir102 -r -d
 ./run --unlink /mnt/a/dir102 -E EISDIR
 ./run --open-file /mnt/a/dir102 -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-pop-dir.py:53: Remove dir and rename old name
 ./run --rmdir /mnt/a/dir103 -E ENOTEMPTY
 ./run --rename /mnt/a/dir103 /mnt/a/no_dir103 -E EXDEV
 ./run --rmdir /mnt/a/dir103 -E ENOTEMPTY
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
TEST rename-pop-dir.py:64: Unlink dir and rename old name
 ./run --unlink /mnt/a/dir104 -E EISDIR
 ./run --rename /mnt/a/dir104 /mnt/a/no_dir104 -E EXDEV
 ./run --unlink /mnt/a/dir104 -E EISDIR
 ./run --rmdir /mnt/a/no_dir104 -E ENOENT
TEST rename-pop-dir.py:75: Rename dir twice
 ./run --rename /mnt/a/dir105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/dir105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/dir105 -r -d
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d -E ENOENT
TEST rename-pop-dir.py:90: Rename dir over another populated dir
 ./run --rename /mnt/a/dir106 /mnt/a/empty106 -E EXDEV
 ./run --open-file /mnt/a/dir106 -r -d
 ./run --open-file /mnt/a/empty106 -r -d
TEST rename-pop-dir.py:100: Rename dir over itself
 ./run --rename /mnt/a/dir107 /mnt/a/dir107
 ./run --open-file /mnt/a/dir107 -r -d
TEST rename-pop-dir.py:108: Rename dir over a child file
 ./run --rename /mnt/a/dir108 /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/dir108 /mnt/a/dir108/a -E EINVAL
 ./run --open-file /mnt/a/dir108 -r -d
TEST rename-pop-dir.py:119: Rename dir over a file
 ./run --rename /mnt/a/dir109/pop /mnt/a/dir109/a -E ENOTDIR
 ./run --open-file /mnt/a/dir109/pop -r -d
TEST rename-pop-dir.py:128: Rename dir over parent dir
 ./run --rename /mnt/a/dir110 /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/dir110 -r -d
***
*** ./run --ov --ts=0 rename-new-pop-dir
***
TEST rename-new-pop-dir.py:10: Rename new dir and rename back
 ./run --mkdir /mnt/a/dir100-new 0755
 ./run --open-file /mnt/a/dir100-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir100-new /mnt/a/no_dir100
 ./run --rename /mnt/a/dir100-new /mnt/a/no_dir100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100-new
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100-new -E ENOENT
 ./run --open-file /mnt/a/dir100-new -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-new-pop-dir.py:25: Rename new dir and remove old name
 ./run --mkdir /mnt/a/dir101-new 0755
 ./run --open-file /mnt/a/dir101-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir101-new /mnt/a/no_dir101
 ./run --rmdir /mnt/a/dir101-new -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101-new
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101-new -E ENOENT
 ./run --open-file /mnt/a/dir101-new -r -d
 ./run --rmdir /mnt/a/dir101-new -E ENOTEMPTY
 ./run --open-file /mnt/a/dir101-new -r -d
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-new-pop-dir.py:42: Rename new dir and unlink old name
 ./run --mkdir /mnt/a/dir102-new 0755
 ./run --open-file /mnt/a/dir102-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir102-new /mnt/a/no_dir102
 ./run --unlink /mnt/a/dir102-new -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102-new
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102-new -E ENOENT
 ./run --open-file /mnt/a/dir102-new -r -d
 ./run --unlink /mnt/a/dir102-new -E EISDIR
 ./run --open-file /mnt/a/dir102-new -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-new-pop-dir.py:59: Remove dir and rename old name
 ./run --mkdir /mnt/a/dir103-new 0755
 ./run --open-file /mnt/a/dir103-new/a -w -c -W aaaa
 ./run --rmdir /mnt/a/dir103-new -E ENOTEMPTY
 ./run --rename /mnt/a/dir103-new /mnt/a/no_dir103
 ./run --rmdir /mnt/a/dir103-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir103 -E ENOTEMPTY
TEST rename-new-pop-dir.py:72: Unlink dir and rename old name
 ./run --mkdir /mnt/a/dir104-new 0755
 ./run --open-file /mnt/a/dir104-new/a -w -c -W aaaa
 ./run --unlink /mnt/a/dir104-new -E EISDIR
 ./run --rename /mnt/a/dir104-new /mnt/a/no_dir104
 ./run --unlink /mnt/a/dir104-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir104 -E ENOTEMPTY
TEST rename-new-pop-dir.py:85: Rename new dir twice
 ./run --mkdir /mnt/a/dir105-new 0755
 ./run --open-file /mnt/a/dir105-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir105-new /mnt/a/no_dir105
 ./run --rename /mnt/a/dir105-new /mnt/a/no_dir105 -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/dir105-new -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d
TEST rename-new-pop-dir.py:102: Rename new dir over another populated dir
 ./run --mkdir /mnt/a/dir106-new 0755
 ./run --open-file /mnt/a/dir106-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir106-new /mnt/a/empty106
 ./run --open-file /mnt/a/dir106-new -r -d -E ENOENT
 ./run --open-file /mnt/a/empty106 -r -d
TEST rename-new-pop-dir.py:114: Rename new dir over itself
 ./run --mkdir /mnt/a/dir107-new 0755
 ./run --open-file /mnt/a/dir107-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir107-new /mnt/a/dir107-new
 ./run --open-file /mnt/a/dir107-new -r -d
TEST rename-new-pop-dir.py:124: Rename new dir over a child file
 ./run --mkdir /mnt/a/dir108-new 0755
 ./run --open-file /mnt/a/dir108-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir108-new /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/dir108-new /mnt/a/dir108-new/a -E EINVAL
 ./run --open-file /mnt/a/dir108-new -r -d
TEST rename-new-pop-dir.py:137: Rename new dir over a file
 ./run --mkdir /mnt/a/dir109-new 0755
 ./run --open-file /mnt/a/dir109-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir109-new /mnt/a/dir109/a -E ENOTDIR
 ./run --open-file /mnt/a/dir109-new -r -d
TEST rename-new-pop-dir.py:148: Rename new dir over parent dir
 ./run --mkdir /mnt/a/dir110-new 0755
 ./run --open-file /mnt/a/dir110-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir110-new /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/dir110-new -r -d
TEST rename-new-pop-dir.py:159: Rename new dir over unioned dir
 ./run --mkdir /mnt/a/dir111-new 0755
 ./run --open-file /mnt/a/dir111-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir111-new /mnt/a/dir111 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir111-new -r -d
TEST rename-new-pop-dir.py:170: Rename new dir over removed unioned empty dir
 ./run --mkdir /mnt/a/dir112-new 0755
 ./run --open-file /mnt/a/dir112-new/a -w -c -W aaaa
 ./run --rmdir /mnt/a/dir112/pop/c
 ./run --rename /mnt/a/dir112-new /mnt/a/dir112/pop/c
 ./run --open-file /mnt/a/dir112/pop/c -r -d
 ./run --open-file /mnt/a/dir112/pop/c/a -r -R aaaa
TEST rename-new-pop-dir.py:183: Rename new dir over removed unioned dir, different files
 ./run --mkdir /mnt/a/dir113-new 0755
 ./run --open-file /mnt/a/dir113-new/a -w -c -W aaaa
- rmtree /mnt/a/dir113/pop
 ./run --rename /mnt/a/dir113-new /mnt/a/dir113/pop
 ./run --open-file /mnt/a/dir113/pop -r -d
 ./run --open-file /mnt/a/dir113/pop/a -r -R aaaa
 ./run --open-file /mnt/a/dir113/pop/b -r -E ENOENT
TEST rename-new-pop-dir.py:197: Rename new dir over removed unioned dir, same files
 ./run --mkdir /mnt/a/dir114-new 0755
 ./run --open-file /mnt/a/dir114-new/b -w -c -W aaaa
- rmtree /mnt/a/dir114/pop
 ./run --rename /mnt/a/dir114-new /mnt/a/dir114/pop
 ./run --open-file /mnt/a/dir114-new -r -d -E ENOENT
 ./run --open-file /mnt/a/dir114/pop -r -d
 ./run --open-file /mnt/a/dir114/pop/b -r -R aaaa
TEST rename-new-pop-dir.py:211: Rename new dir over removed unioned dir, different dirs
 ./run --mkdir /mnt/a/dir115-new 0755
 ./run --mkdir /mnt/a/dir115-new/pop 0755
 ./run --open-file /mnt/a/dir115-new/pop/x -w -c -W aaaa
- rmtree /mnt/a/dir115
 ./run --rename /mnt/a/dir115-new /mnt/a/dir115
 ./run --open-file /mnt/a/dir115-new -r -d -E ENOENT
 ./run --open-file /mnt/a/dir115 -r -d
 ./run --open-file /mnt/a/dir115/pop/x -r -R aaaa
 ./run --open-file /mnt/a/dir115/pop/b -r -E ENOENT
TEST rename-new-pop-dir.py:227: Rename new dir over removed unioned dir, same dirs
 ./run --mkdir /mnt/a/dir116-new 0755
 ./run --mkdir /mnt/a/dir116-new/pop 0755
 ./run --open-file /mnt/a/dir116-new/pop/b -w -c -W aaaa
- rmtree /mnt/a/dir116
 ./run --rename /mnt/a/dir116-new /mnt/a/dir116
 ./run --open-file /mnt/a/dir116-new -r -d -E ENOENT
 ./run --open-file /mnt/a/dir116 -r -d
 ./run --open-file /mnt/a/dir116/pop/b -r -R aaaa
TEST rename-new-pop-dir.py:242: Rename new dir over unlinked unioned dir
 ./run --mkdir /mnt/a/dir117-new 0755
 ./run --mkdir /mnt/a/dir117-new/pop 0755
 ./run --open-file /mnt/a/dir117-new/pop/b -w -c -W aaaa
 ./run --unlink /mnt/a/dir117 -E EISDIR
 ./run --rename /mnt/a/dir117-new /mnt/a/dir117 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir117-new -r -d
 ./run --open-file /mnt/a/dir117 -r -d
 ./run --open-file /mnt/a/dir117-new/pop/b -r -R aaaa
 ./run --open-file /mnt/a/dir117/pop/b -r -R :aaa:bbb:ccc
***
*** ./run --ov --ts=1 rename-new-pop-dir
***
TEST rename-new-pop-dir.py:10: Rename new dir and rename back
 ./run --mkdir /mnt/a/dir100-new 0755
 ./run --open-file /mnt/a/dir100-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir100-new /mnt/a/no_dir100
 ./run --rename /mnt/a/dir100-new /mnt/a/no_dir100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100-new
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100-new -E ENOENT
 ./run --open-file /mnt/a/dir100-new -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-new-pop-dir.py:25: Rename new dir and remove old name
 ./run --mkdir /mnt/a/dir101-new 0755
 ./run --open-file /mnt/a/dir101-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir101-new /mnt/a/no_dir101
 ./run --rmdir /mnt/a/dir101-new -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101-new
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101-new -E ENOENT
 ./run --open-file /mnt/a/dir101-new -r -d
 ./run --rmdir /mnt/a/dir101-new -E ENOTEMPTY
 ./run --open-file /mnt/a/dir101-new -r -d
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-new-pop-dir.py:42: Rename new dir and unlink old name
 ./run --mkdir /mnt/a/dir102-new 0755
 ./run --open-file /mnt/a/dir102-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir102-new /mnt/a/no_dir102
 ./run --unlink /mnt/a/dir102-new -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102-new
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102-new -E ENOENT
 ./run --open-file /mnt/a/dir102-new -r -d
 ./run --unlink /mnt/a/dir102-new -E EISDIR
 ./run --open-file /mnt/a/dir102-new -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-new-pop-dir.py:59: Remove dir and rename old name
 ./run --mkdir /mnt/a/dir103-new 0755
 ./run --open-file /mnt/a/dir103-new/a -w -c -W aaaa
 ./run --rmdir /mnt/a/dir103-new -E ENOTEMPTY
 ./run --rename /mnt/a/dir103-new /mnt/a/no_dir103
 ./run --rmdir /mnt/a/dir103-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir103 -E ENOTEMPTY
TEST rename-new-pop-dir.py:72: Unlink dir and rename old name
 ./run --mkdir /mnt/a/dir104-new 0755
 ./run --open-file /mnt/a/dir104-new/a -w -c -W aaaa
 ./run --unlink /mnt/a/dir104-new -E EISDIR
 ./run --rename /mnt/a/dir104-new /mnt/a/no_dir104
 ./run --unlink /mnt/a/dir104-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir104 -E ENOTEMPTY
TEST rename-new-pop-dir.py:85: Rename new dir twice
 ./run --mkdir /mnt/a/dir105-new 0755
 ./run --open-file /mnt/a/dir105-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir105-new /mnt/a/no_dir105
 ./run --rename /mnt/a/dir105-new /mnt/a/no_dir105 -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/dir105-new -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d
TEST rename-new-pop-dir.py:102: Rename new dir over another populated dir
 ./run --mkdir /mnt/a/dir106-new 0755
 ./run --open-file /mnt/a/dir106-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir106-new /mnt/a/empty106
 ./run --open-file /mnt/a/dir106-new -r -d -E ENOENT
 ./run --open-file /mnt/a/empty106 -r -d
TEST rename-new-pop-dir.py:114: Rename new dir over itself
 ./run --mkdir /mnt/a/dir107-new 0755
 ./run --open-file /mnt/a/dir107-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir107-new /mnt/a/dir107-new
 ./run --open-file /mnt/a/dir107-new -r -d
TEST rename-new-pop-dir.py:124: Rename new dir over a child file
 ./run --mkdir /mnt/a/dir108-new 0755
 ./run --open-file /mnt/a/dir108-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir108-new /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/dir108-new /mnt/a/dir108-new/a -E EINVAL
 ./run --open-file /mnt/a/dir108-new -r -d
TEST rename-new-pop-dir.py:137: Rename new dir over a file
 ./run --mkdir /mnt/a/dir109-new 0755
 ./run --open-file /mnt/a/dir109-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir109-new /mnt/a/dir109/a -E ENOTDIR
 ./run --open-file /mnt/a/dir109-new -r -d
TEST rename-new-pop-dir.py:148: Rename new dir over parent dir
 ./run --mkdir /mnt/a/dir110-new 0755
 ./run --open-file /mnt/a/dir110-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir110-new /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/dir110-new -r -d
TEST rename-new-pop-dir.py:159: Rename new dir over unioned dir
 ./run --mkdir /mnt/a/dir111-new 0755
 ./run --open-file /mnt/a/dir111-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir111-new /mnt/a/dir111 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir111-new -r -d
TEST rename-new-pop-dir.py:170: Rename new dir over removed unioned empty dir
 ./run --mkdir /mnt/a/dir112-new 0755
 ./run --open-file /mnt/a/dir112-new/a -w -c -W aaaa
 ./run --rmdir /mnt/a/dir112/pop/c
 ./run --rename /mnt/a/dir112-new /mnt/a/dir112/pop/c
 ./run --open-file /mnt/a/dir112/pop/c -r -d
 ./run --open-file /mnt/a/dir112/pop/c/a -r -R aaaa
TEST rename-new-pop-dir.py:183: Rename new dir over removed unioned dir, different files
 ./run --mkdir /mnt/a/dir113-new 0755
 ./run --open-file /mnt/a/dir113-new/a -w -c -W aaaa
- rmtree /mnt/a/dir113/pop
 ./run --rename /mnt/a/dir113-new /mnt/a/dir113/pop
 ./run --open-file /mnt/a/dir113/pop -r -d
 ./run --open-file /mnt/a/dir113/pop/a -r -R aaaa
 ./run --open-file /mnt/a/dir113/pop/b -r -E ENOENT
TEST rename-new-pop-dir.py:197: Rename new dir over removed unioned dir, same files
 ./run --mkdir /mnt/a/dir114-new 0755
 ./run --open-file /mnt/a/dir114-new/b -w -c -W aaaa
- rmtree /mnt/a/dir114/pop
 ./run --rename /mnt/a/dir114-new /mnt/a/dir114/pop
 ./run --open-file /mnt/a/dir114-new -r -d -E ENOENT
 ./run --open-file /mnt/a/dir114/pop -r -d
 ./run --open-file /mnt/a/dir114/pop/b -r -R aaaa
TEST rename-new-pop-dir.py:211: Rename new dir over removed unioned dir, different dirs
 ./run --mkdir /mnt/a/dir115-new 0755
 ./run --mkdir /mnt/a/dir115-new/pop 0755
 ./run --open-file /mnt/a/dir115-new/pop/x -w -c -W aaaa
- rmtree /mnt/a/dir115
 ./run --rename /mnt/a/dir115-new /mnt/a/dir115
 ./run --open-file /mnt/a/dir115-new -r -d -E ENOENT
 ./run --open-file /mnt/a/dir115 -r -d
 ./run --open-file /mnt/a/dir115/pop/x -r -R aaaa
 ./run --open-file /mnt/a/dir115/pop/b -r -E ENOENT
TEST rename-new-pop-dir.py:227: Rename new dir over removed unioned dir, same dirs
 ./run --mkdir /mnt/a/dir116-new 0755
 ./run --mkdir /mnt/a/dir116-new/pop 0755
 ./run --open-file /mnt/a/dir116-new/pop/b -w -c -W aaaa
- rmtree /mnt/a/dir116
 ./run --rename /mnt/a/dir116-new /mnt/a/dir116
 ./run --open-file /mnt/a/dir116-new -r -d -E ENOENT
 ./run --open-file /mnt/a/dir116 -r -d
 ./run --open-file /mnt/a/dir116/pop/b -r -R aaaa
TEST rename-new-pop-dir.py:242: Rename new dir over unlinked unioned dir
 ./run --mkdir /mnt/a/dir117-new 0755
 ./run --mkdir /mnt/a/dir117-new/pop 0755
 ./run --open-file /mnt/a/dir117-new/pop/b -w -c -W aaaa
 ./run --unlink /mnt/a/dir117 -E EISDIR
 ./run --rename /mnt/a/dir117-new /mnt/a/dir117 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir117-new -r -d
 ./run --open-file /mnt/a/dir117 -r -d
 ./run --open-file /mnt/a/dir117-new/pop/b -r -R aaaa
 ./run --open-file /mnt/a/dir117/pop/b -r -R :aaa:bbb:ccc
***
*** ./run --ov --ts=0 rename-move-dir
***
TEST rename-move-dir.py:10: Move dir into another
 ./run --rename /mnt/a/empty100 /mnt/a/dir100/empty100 -E EXDEV
 ./run --rename /mnt/a/empty100 /mnt/a/dir100/empty100 -E EXDEV
 ./run --open-file /mnt/a/dir100/empty100 -r -d -E ENOENT
 ./run --open-file /mnt/a/empty100 -r -d
***
*** ./run --ov --ts=1 rename-move-dir
***
TEST rename-move-dir.py:10: Move dir into another
 ./run --rename /mnt/a/empty100 /mnt/a/dir100/empty100 -E EXDEV
 ./run --rename /mnt/a/empty100 /mnt/a/dir100/empty100 -E EXDEV
 ./run --open-file /mnt/a/dir100/empty100 -r -d -E ENOENT
 ./run --open-file /mnt/a/empty100 -r -d
***
*** ./run --ov --ts=0 rename-mass
***
TEST rename-mass.py:15: Mass rename sequential files into each other's vacated name slots
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
TEST rename-mass.py:26: Unlink mass renamed files
 ./run --unlink /mnt/a/foo103
 ./run --unlink /mnt/a/foo104
 ./run --unlink /mnt/a/foo105
 ./run --unlink /mnt/a/foo106
***
*** ./run --ov --ts=1 rename-mass
***
TEST rename-mass.py:15: Mass rename sequential files into each other's vacated name slots
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
TEST rename-mass.py:26: Unlink mass renamed files
 ./run --unlink /mnt/a/foo103
 ./run --unlink /mnt/a/foo104
 ./run --unlink /mnt/a/foo105
 ./run --unlink /mnt/a/foo106
***
*** ./run --ov --ts=0 rename-mass-2
***
TEST rename-mass-2.py:14: Mass rename fooN_0->fooN_1->...->fooN_M
 ./run --rename /mnt/a/foo100 /mnt/a/foo100_0
 ./run --rename /mnt/a/foo101 /mnt/a/foo101_0
 ./run --rename /mnt/a/foo102 /mnt/a/foo102_0
 ./run --rename /mnt/a/foo103 /mnt/a/foo103_0
 ./run --rename /mnt/a/foo103_0 /mnt/a/foo103_1
 ./run --rename /mnt/a/foo102_0 /mnt/a/foo102_1
 ./run --rename /mnt/a/foo101_0 /mnt/a/foo101_1
 ./run --rename /mnt/a/foo100_0 /mnt/a/foo100_1
 ./run --rename /mnt/a/foo103_1 /mnt/a/foo103_2
 ./run --rename /mnt/a/foo102_1 /mnt/a/foo102_2
 ./run --rename /mnt/a/foo101_1 /mnt/a/foo101_2
 ./run --rename /mnt/a/foo100_1 /mnt/a/foo100_2
 ./run --rename /mnt/a/foo103_2 /mnt/a/foo103_3
 ./run --rename /mnt/a/foo102_2 /mnt/a/foo102_3
 ./run --rename /mnt/a/foo101_2 /mnt/a/foo101_3
 ./run --rename /mnt/a/foo100_2 /mnt/a/foo100_3
TEST rename-mass-2.py:30: Unlink mass renamed files
 ./run --unlink /mnt/a/foo100_3
 ./run --unlink /mnt/a/foo101_3
 ./run --unlink /mnt/a/foo102_3
 ./run --unlink /mnt/a/foo103_3
***
*** ./run --ov --ts=1 rename-mass-2
***
TEST rename-mass-2.py:14: Mass rename fooN_0->fooN_1->...->fooN_M
 ./run --rename /mnt/a/foo100 /mnt/a/foo100_0
 ./run --rename /mnt/a/foo101 /mnt/a/foo101_0
 ./run --rename /mnt/a/foo102 /mnt/a/foo102_0
 ./run --rename /mnt/a/foo103 /mnt/a/foo103_0
 ./run --rename /mnt/a/foo103_0 /mnt/a/foo103_1
 ./run --rename /mnt/a/foo102_0 /mnt/a/foo102_1
 ./run --rename /mnt/a/foo101_0 /mnt/a/foo101_1
 ./run --rename /mnt/a/foo100_0 /mnt/a/foo100_1
 ./run --rename /mnt/a/foo103_1 /mnt/a/foo103_2
 ./run --rename /mnt/a/foo102_1 /mnt/a/foo102_2
 ./run --rename /mnt/a/foo101_1 /mnt/a/foo101_2
 ./run --rename /mnt/a/foo100_1 /mnt/a/foo100_2
 ./run --rename /mnt/a/foo103_2 /mnt/a/foo103_3
 ./run --rename /mnt/a/foo102_2 /mnt/a/foo102_3
 ./run --rename /mnt/a/foo101_2 /mnt/a/foo101_3
 ./run --rename /mnt/a/foo100_2 /mnt/a/foo100_3
TEST rename-mass-2.py:30: Unlink mass renamed files
 ./run --unlink /mnt/a/foo100_3
 ./run --unlink /mnt/a/foo101_3
 ./run --unlink /mnt/a/foo102_3
 ./run --unlink /mnt/a/foo103_3
***
*** ./run --ov --ts=0 rename-mass-3
***
TEST rename-mass-3.py:16: Mass rename sequential files circularly
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
TEST rename-mass-3.py:29: Unlink mass renamed files
 ./run --unlink /mnt/a/foo100
 ./run --unlink /mnt/a/foo101
 ./run --unlink /mnt/a/foo102
 ./run --unlink /mnt/a/foo103 -E ENOENT
 ./run --unlink /mnt/a/foo104
 ./run --unlink /mnt/a/foo105
 ./run --unlink /mnt/a/foo106
***
*** ./run --ov --ts=1 rename-mass-3
***
TEST rename-mass-3.py:16: Mass rename sequential files circularly
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
TEST rename-mass-3.py:29: Unlink mass renamed files
 ./run --unlink /mnt/a/foo100
 ./run --unlink /mnt/a/foo101
 ./run --unlink /mnt/a/foo102
 ./run --unlink /mnt/a/foo103 -E ENOENT
 ./run --unlink /mnt/a/foo104
 ./run --unlink /mnt/a/foo105
 ./run --unlink /mnt/a/foo106
***
*** ./run --ov --ts=0 rename-mass-4
***
TEST rename-mass-4.py:16: Mass rename new sequential files circularly
 ./run --open-file /mnt/a/no_foo100 -w -c -W abcd0
 ./run --open-file /mnt/a/no_foo101 -w -c -W abcd1
 ./run --open-file /mnt/a/no_foo102 -w -c -W abcd2
 ./run --open-file /mnt/a/no_foo103 -w -c -W abcd3
 ./run --open-file /mnt/a/no_foo104 -w -c -W abcd4
 ./run --open-file /mnt/a/no_foo105 -w -c -W abcd5
 ./run --open-file /mnt/a/no_foo106 -w -c -W abcd6
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
TEST rename-mass-4.py:33: Unlink mass renamed files
 ./run --unlink /mnt/a/no_foo100
 ./run --unlink /mnt/a/no_foo101
 ./run --unlink /mnt/a/no_foo102
 ./run --unlink /mnt/a/no_foo103 -E ENOENT
 ./run --unlink /mnt/a/no_foo104
 ./run --unlink /mnt/a/no_foo105
 ./run --unlink /mnt/a/no_foo106
***
*** ./run --ov --ts=1 rename-mass-4
***
TEST rename-mass-4.py:16: Mass rename new sequential files circularly
 ./run --open-file /mnt/a/no_foo100 -w -c -W abcd0
 ./run --open-file /mnt/a/no_foo101 -w -c -W abcd1
 ./run --open-file /mnt/a/no_foo102 -w -c -W abcd2
 ./run --open-file /mnt/a/no_foo103 -w -c -W abcd3
 ./run --open-file /mnt/a/no_foo104 -w -c -W abcd4
 ./run --open-file /mnt/a/no_foo105 -w -c -W abcd5
 ./run --open-file /mnt/a/no_foo106 -w -c -W abcd6
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
TEST rename-mass-4.py:33: Unlink mass renamed files
 ./run --unlink /mnt/a/no_foo100
 ./run --unlink /mnt/a/no_foo101
 ./run --unlink /mnt/a/no_foo102
 ./run --unlink /mnt/a/no_foo103 -E ENOENT
 ./run --unlink /mnt/a/no_foo104
 ./run --unlink /mnt/a/no_foo105
 ./run --unlink /mnt/a/no_foo106
***
*** ./run --ov --ts=0 rename-mass-5
***
TEST rename-mass-5.py:16: Mass rename hardlinked sequential files circularly
 ./run --link /mnt/a/foo100 /mnt/a/no_foo100
 ./run --link /mnt/a/foo101 /mnt/a/no_foo101
 ./run --link /mnt/a/foo102 /mnt/a/no_foo102
 ./run --link /mnt/a/foo103 /mnt/a/no_foo103
 ./run --link /mnt/a/foo104 /mnt/a/no_foo104
 ./run --link /mnt/a/foo105 /mnt/a/no_foo105
 ./run --link /mnt/a/foo106 /mnt/a/no_foo106
 ./run --link /mnt/a/foo107 /mnt/a/no_foo107
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
TEST rename-mass-5.py:43: Unlink mass renamed files
 ./run --unlink /mnt/a/no_foo100
 ./run --unlink /mnt/a/no_foo101
 ./run --unlink /mnt/a/no_foo102
 ./run --unlink /mnt/a/no_foo103 -E ENOENT
 ./run --unlink /mnt/a/no_foo104
 ./run --unlink /mnt/a/no_foo105
 ./run --unlink /mnt/a/no_foo106
 ./run --unlink /mnt/a/no_foo107
 ./run --unlink /mnt/a/foo100
 ./run --unlink /mnt/a/foo101
 ./run --unlink /mnt/a/foo102 -E ENOENT
 ./run --unlink /mnt/a/foo103
 ./run --unlink /mnt/a/foo104
 ./run --unlink /mnt/a/foo105
 ./run --unlink /mnt/a/foo106
 ./run --unlink /mnt/a/foo107
***
*** ./run --ov --ts=1 rename-mass-5
***
TEST rename-mass-5.py:16: Mass rename hardlinked sequential files circularly
 ./run --link /mnt/a/foo100 /mnt/a/no_foo100
 ./run --link /mnt/a/foo101 /mnt/a/no_foo101
 ./run --link /mnt/a/foo102 /mnt/a/no_foo102
 ./run --link /mnt/a/foo103 /mnt/a/no_foo103
 ./run --link /mnt/a/foo104 /mnt/a/no_foo104
 ./run --link /mnt/a/foo105 /mnt/a/no_foo105
 ./run --link /mnt/a/foo106 /mnt/a/no_foo106
 ./run --link /mnt/a/foo107 /mnt/a/no_foo107
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
TEST rename-mass-5.py:43: Unlink mass renamed files
 ./run --unlink /mnt/a/no_foo100
 ./run --unlink /mnt/a/no_foo101
 ./run --unlink /mnt/a/no_foo102
 ./run --unlink /mnt/a/no_foo103 -E ENOENT
 ./run --unlink /mnt/a/no_foo104
 ./run --unlink /mnt/a/no_foo105
 ./run --unlink /mnt/a/no_foo106
 ./run --unlink /mnt/a/no_foo107
 ./run --unlink /mnt/a/foo100
 ./run --unlink /mnt/a/foo101
 ./run --unlink /mnt/a/foo102 -E ENOENT
 ./run --unlink /mnt/a/foo103
 ./run --unlink /mnt/a/foo104
 ./run --unlink /mnt/a/foo105
 ./run --unlink /mnt/a/foo106
 ./run --unlink /mnt/a/foo107
***
*** ./run --ov --ts=0 rename-mass-dir
***
TEST rename-mass-dir.py:16: Mass rename new sequential dirs circularly
 ./run --mkdir /mnt/a/no_dir100 0755
 ./run --mkdir /mnt/a/no_dir101 0755
 ./run --mkdir /mnt/a/no_dir102 0755
 ./run --mkdir /mnt/a/no_dir103 0755
 ./run --mkdir /mnt/a/no_dir104 0755
 ./run --mkdir /mnt/a/no_dir105 0755
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
TEST rename-mass-dir.py:33: Unlink mass renamed dirs
 ./run --rmdir /mnt/a/no_dir100
 ./run --rmdir /mnt/a/no_dir101
 ./run --rmdir /mnt/a/no_dir102
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
 ./run --rmdir /mnt/a/no_dir104
 ./run --rmdir /mnt/a/no_dir105
 ./run --rmdir /mnt/a/no_dir106
TEST rename-mass-dir.py:46: Mass rename new populated sequential dirs circularly
 ./run --mkdir /mnt/a/no_dir100 0755
 ./run --open-file /mnt/a/no_dir100/a -w -c -W abcd0
 ./run --mkdir /mnt/a/no_dir101 0755
 ./run --open-file /mnt/a/no_dir101/a -w -c -W abcd1
 ./run --mkdir /mnt/a/no_dir102 0755
 ./run --open-file /mnt/a/no_dir102/a -w -c -W abcd2
 ./run --mkdir /mnt/a/no_dir103 0755
 ./run --open-file /mnt/a/no_dir103/a -w -c -W abcd3
 ./run --mkdir /mnt/a/no_dir104 0755
 ./run --open-file /mnt/a/no_dir104/a -w -c -W abcd4
 ./run --mkdir /mnt/a/no_dir105 0755
 ./run --open-file /mnt/a/no_dir105/a -w -c -W abcd5
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
TEST rename-mass-dir.py:64: Check files in renamed dirs
 ./run --open-file /mnt/a/no_dir100/a -r -R abcd2
 ./run --open-file /mnt/a/no_dir101/a -r -R abcd3
 ./run --open-file /mnt/a/no_dir102/a -r -R abcd4
 ./run --open-file /mnt/a/no_dir104/a -r -R abcd5
 ./run --open-file /mnt/a/no_dir105/a -r -R abcd0
 ./run --open-file /mnt/a/no_dir106/a -r -R abcd1
TEST rename-mass-dir.py:87: Unlink mass renamed dirs
 ./run --unlink /mnt/a/no_dir100/a
 ./run --rmdir /mnt/a/no_dir100
 ./run --unlink /mnt/a/no_dir101/a
 ./run --rmdir /mnt/a/no_dir101
 ./run --unlink /mnt/a/no_dir102/a
 ./run --rmdir /mnt/a/no_dir102
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
 ./run --unlink /mnt/a/no_dir104/a
 ./run --rmdir /mnt/a/no_dir104
 ./run --unlink /mnt/a/no_dir105/a
 ./run --rmdir /mnt/a/no_dir105
 ./run --unlink /mnt/a/no_dir106/a
 ./run --rmdir /mnt/a/no_dir106
***
*** ./run --ov --ts=1 rename-mass-dir
***
TEST rename-mass-dir.py:16: Mass rename new sequential dirs circularly
 ./run --mkdir /mnt/a/no_dir100 0755
 ./run --mkdir /mnt/a/no_dir101 0755
 ./run --mkdir /mnt/a/no_dir102 0755
 ./run --mkdir /mnt/a/no_dir103 0755
 ./run --mkdir /mnt/a/no_dir104 0755
 ./run --mkdir /mnt/a/no_dir105 0755
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
TEST rename-mass-dir.py:33: Unlink mass renamed dirs
 ./run --rmdir /mnt/a/no_dir100
 ./run --rmdir /mnt/a/no_dir101
 ./run --rmdir /mnt/a/no_dir102
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
 ./run --rmdir /mnt/a/no_dir104
 ./run --rmdir /mnt/a/no_dir105
 ./run --rmdir /mnt/a/no_dir106
TEST rename-mass-dir.py:46: Mass rename new populated sequential dirs circularly
 ./run --mkdir /mnt/a/no_dir100 0755
 ./run --open-file /mnt/a/no_dir100/a -w -c -W abcd0
 ./run --mkdir /mnt/a/no_dir101 0755
 ./run --open-file /mnt/a/no_dir101/a -w -c -W abcd1
 ./run --mkdir /mnt/a/no_dir102 0755
 ./run --open-file /mnt/a/no_dir102/a -w -c -W abcd2
 ./run --mkdir /mnt/a/no_dir103 0755
 ./run --open-file /mnt/a/no_dir103/a -w -c -W abcd3
 ./run --mkdir /mnt/a/no_dir104 0755
 ./run --open-file /mnt/a/no_dir104/a -w -c -W abcd4
 ./run --mkdir /mnt/a/no_dir105 0755
 ./run --open-file /mnt/a/no_dir105/a -w -c -W abcd5
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
TEST rename-mass-dir.py:64: Check files in renamed dirs
 ./run --open-file /mnt/a/no_dir100/a -r -R abcd2
 ./run --open-file /mnt/a/no_dir101/a -r -R abcd3
 ./run --open-file /mnt/a/no_dir102/a -r -R abcd4
 ./run --open-file /mnt/a/no_dir104/a -r -R abcd5
 ./run --open-file /mnt/a/no_dir105/a -r -R abcd0
 ./run --open-file /mnt/a/no_dir106/a -r -R abcd1
TEST rename-mass-dir.py:87: Unlink mass renamed dirs
 ./run --unlink /mnt/a/no_dir100/a
 ./run --rmdir /mnt/a/no_dir100
 ./run --unlink /mnt/a/no_dir101/a
 ./run --rmdir /mnt/a/no_dir101
 ./run --unlink /mnt/a/no_dir102/a
 ./run --rmdir /mnt/a/no_dir102
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
 ./run --unlink /mnt/a/no_dir104/a
 ./run --rmdir /mnt/a/no_dir104
 ./run --unlink /mnt/a/no_dir105/a
 ./run --rmdir /mnt/a/no_dir105
 ./run --unlink /mnt/a/no_dir106/a
 ./run --rmdir /mnt/a/no_dir106
***
*** ./run --ov --ts=0 rename-mass-sym
***
TEST rename-mass-sym.py:16: Mass rename sequential symlinks circularly
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
TEST rename-mass-sym.py:29: Check renamed symlink contents
 ./run --readlink /mnt/a/direct_sym100 -R ../a/foo102
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym101 -R ../a/foo103
 ./run --open-file /mnt/a/direct_sym101 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym102 -R ../a/foo104
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym104 -R ../a/foo105
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym105 -R ../a/foo100
 ./run --open-file /mnt/a/direct_sym105 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym106 -R ../a/foo101
 ./run --open-file /mnt/a/direct_sym106 -r -R :xxx:yyy:zzz
TEST rename-mass-sym.py:66: Mass rename sequential dir symlinks circularly
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
TEST rename-mass-sym.py:79: Check renamed symlink contents
 ./run --readlink /mnt/a/direct_dir_sym100 -R ../a/dir102
 ./run --open-file /mnt/a/direct_dir_sym100 -r -d
 ./run --readlink /mnt/a/direct_dir_sym101 -R ../a/dir103
 ./run --open-file /mnt/a/direct_dir_sym101 -r -d
 ./run --readlink /mnt/a/direct_dir_sym102 -R ../a/dir104
 ./run --open-file /mnt/a/direct_dir_sym102 -r -d
 ./run --readlink /mnt/a/direct_dir_sym104 -R ../a/dir105
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d
 ./run --readlink /mnt/a/direct_dir_sym105 -R ../a/dir100
 ./run --open-file /mnt/a/direct_dir_sym105 -r -d
 ./run --readlink /mnt/a/direct_dir_sym106 -R ../a/dir101
 ./run --open-file /mnt/a/direct_dir_sym106 -r -d
TEST rename-mass-sym.py:103: Unlink mass renamed symlinks
 ./run --rmdir /mnt/a/direct_dir_sym100 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym100
 ./run --rmdir /mnt/a/direct_dir_sym101 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym101
 ./run --rmdir /mnt/a/direct_dir_sym102 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym102
 ./run --unlink /mnt/a/direct_dir_sym103 -E ENOENT
 ./run --rmdir /mnt/a/direct_dir_sym104 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym104
 ./run --rmdir /mnt/a/direct_dir_sym105 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym105
 ./run --rmdir /mnt/a/direct_dir_sym106 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym106
 ./run --rmdir /mnt/a/direct_dir_sym107 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym107
***
*** ./run --ov --ts=1 rename-mass-sym
***
TEST rename-mass-sym.py:16: Mass rename sequential symlinks circularly
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
TEST rename-mass-sym.py:29: Check renamed symlink contents
 ./run --readlink /mnt/a/direct_sym100 -R ../a/foo102
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym101 -R ../a/foo103
 ./run --open-file /mnt/a/direct_sym101 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym102 -R ../a/foo104
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym104 -R ../a/foo105
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym105 -R ../a/foo100
 ./run --open-file /mnt/a/direct_sym105 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym106 -R ../a/foo101
 ./run --open-file /mnt/a/direct_sym106 -r -R :xxx:yyy:zzz
TEST rename-mass-sym.py:66: Mass rename sequential dir symlinks circularly
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
TEST rename-mass-sym.py:79: Check renamed symlink contents
 ./run --readlink /mnt/a/direct_dir_sym100 -R ../a/dir102
 ./run --open-file /mnt/a/direct_dir_sym100 -r -d
 ./run --readlink /mnt/a/direct_dir_sym101 -R ../a/dir103
 ./run --open-file /mnt/a/direct_dir_sym101 -r -d
 ./run --readlink /mnt/a/direct_dir_sym102 -R ../a/dir104
 ./run --open-file /mnt/a/direct_dir_sym102 -r -d
 ./run --readlink /mnt/a/direct_dir_sym104 -R ../a/dir105
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d
 ./run --readlink /mnt/a/direct_dir_sym105 -R ../a/dir100
 ./run --open-file /mnt/a/direct_dir_sym105 -r -d
 ./run --readlink /mnt/a/direct_dir_sym106 -R ../a/dir101
 ./run --open-file /mnt/a/direct_dir_sym106 -r -d
TEST rename-mass-sym.py:103: Unlink mass renamed symlinks
 ./run --rmdir /mnt/a/direct_dir_sym100 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym100
 ./run --rmdir /mnt/a/direct_dir_sym101 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym101
 ./run --rmdir /mnt/a/direct_dir_sym102 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym102
 ./run --unlink /mnt/a/direct_dir_sym103 -E ENOENT
 ./run --rmdir /mnt/a/direct_dir_sym104 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym104
 ./run --rmdir /mnt/a/direct_dir_sym105 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym105
 ./run --rmdir /mnt/a/direct_dir_sym106 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym106
 ./run --rmdir /mnt/a/direct_dir_sym107 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym107
***
*** ./run --ov --ts=0 impermissible
***
TEST impermissible.py:9: Impermissible open O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/rootfile100 -w -t -B -E EACCES
 ./run --open-file /mnt/a/rootfile100 -w -B -E EACCES
 ./run --open-file /mnt/a/rootfile100 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/rootfile100 -w -W shark
 ./run --open-file /mnt/a/rootfile100 -r -R sharkyyy:zzz
 ./run --open-file /mnt/a/rootfile100 -r -R sharkyyy:zzz -B
TEST impermissible.py:21: Impermissible open O_WRONLY
 ./run --open-file /mnt/a/rootfile101 -w -B -E EACCES
 ./run --open-file /mnt/a/rootfile101 -w -B -E EACCES
 ./run --open-file /mnt/a/rootfile101 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile101 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/rootfile101 -w -W shark
 ./run --open-file /mnt/a/rootfile101 -r -R sharkyyy:zzz
 ./run --open-file /mnt/a/rootfile101 -r -R sharkyyy:zzz -B
TEST impermissible.py:33: Impermissible open O_APPEND
 ./run --open-file /mnt/a/rootfile102 -a -B -E EACCES
 ./run --open-file /mnt/a/rootfile102 -a -B -E EACCES
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/rootfile102 -a -W shark
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzzshark
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzzshark -B
TEST impermissible.py:48: Impermissible truncate
 ./run --truncate /mnt/a/rootfile103 4 -B -E EACCES
 ./run --truncate /mnt/a/rootfile103 4 -B -E EACCES
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx:yyy:zzz
 ./run --truncate /mnt/a/rootfile103 4
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx -B
TEST impermissible.py:75: Impermissible utimes
 ./run --utimes /mnt/a/rootfile104 -B -E EACCES
 ./run --utimes /mnt/a/rootfile104 -B -E EACCES
 ./run --utimes /mnt/a/rootfile104
 ./run --open-file /mnt/a/rootfile104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=1 impermissible
***
TEST impermissible.py:9: Impermissible open O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/rootfile100 -w -t -B -E EACCES
 ./run --open-file /mnt/a/rootfile100 -w -B -E EACCES
 ./run --open-file /mnt/a/rootfile100 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/rootfile100 -w -W shark
 ./run --open-file /mnt/a/rootfile100 -r -R sharkyyy:zzz
 ./run --open-file /mnt/a/rootfile100 -r -R sharkyyy:zzz -B
TEST impermissible.py:21: Impermissible open O_WRONLY
 ./run --open-file /mnt/a/rootfile101 -w -B -E EACCES
 ./run --open-file /mnt/a/rootfile101 -w -B -E EACCES
 ./run --open-file /mnt/a/rootfile101 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile101 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/rootfile101 -w -W shark
 ./run --open-file /mnt/a/rootfile101 -r -R sharkyyy:zzz
 ./run --open-file /mnt/a/rootfile101 -r -R sharkyyy:zzz -B
TEST impermissible.py:33: Impermissible open O_APPEND
 ./run --open-file /mnt/a/rootfile102 -a -B -E EACCES
 ./run --open-file /mnt/a/rootfile102 -a -B -E EACCES
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/rootfile102 -a -W shark
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzzshark
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzzshark -B
TEST impermissible.py:48: Impermissible truncate
 ./run --truncate /mnt/a/rootfile103 4 -B -E EACCES
 ./run --truncate /mnt/a/rootfile103 4 -B -E EACCES
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx:yyy:zzz
 ./run --truncate /mnt/a/rootfile103 4
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx -B
TEST impermissible.py:75: Impermissible utimes
 ./run --utimes /mnt/a/rootfile104 -B -E EACCES
 ./run --utimes /mnt/a/rootfile104 -B -E EACCES
 ./run --utimes /mnt/a/rootfile104
 ./run --open-file /mnt/a/rootfile104 -r -R :xxx:yyy:zzz

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits
  2015-02-22 15:05                       ` Sedat Dilek
@ 2015-02-22 15:12                         ` Sedat Dilek
  0 siblings, 0 replies; 30+ messages in thread
From: Sedat Dilek @ 2015-02-22 15:12 UTC (permalink / raw)
  To: David Howells, Miklos Szeredi
  Cc: Linus Torvalds, Linux Kernel Mailing List, linux-fsdevel, Al Viro

[-- Attachment #1: Type: text/plain, Size: 3524 bytes --]

On Sun, Feb 22, 2015 at 4:05 PM, Sedat Dilek <sedat.dilek@gmail.com> wrote:
> On Sun, Feb 22, 2015 at 11:36 AM, Sedat Dilek <sedat.dilek@gmail.com> wrote:
>> On Sun, Feb 22, 2015 at 10:37 AM, Al Viro <viro@zeniv.linux.org.uk> wrote:
>>> On Sun, Feb 22, 2015 at 10:32:02AM +0100, Sedat Dilek wrote:
>>>
>>>> How do you test?
>>>
>>> Mostly xfstests and LTP, plus assorted tests depending on the areas touched...
>>> Any extra testing is welcome - the more, the merrier...
>>
>> As said I wanted to test with unionmount-testsuite from Git HEAD master.
>>
>> But...
>>
>> The README is out-of-date and...
>>
>> ...my python3 throws me a...
>>
>> $ LC_ALL=C ./run --ov --set-up 2>&1 | tee
>> ../unionmount-testsuite-log_ov-set-up_$(uname -r).txt
>> Traceback (most recent call last):
>>   File "./run", line 107, in <module>
>>     set_up(ctx)
>>   File "/home/wearefam/src/unionmount-testsuite/unionmount-testsuite-git/set_up.py",
>> line 26, in set_up
>>     os.sync()
>> AttributeError: 'module' object has no attribute 'sync'
>>
>> $ dpkg -l | grep python3
>> ii  python3
>> 3.2.3-0ubuntu1.2                                    interactive
>> high-level object-oriented language (default python3 version)
>> ii  python3-minimal
>> 3.2.3-0ubuntu1.2                                    minimal subset of
>> the Python language (default python3 version)
>> ii  python3.2
>> 3.2.3-0ubuntu3.6                                    Interactive
>> high-level object-oriented language (version 3.2)
>> ii  python3.2-minimal
>> 3.2.3-0ubuntu3.6                                    Minimal subset of
>> the Python language (version 3.2)
>>
>> AFAICS I had reported already the README needs a refresh.
>>
>> I will continue with LTP-lite testing and fio.
>>
>
> [ +Miklos ]
>
> I switched from python-3.2 to python-3.4 from a 3rd-party PPA (see [1]
> and [2]) here on Ubuntu/precise.
>
> $ sudo add-apt-repository ppa:fkrull/deadsnakes
> $ sudo apt-get update
> $ sudo apt-get install python3.4 python3-deadsnakes
>
> $ cd /usr/bin/
> $ ln -sf python3.4 python3
>
> $ python3 --version
> Python 3.4.2
>
> David, the requirement of which minimal python3 release should be
> documented (README?).
> Thanks.
>
> As the mount-type changed mount_union.py needs a refresh, too.
> We need to distinguish when OverlayFS is built as a module.
>
> $ grep -i overlay /boot/config-3.19.0-9526.2-iniza-small
> CONFIG_OVERLAY_FS=m
>
> Formerly: CONFIG_OVERLAYFS_FS=m
>
> diff --git a/mount_union.py b/mount_union.py
> index 4999daa40989..e1963d6eb22a 100644
> --- a/mount_union.py
> +++ b/mount_union.py
> @@ -27,6 +27,6 @@ def mount_union(ctx):
>          workdir = upper_mntroot + "/work"
>          os.mkdir(upperdir)
>          os.mkdir(workdir)
> -        system("mount -t overlayfs overlayfs " + union_mntroot +
> +        system("mount -t overlay overlay " + union_mntroot +
>                 " -olowerdir=" + lower_mntroot + ",upperdir=" +
> upperdir + ",workdir=" + workdir)
>          ctx.note_upper_fs(upper_mntroot, testdir)
>
> In the end I could run unionmount-testsuite on vanilla-upstream (w/o
> vfs.git#for-linus, test results will follow).
>
> $ sudo modprobe -v overlay
>
> $ sudo LC_ALL=C ./run --ov 2>&1 | tee
> ../logs/results_unionmount-testsuite_$(uname -r).txt
>
> Have more fun!
>
> Regards,
> - Sedat -
>
>
> [1] http://askubuntu.com/a/290283
> [2] http://askubuntu.com/questions/244544/how-do-i-install-python-3-3

Vanilla-upstream plus vfs.git#for-linus is fine here (no changes in
dmesg before/after u-m testing).

- Sedat -

[-- Attachment #2: results_unionmount-testsuite_3.19.0-9526.2-iniza-small.txt --]
[-- Type: text/plain, Size: 205470 bytes --]

***
*** ./run --ov --ts=0 open-plain
***
TEST open-plain.py:10: Open O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
TEST open-plain.py:18: Open O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -W q
 ./run --open-file /mnt/a/foo101 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo101 -w -W p
 ./run --open-file /mnt/a/foo101 -r -R pxxx:yyy:zzz
TEST open-plain.py:28: Open O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -W q
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo102 -a -W p
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzzqp
TEST open-plain.py:38: Open O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -W q
 ./run --open-file /mnt/a/foo103 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo103 -r -w -W p
 ./run --open-file /mnt/a/foo103 -r -R pxxx:yyy:zzz
TEST open-plain.py:48: Open O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -W q
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo104 -r -a -W p
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=1 open-plain
***
TEST open-plain.py:10: Open O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
TEST open-plain.py:18: Open O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -W q
 ./run --open-file /mnt/a/foo101 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo101 -w -W p
 ./run --open-file /mnt/a/foo101 -r -R pxxx:yyy:zzz
TEST open-plain.py:28: Open O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -W q
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo102 -a -W p
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzzqp
TEST open-plain.py:38: Open O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -W q
 ./run --open-file /mnt/a/foo103 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo103 -r -w -W p
 ./run --open-file /mnt/a/foo103 -r -R pxxx:yyy:zzz
TEST open-plain.py:48: Open O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -W q
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo104 -r -a -W p
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=0 open-trunc
***
TEST open-trunc.py:10: Open O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -t -R 
 ./run --open-file /mnt/a/foo100 -r -t -R 
TEST open-trunc.py:18: Open O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -t -W q
 ./run --open-file /mnt/a/foo101 -r -R q
 ./run --open-file /mnt/a/foo101 -w -t -W p
 ./run --open-file /mnt/a/foo101 -r -R p
TEST open-trunc.py:28: Open O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -t -W q
 ./run --open-file /mnt/a/foo102 -r -R q
 ./run --open-file /mnt/a/foo102 -a -t -W p
 ./run --open-file /mnt/a/foo102 -r -R p
TEST open-trunc.py:38: Open O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -t -W q
 ./run --open-file /mnt/a/foo103 -r -R q
 ./run --open-file /mnt/a/foo103 -r -w -t -W p
 ./run --open-file /mnt/a/foo103 -r -R p
TEST open-trunc.py:48: Open O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -t -W q
 ./run --open-file /mnt/a/foo104 -r -R q
 ./run --open-file /mnt/a/foo104 -r -a -t -W p
 ./run --open-file /mnt/a/foo104 -r -R p
***
*** ./run --ov --ts=1 open-trunc
***
TEST open-trunc.py:10: Open O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -t -R 
 ./run --open-file /mnt/a/foo100 -r -t -R 
TEST open-trunc.py:18: Open O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -t -W q
 ./run --open-file /mnt/a/foo101 -r -R q
 ./run --open-file /mnt/a/foo101 -w -t -W p
 ./run --open-file /mnt/a/foo101 -r -R p
TEST open-trunc.py:28: Open O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -t -W q
 ./run --open-file /mnt/a/foo102 -r -R q
 ./run --open-file /mnt/a/foo102 -a -t -W p
 ./run --open-file /mnt/a/foo102 -r -R p
TEST open-trunc.py:38: Open O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -t -W q
 ./run --open-file /mnt/a/foo103 -r -R q
 ./run --open-file /mnt/a/foo103 -r -w -t -W p
 ./run --open-file /mnt/a/foo103 -r -R p
TEST open-trunc.py:48: Open O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -t -W q
 ./run --open-file /mnt/a/foo104 -r -R q
 ./run --open-file /mnt/a/foo104 -r -a -t -W p
 ./run --open-file /mnt/a/foo104 -r -R p
***
*** ./run --ov --ts=0 open-creat
***
TEST open-creat.py:10: Open O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo100 -r -c -R :xxx:yyy:zzz
TEST open-creat.py:18: Open O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -W q
 ./run --open-file /mnt/a/foo101 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo101 -w -c -W p
 ./run --open-file /mnt/a/foo101 -r -c -R pxxx:yyy:zzz
TEST open-creat.py:28: Open O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -W q
 ./run --open-file /mnt/a/foo102 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo102 -a -c -W p
 ./run --open-file /mnt/a/foo102 -r -c -R :xxx:yyy:zzzqp
TEST open-creat.py:38: Open O_CREAT|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -W q
 ./run --open-file /mnt/a/foo103 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo103 -r -w -c -W p
 ./run --open-file /mnt/a/foo103 -r -c -R pxxx:yyy:zzz
TEST open-creat.py:48: Open O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -W q
 ./run --open-file /mnt/a/foo104 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo104 -r -a -c -W p
 ./run --open-file /mnt/a/foo104 -r -c -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=1 open-creat
***
TEST open-creat.py:10: Open O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo100 -r -c -R :xxx:yyy:zzz
TEST open-creat.py:18: Open O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -W q
 ./run --open-file /mnt/a/foo101 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo101 -w -c -W p
 ./run --open-file /mnt/a/foo101 -r -c -R pxxx:yyy:zzz
TEST open-creat.py:28: Open O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -W q
 ./run --open-file /mnt/a/foo102 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo102 -a -c -W p
 ./run --open-file /mnt/a/foo102 -r -c -R :xxx:yyy:zzzqp
TEST open-creat.py:38: Open O_CREAT|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -W q
 ./run --open-file /mnt/a/foo103 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/foo103 -r -w -c -W p
 ./run --open-file /mnt/a/foo103 -r -c -R pxxx:yyy:zzz
TEST open-creat.py:48: Open O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -W q
 ./run --open-file /mnt/a/foo104 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/foo104 -r -a -c -W p
 ./run --open-file /mnt/a/foo104 -r -c -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=0 open-creat-trunc
***
TEST open-creat-trunc.py:10: Open O_CREAT|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -t -R 
 ./run --open-file /mnt/a/foo100 -r -c -t -R 
TEST open-creat-trunc.py:18: Open O_CREAT|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -t -W q
 ./run --open-file /mnt/a/foo101 -r -R q
 ./run --open-file /mnt/a/foo101 -w -c -t -W p
 ./run --open-file /mnt/a/foo101 -r -R p
TEST open-creat-trunc.py:28: Open O_CREAT|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -t -W q
 ./run --open-file /mnt/a/foo102 -r -R q
 ./run --open-file /mnt/a/foo102 -a -c -t -W p
 ./run --open-file /mnt/a/foo102 -r -R p
TEST open-creat-trunc.py:38: Open O_CREAT|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -t -W q
 ./run --open-file /mnt/a/foo103 -r -R q
 ./run --open-file /mnt/a/foo103 -r -w -c -t -W p
 ./run --open-file /mnt/a/foo103 -r -R p
TEST open-creat-trunc.py:48: Open O_CREAT|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -t -W q
 ./run --open-file /mnt/a/foo104 -r -R q
 ./run --open-file /mnt/a/foo104 -r -a -c -t -W p
 ./run --open-file /mnt/a/foo104 -r -R p
***
*** ./run --ov --ts=1 open-creat-trunc
***
TEST open-creat-trunc.py:10: Open O_CREAT|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -t -R 
 ./run --open-file /mnt/a/foo100 -r -c -t -R 
TEST open-creat-trunc.py:18: Open O_CREAT|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -t -W q
 ./run --open-file /mnt/a/foo101 -r -R q
 ./run --open-file /mnt/a/foo101 -w -c -t -W p
 ./run --open-file /mnt/a/foo101 -r -R p
TEST open-creat-trunc.py:28: Open O_CREAT|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -t -W q
 ./run --open-file /mnt/a/foo102 -r -R q
 ./run --open-file /mnt/a/foo102 -a -c -t -W p
 ./run --open-file /mnt/a/foo102 -r -R p
TEST open-creat-trunc.py:38: Open O_CREAT|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -t -W q
 ./run --open-file /mnt/a/foo103 -r -R q
 ./run --open-file /mnt/a/foo103 -r -w -c -t -W p
 ./run --open-file /mnt/a/foo103 -r -R p
TEST open-creat-trunc.py:48: Open O_CREAT|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -t -W q
 ./run --open-file /mnt/a/foo104 -r -R q
 ./run --open-file /mnt/a/foo104 -r -a -c -t -W p
 ./run --open-file /mnt/a/foo104 -r -R p
***
*** ./run --ov --ts=0 open-creat-excl
***
TEST open-creat-excl.py:10: Open O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:18: Open O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:26: Open O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:34: Open O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:42: Open O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=1 open-creat-excl
***
TEST open-creat-excl.py:10: Open O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:18: Open O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:26: Open O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:34: Open O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST open-creat-excl.py:42: Open O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=0 open-creat-excl-trunc
***
TEST open-creat-excl-trunc.py:10: Open O_CREAT|O_EXCL|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:18: Open O_CREAT|O_EXCL|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:26: Open O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:34: Open O_CREAT|O_EXCL|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:42: Open O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=1 open-creat-excl-trunc
***
TEST open-creat-excl-trunc.py:10: Open O_CREAT|O_EXCL|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/foo100 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:18: Open O_CREAT|O_EXCL|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/foo101 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:26: Open O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/foo102 -a -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:34: Open O_CREAT|O_EXCL|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/foo103 -r -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST open-creat-excl-trunc.py:42: Open O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/foo104 -r -a -c -e -t -E EEXIST
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=0 noent-plain
***
TEST noent-plain.py:10: Open O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
TEST noent-plain.py:18: Open O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -w -E ENOENT
TEST noent-plain.py:26: Open O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -a -E ENOENT
TEST noent-plain.py:34: Open O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -E ENOENT
 ./run --open-file /mnt/a/no_foo103 -r -w -E ENOENT
TEST noent-plain.py:42: Open O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -E ENOENT
 ./run --open-file /mnt/a/no_foo104 -r -a -E ENOENT
***
*** ./run --ov --ts=1 noent-plain
***
TEST noent-plain.py:10: Open O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
TEST noent-plain.py:18: Open O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -w -E ENOENT
TEST noent-plain.py:26: Open O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -a -E ENOENT
TEST noent-plain.py:34: Open O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -E ENOENT
 ./run --open-file /mnt/a/no_foo103 -r -w -E ENOENT
TEST noent-plain.py:42: Open O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -E ENOENT
 ./run --open-file /mnt/a/no_foo104 -r -a -E ENOENT
***
*** ./run --ov --ts=0 noent-trunc
***
TEST noent-trunc.py:10: Open O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -t -E ENOENT
 ./run --open-file /mnt/a/no_foo100 -r -t -E ENOENT
TEST noent-trunc.py:18: Open O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -t -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -w -t -E ENOENT
TEST noent-trunc.py:26: Open O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -t -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -a -t -E ENOENT
TEST noent-trunc.py:34: Open O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -t -E ENOENT
 ./run --open-file /mnt/a/no_foo103 -r -w -t -E ENOENT
TEST noent-trunc.py:42: Open O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -t -E ENOENT
 ./run --open-file /mnt/a/no_foo104 -r -a -t -E ENOENT
***
*** ./run --ov --ts=1 noent-trunc
***
TEST noent-trunc.py:10: Open O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -t -E ENOENT
 ./run --open-file /mnt/a/no_foo100 -r -t -E ENOENT
TEST noent-trunc.py:18: Open O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -t -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -w -t -E ENOENT
TEST noent-trunc.py:26: Open O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -t -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -a -t -E ENOENT
TEST noent-trunc.py:34: Open O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -t -E ENOENT
 ./run --open-file /mnt/a/no_foo103 -r -w -t -E ENOENT
TEST noent-trunc.py:42: Open O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -t -E ENOENT
 ./run --open-file /mnt/a/no_foo104 -r -a -t -E ENOENT
***
*** ./run --ov --ts=0 noent-creat
***
TEST noent-creat.py:10: Create O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -R 
TEST noent-creat.py:18: Create O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -W p
 ./run --open-file /mnt/a/no_foo101 -r -R p
TEST noent-creat.py:28: Create O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -W p
 ./run --open-file /mnt/a/no_foo102 -r -R qp
TEST noent-creat.py:38: Create O_CREAT|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -W p
 ./run --open-file /mnt/a/no_foo103 -r -R p
TEST noent-creat.py:48: Create O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -W p
 ./run --open-file /mnt/a/no_foo104 -r -R qp
***
*** ./run --ov --ts=1 noent-creat
***
TEST noent-creat.py:10: Create O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -R 
TEST noent-creat.py:18: Create O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -W p
 ./run --open-file /mnt/a/no_foo101 -r -R p
TEST noent-creat.py:28: Create O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -W p
 ./run --open-file /mnt/a/no_foo102 -r -R qp
TEST noent-creat.py:38: Create O_CREAT|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -W p
 ./run --open-file /mnt/a/no_foo103 -r -R p
TEST noent-creat.py:48: Create O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -W p
 ./run --open-file /mnt/a/no_foo104 -r -R qp
***
*** ./run --ov --ts=0 noent-creat-trunc
***
TEST noent-creat-trunc.py:10: Create O_CREAT|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -t -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -t -R 
TEST noent-creat-trunc.py:18: Create O_CREAT|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -t -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -t -W p
 ./run --open-file /mnt/a/no_foo101 -r -R p
TEST noent-creat-trunc.py:28: Create O_CREAT|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -t -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -W p
 ./run --open-file /mnt/a/no_foo102 -r -R qp
TEST noent-creat-trunc.py:38: Create O_CREAT|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -t -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -W p
 ./run --open-file /mnt/a/no_foo103 -r -R p
TEST noent-creat-trunc.py:48: Create O_CREAT|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -t -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -W p
 ./run --open-file /mnt/a/no_foo104 -r -R qp
***
*** ./run --ov --ts=1 noent-creat-trunc
***
TEST noent-creat-trunc.py:10: Create O_CREAT|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -t -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -t -R 
TEST noent-creat-trunc.py:18: Create O_CREAT|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -t -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -t -W p
 ./run --open-file /mnt/a/no_foo101 -r -R p
TEST noent-creat-trunc.py:28: Create O_CREAT|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -t -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -W p
 ./run --open-file /mnt/a/no_foo102 -r -R qp
TEST noent-creat-trunc.py:38: Create O_CREAT|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -t -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -W p
 ./run --open-file /mnt/a/no_foo103 -r -R p
TEST noent-creat-trunc.py:48: Create O_CREAT|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -t -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -W p
 ./run --open-file /mnt/a/no_foo104 -r -R qp
***
*** ./run --ov --ts=0 noent-creat-excl
***
TEST noent-creat-excl.py:10: Create O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -e -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST noent-creat-excl.py:19: Create O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -e -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST noent-creat-excl.py:29: Create O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -e -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST noent-creat-excl.py:39: Create O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST noent-creat-excl.py:49: Create O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=1 noent-creat-excl
***
TEST noent-creat-excl.py:10: Create O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -e -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST noent-creat-excl.py:19: Create O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -e -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST noent-creat-excl.py:29: Create O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -e -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST noent-creat-excl.py:39: Create O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST noent-creat-excl.py:49: Create O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=0 noent-creat-excl-trunc
***
TEST noent-creat-excl-trunc.py:10: Create O_CREAT|O_EXCL|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -e -t -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST noent-creat-excl-trunc.py:19: Create O_CREAT|O_EXCL|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -e -t -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST noent-creat-excl-trunc.py:29: Create O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -e -t -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST noent-creat-excl-trunc.py:39: Create O_CREAT|O_EXCL|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -t -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST noent-creat-excl-trunc.py:49: Create O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -t -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=1 noent-creat-excl-trunc
***
TEST noent-creat-excl-trunc.py:10: Create O_CREAT|O_EXCL|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/no_foo100 -r -c -e -t -R 
 ./run --open-file /mnt/a/no_foo100 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST noent-creat-excl-trunc.py:19: Create O_CREAT|O_EXCL|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/no_foo101 -w -c -e -t -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
 ./run --open-file /mnt/a/no_foo101 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST noent-creat-excl-trunc.py:29: Create O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/no_foo102 -a -c -e -t -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
 ./run --open-file /mnt/a/no_foo102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST noent-creat-excl-trunc.py:39: Create O_CREAT|O_EXCL|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -t -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
 ./run --open-file /mnt/a/no_foo103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST noent-creat-excl-trunc.py:49: Create O_CREAT|O_EXCL|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -t -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
 ./run --open-file /mnt/a/no_foo104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=0 sym1-plain
***
TEST sym1-plain.py:10: Open(symlink) O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
TEST sym1-plain.py:19: Open(symlink) O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -W q
 ./run --open-file /mnt/a/direct_sym101 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym101 -w -W p
 ./run --open-file /mnt/a/direct_sym101 -r -R pxxx:yyy:zzz
TEST sym1-plain.py:30: Open(symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -W q
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym102 -a -W p
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzzqp
TEST sym1-plain.py:41: Open(symlink) O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -W q
 ./run --open-file /mnt/a/direct_sym103 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym103 -r -w -W p
 ./run --open-file /mnt/a/direct_sym103 -r -R pxxx:yyy:zzz
TEST sym1-plain.py:52: Open(symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -W q
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym104 -r -a -W p
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=1 sym1-plain
***
TEST sym1-plain.py:10: Open(symlink) O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
TEST sym1-plain.py:19: Open(symlink) O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -W q
 ./run --open-file /mnt/a/direct_sym101 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym101 -w -W p
 ./run --open-file /mnt/a/direct_sym101 -r -R pxxx:yyy:zzz
TEST sym1-plain.py:30: Open(symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -W q
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym102 -a -W p
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzzqp
TEST sym1-plain.py:41: Open(symlink) O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -W q
 ./run --open-file /mnt/a/direct_sym103 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym103 -r -w -W p
 ./run --open-file /mnt/a/direct_sym103 -r -R pxxx:yyy:zzz
TEST sym1-plain.py:52: Open(symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -W q
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym104 -r -a -W p
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=0 sym1-trunc
***
TEST sym1-trunc.py:10: Open(symlink) O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -t -R 
 ./run --open-file /mnt/a/direct_sym100 -r -t -R 
TEST sym1-trunc.py:19: Open(symlink) O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -t -W q
 ./run --open-file /mnt/a/direct_sym101 -r -R q
 ./run --open-file /mnt/a/direct_sym101 -w -t -W p
 ./run --open-file /mnt/a/direct_sym101 -r -R p
TEST sym1-trunc.py:30: Open(symlink) O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -t -W q
 ./run --open-file /mnt/a/direct_sym102 -r -R q
 ./run --open-file /mnt/a/direct_sym102 -a -t -W p
 ./run --open-file /mnt/a/direct_sym102 -r -R p
TEST sym1-trunc.py:41: Open(symlink) O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -t -W q
 ./run --open-file /mnt/a/direct_sym103 -r -R q
 ./run --open-file /mnt/a/direct_sym103 -r -w -t -W p
 ./run --open-file /mnt/a/direct_sym103 -r -R p
TEST sym1-trunc.py:52: Open(symlink) O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -t -W q
 ./run --open-file /mnt/a/direct_sym104 -r -R q
 ./run --open-file /mnt/a/direct_sym104 -r -a -t -W p
 ./run --open-file /mnt/a/direct_sym104 -r -R p
***
*** ./run --ov --ts=1 sym1-trunc
***
TEST sym1-trunc.py:10: Open(symlink) O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -t -R 
 ./run --open-file /mnt/a/direct_sym100 -r -t -R 
TEST sym1-trunc.py:19: Open(symlink) O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -t -W q
 ./run --open-file /mnt/a/direct_sym101 -r -R q
 ./run --open-file /mnt/a/direct_sym101 -w -t -W p
 ./run --open-file /mnt/a/direct_sym101 -r -R p
TEST sym1-trunc.py:30: Open(symlink) O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -t -W q
 ./run --open-file /mnt/a/direct_sym102 -r -R q
 ./run --open-file /mnt/a/direct_sym102 -a -t -W p
 ./run --open-file /mnt/a/direct_sym102 -r -R p
TEST sym1-trunc.py:41: Open(symlink) O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -t -W q
 ./run --open-file /mnt/a/direct_sym103 -r -R q
 ./run --open-file /mnt/a/direct_sym103 -r -w -t -W p
 ./run --open-file /mnt/a/direct_sym103 -r -R p
TEST sym1-trunc.py:52: Open(symlink) O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -t -W q
 ./run --open-file /mnt/a/direct_sym104 -r -R q
 ./run --open-file /mnt/a/direct_sym104 -r -a -t -W p
 ./run --open-file /mnt/a/direct_sym104 -r -R p
***
*** ./run --ov --ts=0 sym1-creat
***
TEST sym1-creat.py:10: Open(symlink) O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -c -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym100 -r -c -R :xxx:yyy:zzz
TEST sym1-creat.py:19: Open(symlink) O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -c -W q
 ./run --open-file /mnt/a/direct_sym101 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym101 -w -c -W p
 ./run --open-file /mnt/a/direct_sym101 -r -c -R pxxx:yyy:zzz
TEST sym1-creat.py:30: Open(symlink) O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -c -W q
 ./run --open-file /mnt/a/direct_sym102 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym102 -a -c -W p
 ./run --open-file /mnt/a/direct_sym102 -r -c -R :xxx:yyy:zzzqp
TEST sym1-creat.py:41: Open(symlink) O_CREAT|O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -c -W q
 ./run --open-file /mnt/a/direct_sym103 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym103 -r -w -c -W p
 ./run --open-file /mnt/a/direct_sym103 -r -c -R pxxx:yyy:zzz
TEST sym1-creat.py:52: Open(symlink) O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -c -W q
 ./run --open-file /mnt/a/direct_sym104 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym104 -r -a -c -W p
 ./run --open-file /mnt/a/direct_sym104 -r -c -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=1 sym1-creat
***
TEST sym1-creat.py:10: Open(symlink) O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -c -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym100 -r -c -R :xxx:yyy:zzz
TEST sym1-creat.py:19: Open(symlink) O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -c -W q
 ./run --open-file /mnt/a/direct_sym101 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym101 -w -c -W p
 ./run --open-file /mnt/a/direct_sym101 -r -c -R pxxx:yyy:zzz
TEST sym1-creat.py:30: Open(symlink) O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -c -W q
 ./run --open-file /mnt/a/direct_sym102 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym102 -a -c -W p
 ./run --open-file /mnt/a/direct_sym102 -r -c -R :xxx:yyy:zzzqp
TEST sym1-creat.py:41: Open(symlink) O_CREAT|O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -c -W q
 ./run --open-file /mnt/a/direct_sym103 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/direct_sym103 -r -w -c -W p
 ./run --open-file /mnt/a/direct_sym103 -r -c -R pxxx:yyy:zzz
TEST sym1-creat.py:52: Open(symlink) O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -c -W q
 ./run --open-file /mnt/a/direct_sym104 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/direct_sym104 -r -a -c -W p
 ./run --open-file /mnt/a/direct_sym104 -r -c -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=0 sym1-creat-excl
***
TEST sym1-creat-excl.py:10: Open(symlink) O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:19: Open(symlink) O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym101 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:28: Open(symlink) O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:37: Open(symlink) O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym103 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:46: Open(symlink) O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=1 sym1-creat-excl
***
TEST sym1-creat-excl.py:10: Open(symlink) O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/direct_sym100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:19: Open(symlink) O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/direct_sym101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym101 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:28: Open(symlink) O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_sym102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:37: Open(symlink) O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/direct_sym103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym103 -r -R :xxx:yyy:zzz
TEST sym1-creat-excl.py:46: Open(symlink) O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_sym104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=0 sym2-plain
***
TEST sym2-plain.py:10: Open(symlink->symlink) O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym100 -r -R :xxx:yyy:zzz
TEST sym2-plain.py:20: Open(symlink->symlink) O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -W q
 ./run --open-file /mnt/a/indirect_sym101 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym101 -w -W p
 ./run --open-file /mnt/a/indirect_sym101 -r -R pxxx:yyy:zzz
TEST sym2-plain.py:32: Open(symlink->symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -W q
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym102 -a -W p
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzzqp
TEST sym2-plain.py:44: Open(symlink->symlink) O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -W q
 ./run --open-file /mnt/a/indirect_sym103 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym103 -r -w -W p
 ./run --open-file /mnt/a/indirect_sym103 -r -R pxxx:yyy:zzz
TEST sym2-plain.py:56: Open(symlink->symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -W q
 ./run --open-file /mnt/a/indirect_sym104 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym104 -r -a -W p
 ./run --open-file /mnt/a/indirect_sym104 -r -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=1 sym2-plain
***
TEST sym2-plain.py:10: Open(symlink->symlink) O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym100 -r -R :xxx:yyy:zzz
TEST sym2-plain.py:20: Open(symlink->symlink) O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -W q
 ./run --open-file /mnt/a/indirect_sym101 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym101 -w -W p
 ./run --open-file /mnt/a/indirect_sym101 -r -R pxxx:yyy:zzz
TEST sym2-plain.py:32: Open(symlink->symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -W q
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym102 -a -W p
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzzqp
TEST sym2-plain.py:44: Open(symlink->symlink) O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -W q
 ./run --open-file /mnt/a/indirect_sym103 -r -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym103 -r -w -W p
 ./run --open-file /mnt/a/indirect_sym103 -r -R pxxx:yyy:zzz
TEST sym2-plain.py:56: Open(symlink->symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -W q
 ./run --open-file /mnt/a/indirect_sym104 -r -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym104 -r -a -W p
 ./run --open-file /mnt/a/indirect_sym104 -r -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=0 sym2-trunc
***
TEST sym2-trunc.py:10: Open(symlink->symlink) O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -t -R 
 ./run --open-file /mnt/a/indirect_sym100 -r -t -R 
TEST sym2-trunc.py:20: Open(symlink->symlink) O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -t -W q
 ./run --open-file /mnt/a/indirect_sym101 -r -R q
 ./run --open-file /mnt/a/indirect_sym101 -w -t -W p
 ./run --open-file /mnt/a/indirect_sym101 -r -R p
TEST sym2-trunc.py:32: Open(symlink->symlink) O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -t -W q
 ./run --open-file /mnt/a/indirect_sym102 -r -R q
 ./run --open-file /mnt/a/indirect_sym102 -a -t -W p
 ./run --open-file /mnt/a/indirect_sym102 -r -R p
TEST sym2-trunc.py:44: Open(symlink->symlink) O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -t -W q
 ./run --open-file /mnt/a/indirect_sym103 -r -R q
 ./run --open-file /mnt/a/indirect_sym103 -r -w -t -W p
 ./run --open-file /mnt/a/indirect_sym103 -r -R p
TEST sym2-trunc.py:56: Open(symlink->symlink) O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -t -W q
 ./run --open-file /mnt/a/indirect_sym104 -r -R q
 ./run --open-file /mnt/a/indirect_sym104 -r -a -t -W p
 ./run --open-file /mnt/a/indirect_sym104 -r -R p
***
*** ./run --ov --ts=1 sym2-trunc
***
TEST sym2-trunc.py:10: Open(symlink->symlink) O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -t -R 
 ./run --open-file /mnt/a/indirect_sym100 -r -t -R 
TEST sym2-trunc.py:20: Open(symlink->symlink) O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -t -W q
 ./run --open-file /mnt/a/indirect_sym101 -r -R q
 ./run --open-file /mnt/a/indirect_sym101 -w -t -W p
 ./run --open-file /mnt/a/indirect_sym101 -r -R p
TEST sym2-trunc.py:32: Open(symlink->symlink) O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -t -W q
 ./run --open-file /mnt/a/indirect_sym102 -r -R q
 ./run --open-file /mnt/a/indirect_sym102 -a -t -W p
 ./run --open-file /mnt/a/indirect_sym102 -r -R p
TEST sym2-trunc.py:44: Open(symlink->symlink) O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -t -W q
 ./run --open-file /mnt/a/indirect_sym103 -r -R q
 ./run --open-file /mnt/a/indirect_sym103 -r -w -t -W p
 ./run --open-file /mnt/a/indirect_sym103 -r -R p
TEST sym2-trunc.py:56: Open(symlink->symlink) O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -t -W q
 ./run --open-file /mnt/a/indirect_sym104 -r -R q
 ./run --open-file /mnt/a/indirect_sym104 -r -a -t -W p
 ./run --open-file /mnt/a/indirect_sym104 -r -R p
***
*** ./run --ov --ts=0 sym2-creat
***
TEST sym2-creat.py:10: Open(symlink->symlink) O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -c -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym100 -r -c -R :xxx:yyy:zzz
TEST sym2-creat.py:20: Open(symlink->symlink) O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -c -W q
 ./run --open-file /mnt/a/indirect_sym101 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym101 -w -c -W p
 ./run --open-file /mnt/a/indirect_sym101 -r -c -R pxxx:yyy:zzz
TEST sym2-creat.py:32: Open(symlink->symlink) O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -c -W q
 ./run --open-file /mnt/a/indirect_sym102 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym102 -a -c -W p
 ./run --open-file /mnt/a/indirect_sym102 -r -c -R :xxx:yyy:zzzqp
TEST sym2-creat.py:44: Open(symlink->symlink) O_CREAT|O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -c -W q
 ./run --open-file /mnt/a/indirect_sym103 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym103 -r -w -c -W p
 ./run --open-file /mnt/a/indirect_sym103 -r -c -R pxxx:yyy:zzz
TEST sym2-creat.py:56: Open(symlink->symlink) O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -c -W q
 ./run --open-file /mnt/a/indirect_sym104 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym104 -r -a -c -W p
 ./run --open-file /mnt/a/indirect_sym104 -r -c -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=1 sym2-creat
***
TEST sym2-creat.py:10: Open(symlink->symlink) O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -c -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym100 -r -c -R :xxx:yyy:zzz
TEST sym2-creat.py:20: Open(symlink->symlink) O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -c -W q
 ./run --open-file /mnt/a/indirect_sym101 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym101 -w -c -W p
 ./run --open-file /mnt/a/indirect_sym101 -r -c -R pxxx:yyy:zzz
TEST sym2-creat.py:32: Open(symlink->symlink) O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -c -W q
 ./run --open-file /mnt/a/indirect_sym102 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym102 -a -c -W p
 ./run --open-file /mnt/a/indirect_sym102 -r -c -R :xxx:yyy:zzzqp
TEST sym2-creat.py:44: Open(symlink->symlink) O_CREAT|O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -c -W q
 ./run --open-file /mnt/a/indirect_sym103 -r -c -R qxxx:yyy:zzz
 ./run --open-file /mnt/a/indirect_sym103 -r -w -c -W p
 ./run --open-file /mnt/a/indirect_sym103 -r -c -R pxxx:yyy:zzz
TEST sym2-creat.py:56: Open(symlink->symlink) O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -c -W q
 ./run --open-file /mnt/a/indirect_sym104 -r -c -R :xxx:yyy:zzzq
 ./run --open-file /mnt/a/indirect_sym104 -r -a -c -W p
 ./run --open-file /mnt/a/indirect_sym104 -r -c -R :xxx:yyy:zzzqp
***
*** ./run --ov --ts=0 sym2-creat-excl
***
TEST sym2-creat-excl.py:10: Open(symlink->symlink) O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym100 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:20: Open(symlink->symlink) O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym101 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:30: Open(symlink->symlink) O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:40: Open(symlink->symlink) O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym103 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:50: Open(symlink->symlink) O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=1 sym2-creat-excl
***
TEST sym2-creat-excl.py:10: Open(symlink->symlink) O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/indirect_sym100 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym100 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:20: Open(symlink->symlink) O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym101 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym101 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:30: Open(symlink->symlink) O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_sym102 -a -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:40: Open(symlink->symlink) O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/indirect_sym103 -r -w -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym103 -r -R :xxx:yyy:zzz
TEST sym2-creat-excl.py:50: Open(symlink->symlink) O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_sym104 -r -a -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_sym104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=0 symx-plain
***
TEST symx-plain.py:10: Open(broken) O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
TEST symx-plain.py:19: Open(broken) O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -r -E ENOENT
TEST symx-plain.py:28: Open(broken) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
TEST symx-plain.py:37: Open(broken) O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -E ENOENT
 ./run --open-file /mnt/a/no_foo103 -r -E ENOENT
TEST symx-plain.py:46: Open(broken) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -E ENOENT
 ./run --open-file /mnt/a/no_foo104 -r -E ENOENT
***
*** ./run --ov --ts=1 symx-plain
***
TEST symx-plain.py:10: Open(broken) O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
TEST symx-plain.py:19: Open(broken) O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -r -E ENOENT
TEST symx-plain.py:28: Open(broken) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
TEST symx-plain.py:37: Open(broken) O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -E ENOENT
 ./run --open-file /mnt/a/no_foo103 -r -E ENOENT
TEST symx-plain.py:46: Open(broken) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -E ENOENT
 ./run --open-file /mnt/a/no_foo104 -r -E ENOENT
***
*** ./run --ov --ts=0 symx-trunc
***
TEST symx-trunc.py:10: Open(broken) O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -t -E ENOENT
TEST symx-trunc.py:18: Open(broken) O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -t -E ENOENT
TEST symx-trunc.py:26: Open(broken) O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -t -E ENOENT
TEST symx-trunc.py:34: Open(broken) O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -t -E ENOENT
TEST symx-trunc.py:42: Open(broken) O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -t -E ENOENT
***
*** ./run --ov --ts=1 symx-trunc
***
TEST symx-trunc.py:10: Open(broken) O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -t -E ENOENT
TEST symx-trunc.py:18: Open(broken) O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -t -E ENOENT
TEST symx-trunc.py:26: Open(broken) O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -t -E ENOENT
TEST symx-trunc.py:34: Open(broken) O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -t -E ENOENT
TEST symx-trunc.py:42: Open(broken) O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -t -E ENOENT
***
*** ./run --ov --ts=0 symx-creat
***
TEST symx-creat.py:10: Open(broken) O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -c -R 
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST symx-creat.py:19: Open(broken) O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -c -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST symx-creat.py:28: Open(broken) O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -c -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST symx-creat.py:37: Open(broken) O_CREAT|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -c -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST symx-creat.py:46: Open(broken) O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -c -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=1 symx-creat
***
TEST symx-creat.py:10: Open(broken) O_CREAT|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -c -R 
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST symx-creat.py:19: Open(broken) O_CREAT|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -c -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST symx-creat.py:28: Open(broken) O_CREAT|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -c -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST symx-creat.py:37: Open(broken) O_CREAT|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -c -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST symx-creat.py:46: Open(broken) O_CREAT|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -c -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=0 symx-creat-excl
***
TEST symx-creat-excl.py:10: Open(broken) O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -c -e -E EEXIST
TEST symx-creat-excl.py:18: Open(broken) O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -c -e -E EEXIST
TEST symx-creat-excl.py:26: Open(broken) O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -c -e -E EEXIST
TEST symx-creat-excl.py:34: Open(broken) O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -c -e -E EEXIST
TEST symx-creat-excl.py:42: Open(broken) O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -c -e -E EEXIST
***
*** ./run --ov --ts=1 symx-creat-excl
***
TEST symx-creat-excl.py:10: Open(broken) O_CREAT|O_EXCL|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -c -e -E EEXIST
TEST symx-creat-excl.py:18: Open(broken) O_CREAT|O_EXCL|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -c -e -E EEXIST
TEST symx-creat-excl.py:26: Open(broken) O_CREAT|O_EXCL|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -c -e -E EEXIST
TEST symx-creat-excl.py:34: Open(broken) O_CREAT|O_EXCL|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -c -e -E EEXIST
TEST symx-creat-excl.py:42: Open(broken) O_CREAT|O_EXCL|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -c -e -E EEXIST
***
*** ./run --ov --ts=0 symx-creat-trunc
***
TEST symx-creat-trunc.py:10: Open(broken) O_CREAT|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -c -t -R 
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST symx-creat-trunc.py:19: Open(broken) O_CREAT|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -c -t -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST symx-creat-trunc.py:28: Open(broken) O_CREAT|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -c -t -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST symx-creat-trunc.py:37: Open(broken) O_CREAT|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -c -t -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST symx-creat-trunc.py:46: Open(broken) O_CREAT|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -c -t -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=1 symx-creat-trunc
***
TEST symx-creat-trunc.py:10: Open(broken) O_CREAT|O_TRUNC|O_RDONLY
 ./run --open-file /mnt/a/pointless100 -r -c -t -R 
 ./run --open-file /mnt/a/no_foo100 -r -R 
TEST symx-creat-trunc.py:19: Open(broken) O_CREAT|O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/pointless101 -w -c -t -W q
 ./run --open-file /mnt/a/no_foo101 -r -R q
TEST symx-creat-trunc.py:28: Open(broken) O_CREAT|O_TRUNC|O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/pointless102 -a -c -t -W q
 ./run --open-file /mnt/a/no_foo102 -r -R q
TEST symx-creat-trunc.py:37: Open(broken) O_CREAT|O_TRUNC|O_RDWR
 ./run --open-file /mnt/a/pointless103 -r -w -c -t -W q
 ./run --open-file /mnt/a/no_foo103 -r -R q
TEST symx-creat-trunc.py:46: Open(broken) O_CREAT|O_TRUNC|O_APPEND|O_RDWR
 ./run --open-file /mnt/a/pointless104 -r -a -c -t -W q
 ./run --open-file /mnt/a/no_foo104 -r -R q
***
*** ./run --ov --ts=0 truncate
***
TEST truncate.py:9: Truncate file
 ./run --truncate /mnt/a/foo100 0
 ./run --truncate /mnt/a/foo101 1
 ./run --open-file /mnt/a/foo101 -r -R :
 ./run --truncate /mnt/a/foo102 2
 ./run --open-file /mnt/a/foo102 -r -R :x
 ./run --truncate /mnt/a/foo103 3
 ./run --open-file /mnt/a/foo103 -r -R :xx
 ./run --truncate /mnt/a/foo104 4
 ./run --open-file /mnt/a/foo104 -r -R :xxx
 ./run --truncate /mnt/a/foo105 5
 ./run --open-file /mnt/a/foo105 -r -R :xxx:
 ./run --truncate /mnt/a/foo106 6
 ./run --open-file /mnt/a/foo106 -r -R :xxx:y
 ./run --truncate /mnt/a/foo107 7
 ./run --open-file /mnt/a/foo107 -r -R :xxx:yy
 ./run --truncate /mnt/a/foo108 8
 ./run --open-file /mnt/a/foo108 -r -R :xxx:yyy
 ./run --truncate /mnt/a/foo109 9
 ./run --open-file /mnt/a/foo109 -r -R :xxx:yyy:
 ./run --truncate /mnt/a/foo110 10
 ./run --open-file /mnt/a/foo110 -r -R :xxx:yyy:z
 ./run --truncate /mnt/a/foo111 11
 ./run --open-file /mnt/a/foo111 -r -R :xxx:yyy:zz
 ./run --truncate /mnt/a/foo112 12
 ./run --open-file /mnt/a/foo112 -r -R :xxx:yyy:zzz
 ./run --truncate /mnt/a/foo113 13
 ./run --open-file /mnt/a/foo113 -r -R :xxx:yyy:zzz\0
 ./run --truncate /mnt/a/foo114 14
 ./run --open-file /mnt/a/foo114 -r -R :xxx:yyy:zzz\0\0
 ./run --truncate /mnt/a/foo115 15
 ./run --open-file /mnt/a/foo115 -r -R :xxx:yyy:zzz\0\0\0
 ./run --truncate /mnt/a/foo116 16
 ./run --open-file /mnt/a/foo116 -r -R :xxx:yyy:zzz\0\0\0\0
 ./run --truncate /mnt/a/foo117 17
 ./run --open-file /mnt/a/foo117 -r -R :xxx:yyy:zzz\0\0\0\0\0
 ./run --truncate /mnt/a/foo118 18
 ./run --open-file /mnt/a/foo118 -r -R :xxx:yyy:zzz\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo119 19
 ./run --open-file /mnt/a/foo119 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo120 20
 ./run --open-file /mnt/a/foo120 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo121 21
 ./run --open-file /mnt/a/foo121 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo122 22
 ./run --open-file /mnt/a/foo122 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo123 23
 ./run --open-file /mnt/a/foo123 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo124 24
 ./run --open-file /mnt/a/foo124 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo125 25
 ./run --open-file /mnt/a/foo125 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo126 26
 ./run --open-file /mnt/a/foo126 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo127 27
 ./run --open-file /mnt/a/foo127 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo128 28
 ./run --open-file /mnt/a/foo128 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
***
*** ./run --ov --ts=1 truncate
***
TEST truncate.py:9: Truncate file
 ./run --truncate /mnt/a/foo100 0
 ./run --truncate /mnt/a/foo101 1
 ./run --open-file /mnt/a/foo101 -r -R :
 ./run --truncate /mnt/a/foo102 2
 ./run --open-file /mnt/a/foo102 -r -R :x
 ./run --truncate /mnt/a/foo103 3
 ./run --open-file /mnt/a/foo103 -r -R :xx
 ./run --truncate /mnt/a/foo104 4
 ./run --open-file /mnt/a/foo104 -r -R :xxx
 ./run --truncate /mnt/a/foo105 5
 ./run --open-file /mnt/a/foo105 -r -R :xxx:
 ./run --truncate /mnt/a/foo106 6
 ./run --open-file /mnt/a/foo106 -r -R :xxx:y
 ./run --truncate /mnt/a/foo107 7
 ./run --open-file /mnt/a/foo107 -r -R :xxx:yy
 ./run --truncate /mnt/a/foo108 8
 ./run --open-file /mnt/a/foo108 -r -R :xxx:yyy
 ./run --truncate /mnt/a/foo109 9
 ./run --open-file /mnt/a/foo109 -r -R :xxx:yyy:
 ./run --truncate /mnt/a/foo110 10
 ./run --open-file /mnt/a/foo110 -r -R :xxx:yyy:z
 ./run --truncate /mnt/a/foo111 11
 ./run --open-file /mnt/a/foo111 -r -R :xxx:yyy:zz
 ./run --truncate /mnt/a/foo112 12
 ./run --open-file /mnt/a/foo112 -r -R :xxx:yyy:zzz
 ./run --truncate /mnt/a/foo113 13
 ./run --open-file /mnt/a/foo113 -r -R :xxx:yyy:zzz\0
 ./run --truncate /mnt/a/foo114 14
 ./run --open-file /mnt/a/foo114 -r -R :xxx:yyy:zzz\0\0
 ./run --truncate /mnt/a/foo115 15
 ./run --open-file /mnt/a/foo115 -r -R :xxx:yyy:zzz\0\0\0
 ./run --truncate /mnt/a/foo116 16
 ./run --open-file /mnt/a/foo116 -r -R :xxx:yyy:zzz\0\0\0\0
 ./run --truncate /mnt/a/foo117 17
 ./run --open-file /mnt/a/foo117 -r -R :xxx:yyy:zzz\0\0\0\0\0
 ./run --truncate /mnt/a/foo118 18
 ./run --open-file /mnt/a/foo118 -r -R :xxx:yyy:zzz\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo119 19
 ./run --open-file /mnt/a/foo119 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo120 20
 ./run --open-file /mnt/a/foo120 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo121 21
 ./run --open-file /mnt/a/foo121 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo122 22
 ./run --open-file /mnt/a/foo122 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo123 23
 ./run --open-file /mnt/a/foo123 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo124 24
 ./run --open-file /mnt/a/foo124 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo125 25
 ./run --open-file /mnt/a/foo125 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo126 26
 ./run --open-file /mnt/a/foo126 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo127 27
 ./run --open-file /mnt/a/foo127 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
 ./run --truncate /mnt/a/foo128 28
 ./run --open-file /mnt/a/foo128 -r -R :xxx:yyy:zzz\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
***
*** ./run --ov --ts=0 dir-open
***
TEST dir-open.py:10: Open O_RDONLY
 ./run --open-file /mnt/a/dir100 -r
 ./run --open-file /mnt/a/dir100 -r
TEST dir-open.py:18: Open O_WRONLY
 ./run --open-file /mnt/a/dir101 -w -E EISDIR
 ./run --open-file /mnt/a/dir101 -r
 ./run --open-file /mnt/a/dir101 -w -E EISDIR
 ./run --open-file /mnt/a/dir101 -r
TEST dir-open.py:28: Open O_WRONLY * 2
 ./run --open-file /mnt/a/dir102 -w -E EISDIR
 ./run --open-file /mnt/a/dir102 -w -E EISDIR
 ./run --open-file /mnt/a/dir102 -r
TEST dir-open.py:37: Open O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/dir103 -a -E EISDIR
 ./run --open-file /mnt/a/dir103 -r
 ./run --open-file /mnt/a/dir103 -a -E EISDIR
 ./run --open-file /mnt/a/dir103 -r
TEST dir-open.py:47: Open O_RDWR
 ./run --open-file /mnt/a/dir104 -r -w -E EISDIR
 ./run --open-file /mnt/a/dir104 -r
 ./run --open-file /mnt/a/dir104 -r -w -E EISDIR
 ./run --open-file /mnt/a/dir104 -r
TEST dir-open.py:57: Open O_APPEND|O_RDWR
 ./run --open-file /mnt/a/dir105 -r -a -E EISDIR
 ./run --open-file /mnt/a/dir105 -r
 ./run --open-file /mnt/a/dir105 -r -a -E EISDIR
 ./run --open-file /mnt/a/dir105 -r
***
*** ./run --ov --ts=1 dir-open
***
TEST dir-open.py:10: Open O_RDONLY
 ./run --open-file /mnt/a/dir100 -r
 ./run --open-file /mnt/a/dir100 -r
TEST dir-open.py:18: Open O_WRONLY
 ./run --open-file /mnt/a/dir101 -w -E EISDIR
 ./run --open-file /mnt/a/dir101 -r
 ./run --open-file /mnt/a/dir101 -w -E EISDIR
 ./run --open-file /mnt/a/dir101 -r
TEST dir-open.py:28: Open O_WRONLY * 2
 ./run --open-file /mnt/a/dir102 -w -E EISDIR
 ./run --open-file /mnt/a/dir102 -w -E EISDIR
 ./run --open-file /mnt/a/dir102 -r
TEST dir-open.py:37: Open O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/dir103 -a -E EISDIR
 ./run --open-file /mnt/a/dir103 -r
 ./run --open-file /mnt/a/dir103 -a -E EISDIR
 ./run --open-file /mnt/a/dir103 -r
TEST dir-open.py:47: Open O_RDWR
 ./run --open-file /mnt/a/dir104 -r -w -E EISDIR
 ./run --open-file /mnt/a/dir104 -r
 ./run --open-file /mnt/a/dir104 -r -w -E EISDIR
 ./run --open-file /mnt/a/dir104 -r
TEST dir-open.py:57: Open O_APPEND|O_RDWR
 ./run --open-file /mnt/a/dir105 -r -a -E EISDIR
 ./run --open-file /mnt/a/dir105 -r
 ./run --open-file /mnt/a/dir105 -r -a -E EISDIR
 ./run --open-file /mnt/a/dir105 -r
***
*** ./run --ov --ts=0 dir-weird-open
***
TEST dir-weird-open.py:10: Open O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir100 -r -c -E EISDIR
 ./run --open-file /mnt/a/dir100 -r
TEST dir-weird-open.py:18: Open O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir101 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/dir101 -r
TEST dir-weird-open.py:26: Open O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir102 -r -t -E EISDIR
 ./run --open-file /mnt/a/dir102 -r
TEST dir-weird-open.py:34: Open O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir103 -r -c -t -E EISDIR
 ./run --open-file /mnt/a/dir103 -r
TEST dir-weird-open.py:42: Open O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir104 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir104 -r
TEST dir-weird-open.py:50: Open O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir105 -w -c -E EISDIR
 ./run --open-file /mnt/a/dir105 -r
TEST dir-weird-open.py:58: Open O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir106 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/dir106 -r
TEST dir-weird-open.py:66: Open O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir107 -w -t -E EISDIR
 ./run --open-file /mnt/a/dir107 -r
TEST dir-weird-open.py:74: Open O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir108 -w -c -t -E EISDIR
 ./run --open-file /mnt/a/dir108 -r
TEST dir-weird-open.py:82: Open O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir109 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir109 -r
***
*** ./run --ov --ts=1 dir-weird-open
***
TEST dir-weird-open.py:10: Open O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir100 -r -c -E EISDIR
 ./run --open-file /mnt/a/dir100 -r
TEST dir-weird-open.py:18: Open O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir101 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/dir101 -r
TEST dir-weird-open.py:26: Open O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir102 -r -t -E EISDIR
 ./run --open-file /mnt/a/dir102 -r
TEST dir-weird-open.py:34: Open O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir103 -r -c -t -E EISDIR
 ./run --open-file /mnt/a/dir103 -r
TEST dir-weird-open.py:42: Open O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir104 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir104 -r
TEST dir-weird-open.py:50: Open O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir105 -w -c -E EISDIR
 ./run --open-file /mnt/a/dir105 -r
TEST dir-weird-open.py:58: Open O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir106 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/dir106 -r
TEST dir-weird-open.py:66: Open O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir107 -w -t -E EISDIR
 ./run --open-file /mnt/a/dir107 -r
TEST dir-weird-open.py:74: Open O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir108 -w -c -t -E EISDIR
 ./run --open-file /mnt/a/dir108 -r
TEST dir-weird-open.py:82: Open O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir109 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir109 -r
***
*** ./run --ov --ts=0 dir-open-dir
***
TEST dir-open-dir.py:10: Open O_DIRECTORY | O_RDONLY
 ./run --open-file /mnt/a/dir100 -r -d
 ./run --open-file /mnt/a/dir100 -r -d
TEST dir-open-dir.py:18: Open O_DIRECTORY | O_WRONLY
 ./run --open-file /mnt/a/dir101 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir101 -r -d
 ./run --open-file /mnt/a/dir101 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir101 -r -d
TEST dir-open-dir.py:28: Open O_DIRECTORY | O_WRONLY * 2
 ./run --open-file /mnt/a/dir102 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir102 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir102 -r -d
TEST dir-open-dir.py:37: Open O_DIRECTORY | O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/dir103 -a -d -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
 ./run --open-file /mnt/a/dir103 -a -d -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
TEST dir-open-dir.py:47: Open O_DIRECTORY | O_RDWR
 ./run --open-file /mnt/a/dir104 -r -w -d -E EISDIR
 ./run --open-file /mnt/a/dir104 -r -d
 ./run --open-file /mnt/a/dir104 -r -w -d -E EISDIR
 ./run --open-file /mnt/a/dir104 -r -d
TEST dir-open-dir.py:57: Open O_DIRECTORY | O_APPEND|O_RDWR
 ./run --open-file /mnt/a/dir105 -r -a -d -E EISDIR
 ./run --open-file /mnt/a/dir105 -r -d
 ./run --open-file /mnt/a/dir105 -r -a -d -E EISDIR
 ./run --open-file /mnt/a/dir105 -r -d
***
*** ./run --ov --ts=1 dir-open-dir
***
TEST dir-open-dir.py:10: Open O_DIRECTORY | O_RDONLY
 ./run --open-file /mnt/a/dir100 -r -d
 ./run --open-file /mnt/a/dir100 -r -d
TEST dir-open-dir.py:18: Open O_DIRECTORY | O_WRONLY
 ./run --open-file /mnt/a/dir101 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir101 -r -d
 ./run --open-file /mnt/a/dir101 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir101 -r -d
TEST dir-open-dir.py:28: Open O_DIRECTORY | O_WRONLY * 2
 ./run --open-file /mnt/a/dir102 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir102 -w -d -E EISDIR
 ./run --open-file /mnt/a/dir102 -r -d
TEST dir-open-dir.py:37: Open O_DIRECTORY | O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/dir103 -a -d -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
 ./run --open-file /mnt/a/dir103 -a -d -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
TEST dir-open-dir.py:47: Open O_DIRECTORY | O_RDWR
 ./run --open-file /mnt/a/dir104 -r -w -d -E EISDIR
 ./run --open-file /mnt/a/dir104 -r -d
 ./run --open-file /mnt/a/dir104 -r -w -d -E EISDIR
 ./run --open-file /mnt/a/dir104 -r -d
TEST dir-open-dir.py:57: Open O_DIRECTORY | O_APPEND|O_RDWR
 ./run --open-file /mnt/a/dir105 -r -a -d -E EISDIR
 ./run --open-file /mnt/a/dir105 -r -d
 ./run --open-file /mnt/a/dir105 -r -a -d -E EISDIR
 ./run --open-file /mnt/a/dir105 -r -d
***
*** ./run --ov --ts=0 dir-weird-open-dir
***
TEST dir-weird-open-dir.py:10: Open O_DIRECTORY | O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir100 -r -d -c -E EISDIR
 ./run --open-file /mnt/a/dir100 -r -d
TEST dir-weird-open-dir.py:18: Open O_DIRECTORY | O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir101 -r -d -c -e -E EEXIST
 ./run --open-file /mnt/a/dir101 -r -d
TEST dir-weird-open-dir.py:26: Open O_DIRECTORY | O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir102 -r -d -t -E EISDIR
 ./run --open-file /mnt/a/dir102 -r -d
TEST dir-weird-open-dir.py:34: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir103 -r -d -c -t -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
TEST dir-weird-open-dir.py:42: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir104 -r -d -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir104 -r -d
TEST dir-weird-open-dir.py:50: Open O_DIRECTORY | O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir105 -w -d -c -E EISDIR
 ./run --open-file /mnt/a/dir105 -r -d
TEST dir-weird-open-dir.py:58: Open O_DIRECTORY | O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir106 -w -d -c -e -E EEXIST
 ./run --open-file /mnt/a/dir106 -r -d
TEST dir-weird-open-dir.py:66: Open O_DIRECTORY | O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir107 -w -d -t -E EISDIR
 ./run --open-file /mnt/a/dir107 -r -d
TEST dir-weird-open-dir.py:74: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir108 -w -d -c -t -E EISDIR
 ./run --open-file /mnt/a/dir108 -r -d
TEST dir-weird-open-dir.py:82: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir109 -w -d -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir109 -r -d
***
*** ./run --ov --ts=1 dir-weird-open-dir
***
TEST dir-weird-open-dir.py:10: Open O_DIRECTORY | O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir100 -r -d -c -E EISDIR
 ./run --open-file /mnt/a/dir100 -r -d
TEST dir-weird-open-dir.py:18: Open O_DIRECTORY | O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir101 -r -d -c -e -E EEXIST
 ./run --open-file /mnt/a/dir101 -r -d
TEST dir-weird-open-dir.py:26: Open O_DIRECTORY | O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir102 -r -d -t -E EISDIR
 ./run --open-file /mnt/a/dir102 -r -d
TEST dir-weird-open-dir.py:34: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir103 -r -d -c -t -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
TEST dir-weird-open-dir.py:42: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir104 -r -d -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir104 -r -d
TEST dir-weird-open-dir.py:50: Open O_DIRECTORY | O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/dir105 -w -d -c -E EISDIR
 ./run --open-file /mnt/a/dir105 -r -d
TEST dir-weird-open-dir.py:58: Open O_DIRECTORY | O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir106 -w -d -c -e -E EEXIST
 ./run --open-file /mnt/a/dir106 -r -d
TEST dir-weird-open-dir.py:66: Open O_DIRECTORY | O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/dir107 -w -d -t -E EISDIR
 ./run --open-file /mnt/a/dir107 -r -d
TEST dir-weird-open-dir.py:74: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/dir108 -w -d -c -t -E EISDIR
 ./run --open-file /mnt/a/dir108 -r -d
TEST dir-weird-open-dir.py:82: Open O_DIRECTORY | O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/dir109 -w -d -c -e -t -E EEXIST
 ./run --open-file /mnt/a/dir109 -r -d
***
*** ./run --ov --ts=0 dir-sym1-open
***
TEST dir-sym1-open.py:10: Open(dir symlink) O_RDONLY
 ./run --open-file /mnt/a/direct_dir_sym100 -r
 ./run --open-file /mnt/a/direct_dir_sym100 -r
TEST dir-sym1-open.py:19: Open(dir symlink) O_WRONLY
 ./run --open-file /mnt/a/direct_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym101 -r
 ./run --open-file /mnt/a/direct_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym101 -r
TEST dir-sym1-open.py:30: Open(dir symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym102 -r
 ./run --open-file /mnt/a/direct_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym102 -r
TEST dir-sym1-open.py:41: Open(dir symlink) O_RDWR
 ./run --open-file /mnt/a/direct_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym103 -r
 ./run --open-file /mnt/a/direct_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym103 -r
TEST dir-sym1-open.py:52: Open(dir symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym104 -r
 ./run --open-file /mnt/a/direct_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym104 -r
***
*** ./run --ov --ts=1 dir-sym1-open
***
TEST dir-sym1-open.py:10: Open(dir symlink) O_RDONLY
 ./run --open-file /mnt/a/direct_dir_sym100 -r
 ./run --open-file /mnt/a/direct_dir_sym100 -r
TEST dir-sym1-open.py:19: Open(dir symlink) O_WRONLY
 ./run --open-file /mnt/a/direct_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym101 -r
 ./run --open-file /mnt/a/direct_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym101 -r
TEST dir-sym1-open.py:30: Open(dir symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/direct_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym102 -r
 ./run --open-file /mnt/a/direct_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym102 -r
TEST dir-sym1-open.py:41: Open(dir symlink) O_RDWR
 ./run --open-file /mnt/a/direct_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym103 -r
 ./run --open-file /mnt/a/direct_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym103 -r
TEST dir-sym1-open.py:52: Open(dir symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/direct_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym104 -r
 ./run --open-file /mnt/a/direct_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym104 -r
***
*** ./run --ov --ts=0 dir-sym1-weird-open
***
TEST dir-sym1-weird-open.py:11: Open(dir symlink) O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym100 -r -c -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym100 -r
TEST dir-sym1-weird-open.py:20: Open(dir symlink) O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym101 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym101 -r
TEST dir-sym1-weird-open.py:29: Open(dir symlink) O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/direct_dir_sym102 -r -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym102 -r
TEST dir-sym1-weird-open.py:38: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym103 -r -c -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym103 -r
TEST dir-sym1-weird-open.py:47: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym104 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym104 -r
TEST dir-sym1-weird-open.py:56: Open(dir symlink) O_WRONLY | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym105 -w -c -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym105 -r
TEST dir-sym1-weird-open.py:65: Open(dir symlink) O_WRONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym106 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym106 -r
TEST dir-sym1-weird-open.py:74: Open(dir symlink) O_WRONLY | O_TRUNC
 ./run --open-file /mnt/a/direct_dir_sym107 -w -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym107 -r
TEST dir-sym1-weird-open.py:83: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym108 -w -c -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym108 -r
TEST dir-sym1-weird-open.py:92: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym109 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym109 -r
***
*** ./run --ov --ts=1 dir-sym1-weird-open
***
TEST dir-sym1-weird-open.py:11: Open(dir symlink) O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym100 -r -c -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym100 -r
TEST dir-sym1-weird-open.py:20: Open(dir symlink) O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym101 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym101 -r
TEST dir-sym1-weird-open.py:29: Open(dir symlink) O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/direct_dir_sym102 -r -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym102 -r
TEST dir-sym1-weird-open.py:38: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym103 -r -c -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym103 -r
TEST dir-sym1-weird-open.py:47: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym104 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym104 -r
TEST dir-sym1-weird-open.py:56: Open(dir symlink) O_WRONLY | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym105 -w -c -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym105 -r
TEST dir-sym1-weird-open.py:65: Open(dir symlink) O_WRONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym106 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym106 -r
TEST dir-sym1-weird-open.py:74: Open(dir symlink) O_WRONLY | O_TRUNC
 ./run --open-file /mnt/a/direct_dir_sym107 -w -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym107 -r
TEST dir-sym1-weird-open.py:83: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/direct_dir_sym108 -w -c -t -E EISDIR
 ./run --open-file /mnt/a/direct_dir_sym108 -r
TEST dir-sym1-weird-open.py:92: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/direct_dir_sym109 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym109 -r
***
*** ./run --ov --ts=0 dir-sym2-open
***
TEST dir-sym2-open.py:10: Open(dir symlink) O_RDONLY
 ./run --open-file /mnt/a/indirect_dir_sym100 -r
 ./run --open-file /mnt/a/indirect_dir_sym100 -r
TEST dir-sym2-open.py:20: Open(dir symlink) O_WRONLY
 ./run --open-file /mnt/a/indirect_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym101 -r
 ./run --open-file /mnt/a/indirect_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym101 -r
TEST dir-sym2-open.py:32: Open(dir symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym102 -r
 ./run --open-file /mnt/a/indirect_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym102 -r
TEST dir-sym2-open.py:44: Open(dir symlink) O_RDWR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r
 ./run --open-file /mnt/a/indirect_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r
TEST dir-sym2-open.py:56: Open(dir symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym104 -r
 ./run --open-file /mnt/a/indirect_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym104 -r
***
*** ./run --ov --ts=1 dir-sym2-open
***
TEST dir-sym2-open.py:10: Open(dir symlink) O_RDONLY
 ./run --open-file /mnt/a/indirect_dir_sym100 -r
 ./run --open-file /mnt/a/indirect_dir_sym100 -r
TEST dir-sym2-open.py:20: Open(dir symlink) O_WRONLY
 ./run --open-file /mnt/a/indirect_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym101 -r
 ./run --open-file /mnt/a/indirect_dir_sym101 -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym101 -r
TEST dir-sym2-open.py:32: Open(dir symlink) O_APPEND|O_WRONLY
 ./run --open-file /mnt/a/indirect_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym102 -r
 ./run --open-file /mnt/a/indirect_dir_sym102 -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym102 -r
TEST dir-sym2-open.py:44: Open(dir symlink) O_RDWR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r
 ./run --open-file /mnt/a/indirect_dir_sym103 -r -w -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r
TEST dir-sym2-open.py:56: Open(dir symlink) O_APPEND|O_RDWR
 ./run --open-file /mnt/a/indirect_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym104 -r
 ./run --open-file /mnt/a/indirect_dir_sym104 -r -a -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym104 -r
***
*** ./run --ov --ts=0 dir-sym2-weird-open
***
TEST dir-sym2-weird-open.py:11: Open(dir symlink) O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym100 -r -c -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym100 -r
TEST dir-sym2-weird-open.py:21: Open(dir symlink) O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym101 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym101 -r
TEST dir-sym2-weird-open.py:31: Open(dir symlink) O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/indirect_dir_sym102 -r -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym102 -r
TEST dir-sym2-weird-open.py:41: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym103 -r -c -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r
TEST dir-sym2-weird-open.py:51: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym104 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym104 -r
TEST dir-sym2-weird-open.py:61: Open(dir symlink) O_WRONLY | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym105 -w -c -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym105 -r
TEST dir-sym2-weird-open.py:71: Open(dir symlink) O_WRONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym106 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym106 -r
TEST dir-sym2-weird-open.py:81: Open(dir symlink) O_WRONLY | O_TRUNC
 ./run --open-file /mnt/a/indirect_dir_sym107 -w -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym107 -r
TEST dir-sym2-weird-open.py:91: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym108 -w -c -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym108 -r
TEST dir-sym2-weird-open.py:101: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym109 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym109 -r
***
*** ./run --ov --ts=1 dir-sym2-weird-open
***
TEST dir-sym2-weird-open.py:11: Open(dir symlink) O_RDONLY | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym100 -r -c -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym100 -r
TEST dir-sym2-weird-open.py:21: Open(dir symlink) O_RDONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym101 -r -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym101 -r
TEST dir-sym2-weird-open.py:31: Open(dir symlink) O_RDONLY | O_TRUNC
 ./run --open-file /mnt/a/indirect_dir_sym102 -r -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym102 -r
TEST dir-sym2-weird-open.py:41: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym103 -r -c -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym103 -r
TEST dir-sym2-weird-open.py:51: Open(dir symlink) O_RDONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym104 -r -c -e -t -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym104 -r
TEST dir-sym2-weird-open.py:61: Open(dir symlink) O_WRONLY | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym105 -w -c -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym105 -r
TEST dir-sym2-weird-open.py:71: Open(dir symlink) O_WRONLY | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym106 -w -c -e -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym106 -r
TEST dir-sym2-weird-open.py:81: Open(dir symlink) O_WRONLY | O_TRUNC
 ./run --open-file /mnt/a/indirect_dir_sym107 -w -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym107 -r
TEST dir-sym2-weird-open.py:91: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT
 ./run --open-file /mnt/a/indirect_dir_sym108 -w -c -t -E EISDIR
 ./run --open-file /mnt/a/indirect_dir_sym108 -r
TEST dir-sym2-weird-open.py:101: Open(dir symlink) O_WRONLY | O_TRUNC | O_CREAT | O_EXCL
 ./run --open-file /mnt/a/indirect_dir_sym109 -w -c -e -t -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym109 -r
***
*** ./run --ov --ts=0 readlink
***
TEST readlink.py:9: Readlink file
 ./run --readlink /mnt/a/foo100 -E EINVAL
TEST readlink.py:15: Readlink direct symlink to file
 ./run --readlink /mnt/a/direct_sym101 -R ../a/foo101
TEST readlink.py:21: Readlink indirect symlink to file
 ./run --readlink /mnt/a/indirect_sym102 -R direct_sym102
TEST readlink.py:30: Readlink dir
 ./run --readlink /mnt/a/dir103 -E EINVAL
TEST readlink.py:36: Readlink direct symlink to dir
 ./run --readlink /mnt/a/direct_dir_sym104 -R ../a/dir104
TEST readlink.py:42: Readlink indirect symlink to dir
 ./run --readlink /mnt/a/indirect_dir_sym105 -R direct_dir_sym105
TEST readlink.py:51: Readlink absent file
 ./run --readlink /mnt/a/no_foo106 -E ENOENT
TEST readlink.py:57: Readlink broken symlink to absent file
 ./run --readlink /mnt/a/pointless107 -R no_foo107
TEST readlink.py:63: Readlink broken symlink
 ./run --readlink /mnt/a/pointless108 -R no_foo108
TEST readlink.py:69: Readlink absent file pointed to by broken symlink
 ./run --readlink /mnt/a/no_foo109 -E ENOENT
***
*** ./run --ov --ts=1 readlink
***
TEST readlink.py:9: Readlink file
 ./run --readlink /mnt/a/foo100 -E EINVAL
TEST readlink.py:15: Readlink direct symlink to file
 ./run --readlink /mnt/a/direct_sym101 -R ../a/foo101
TEST readlink.py:21: Readlink indirect symlink to file
 ./run --readlink /mnt/a/indirect_sym102 -R direct_sym102
TEST readlink.py:30: Readlink dir
 ./run --readlink /mnt/a/dir103 -E EINVAL
TEST readlink.py:36: Readlink direct symlink to dir
 ./run --readlink /mnt/a/direct_dir_sym104 -R ../a/dir104
TEST readlink.py:42: Readlink indirect symlink to dir
 ./run --readlink /mnt/a/indirect_dir_sym105 -R direct_dir_sym105
TEST readlink.py:51: Readlink absent file
 ./run --readlink /mnt/a/no_foo106 -E ENOENT
TEST readlink.py:57: Readlink broken symlink to absent file
 ./run --readlink /mnt/a/pointless107 -R no_foo107
TEST readlink.py:63: Readlink broken symlink
 ./run --readlink /mnt/a/pointless108 -R no_foo108
TEST readlink.py:69: Readlink absent file pointed to by broken symlink
 ./run --readlink /mnt/a/no_foo109 -E ENOENT
***
*** ./run --ov --ts=0 mkdir
***
TEST mkdir.py:10: Create directory
 ./run --mkdir /mnt/a/no_dir100 0755
 ./run --mkdir /mnt/a/no_dir100 0755 -E EEXIST
TEST mkdir.py:18: Create directory over file
 ./run --mkdir /mnt/a/foo101 0755 -E EEXIST
 ./run --mkdir /mnt/a/foo101 0755 -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST mkdir.py:28: Create directory over empty dir
 ./run --mkdir /mnt/a/empty102 0755 -E EEXIST
TEST mkdir.py:35: Create directory in empty dir
 ./run --mkdir /mnt/a/empty103/sub 0755
 ./run --mkdir /mnt/a/empty103/sub 0755 -E EEXIST
TEST mkdir.py:43: Create directory over dir
 ./run --mkdir /mnt/a/dir104 0755 -E EEXIST
 ./run --open-file /mnt/a/dir104/a -r -R 
TEST mkdir.py:51: Create directory in dir
 ./run --mkdir /mnt/a/dir105/sub 0755
 ./run --mkdir /mnt/a/dir105/sub 0755 -E EEXIST
 ./run --open-file /mnt/a/dir105/a -r -R 
TEST mkdir.py:61: Create directory over sym to file
 ./run --mkdir /mnt/a/direct_sym106 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_sym106 0755 -E EEXIST
 ./run --mkdir /mnt/a/foo106 0755 -E EEXIST
 ./run --open-file /mnt/a/foo106 -r -R :xxx:yyy:zzz
TEST mkdir.py:73: Create directory over sym to sym to file
 ./run --mkdir /mnt/a/indirect_sym107 0755 -E EEXIST
 ./run --mkdir /mnt/a/indirect_sym107 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_sym107 0755 -E EEXIST
 ./run --mkdir /mnt/a/foo107 0755 -E EEXIST
 ./run --open-file /mnt/a/foo107 -r -R :xxx:yyy:zzz
TEST mkdir.py:87: Create directory over sym to dir
 ./run --mkdir /mnt/a/direct_dir_sym108 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_dir_sym108 0755 -E EEXIST
 ./run --mkdir /mnt/a/dir108 0755 -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym108/a -r -R 
 ./run --open-file /mnt/a/dir108/a -r -R 
TEST mkdir.py:99: Create directory over sym to sym to dir
 ./run --mkdir /mnt/a/indirect_dir_sym109 0755 -E EEXIST
 ./run --mkdir /mnt/a/indirect_dir_sym109 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_dir_sym109 0755 -E EEXIST
 ./run --mkdir /mnt/a/dir109 0755 -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym109/a -r -R 
 ./run --open-file /mnt/a/direct_dir_sym109/a -r -R 
 ./run --open-file /mnt/a/dir109/a -r -R 
TEST mkdir.py:114: Create directory over dangling sym
 ./run --mkdir /mnt/a/pointless110 0755 -E EEXIST
 ./run --mkdir /mnt/a/pointless110 0755 -E EEXIST
***
*** ./run --ov --ts=1 mkdir
***
TEST mkdir.py:10: Create directory
 ./run --mkdir /mnt/a/no_dir100 0755
 ./run --mkdir /mnt/a/no_dir100 0755 -E EEXIST
TEST mkdir.py:18: Create directory over file
 ./run --mkdir /mnt/a/foo101 0755 -E EEXIST
 ./run --mkdir /mnt/a/foo101 0755 -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST mkdir.py:28: Create directory over empty dir
 ./run --mkdir /mnt/a/empty102 0755 -E EEXIST
TEST mkdir.py:35: Create directory in empty dir
 ./run --mkdir /mnt/a/empty103/sub 0755
 ./run --mkdir /mnt/a/empty103/sub 0755 -E EEXIST
TEST mkdir.py:43: Create directory over dir
 ./run --mkdir /mnt/a/dir104 0755 -E EEXIST
 ./run --open-file /mnt/a/dir104/a -r -R 
TEST mkdir.py:51: Create directory in dir
 ./run --mkdir /mnt/a/dir105/sub 0755
 ./run --mkdir /mnt/a/dir105/sub 0755 -E EEXIST
 ./run --open-file /mnt/a/dir105/a -r -R 
TEST mkdir.py:61: Create directory over sym to file
 ./run --mkdir /mnt/a/direct_sym106 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_sym106 0755 -E EEXIST
 ./run --mkdir /mnt/a/foo106 0755 -E EEXIST
 ./run --open-file /mnt/a/foo106 -r -R :xxx:yyy:zzz
TEST mkdir.py:73: Create directory over sym to sym to file
 ./run --mkdir /mnt/a/indirect_sym107 0755 -E EEXIST
 ./run --mkdir /mnt/a/indirect_sym107 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_sym107 0755 -E EEXIST
 ./run --mkdir /mnt/a/foo107 0755 -E EEXIST
 ./run --open-file /mnt/a/foo107 -r -R :xxx:yyy:zzz
TEST mkdir.py:87: Create directory over sym to dir
 ./run --mkdir /mnt/a/direct_dir_sym108 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_dir_sym108 0755 -E EEXIST
 ./run --mkdir /mnt/a/dir108 0755 -E EEXIST
 ./run --open-file /mnt/a/direct_dir_sym108/a -r -R 
 ./run --open-file /mnt/a/dir108/a -r -R 
TEST mkdir.py:99: Create directory over sym to sym to dir
 ./run --mkdir /mnt/a/indirect_dir_sym109 0755 -E EEXIST
 ./run --mkdir /mnt/a/indirect_dir_sym109 0755 -E EEXIST
 ./run --mkdir /mnt/a/direct_dir_sym109 0755 -E EEXIST
 ./run --mkdir /mnt/a/dir109 0755 -E EEXIST
 ./run --open-file /mnt/a/indirect_dir_sym109/a -r -R 
 ./run --open-file /mnt/a/direct_dir_sym109/a -r -R 
 ./run --open-file /mnt/a/dir109/a -r -R 
TEST mkdir.py:114: Create directory over dangling sym
 ./run --mkdir /mnt/a/pointless110 0755 -E EEXIST
 ./run --mkdir /mnt/a/pointless110 0755 -E EEXIST
***
*** ./run --ov --ts=0 rmdir
***
TEST rmdir.py:10: Remove nonexistent directory
 ./run --rmdir /mnt/a/no_dir100 -E ENOENT
 ./run --rmdir /mnt/a/no_dir100 -E ENOENT
TEST rmdir.py:18: Remove subdir from nonexistent directory
 ./run --rmdir /mnt/a/no_dir101/sub -E ENOENT
 ./run --rmdir /mnt/a/no_dir101/sub -E ENOENT
TEST rmdir.py:26: Remove-dir a file
 ./run --rmdir /mnt/a/foo102 -E ENOTDIR
 ./run --rmdir /mnt/a/foo102 -E ENOTDIR
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST rmdir.py:36: Remove subdir from file
 ./run --rmdir /mnt/a/foo103/sub -E ENOTDIR
 ./run --rmdir /mnt/a/foo103/sub -E ENOTDIR
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST rmdir.py:46: Remove empty dir
 ./run --rmdir /mnt/a/empty104
 ./run --rmdir /mnt/a/empty104 -E ENOENT
 ./run --rmdir /mnt/a/empty104/sub -E ENOENT
TEST rmdir.py:56: Remove directory from empty dir
 ./run --rmdir /mnt/a/empty105/sub -E ENOENT
 ./run --rmdir /mnt/a/empty105/sub -E ENOENT
TEST rmdir.py:64: Remove populated directory
 ./run --rmdir /mnt/a/dir106 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir106/a -r -R 
 ./run --unlink /mnt/a/dir106/a
 ./run --open-file /mnt/a/dir106/a -r -E ENOENT
 ./run --unlink /mnt/a/dir106/a -E ENOENT
- rmtree /mnt/a/dir106
 ./run --open-file /mnt/a/dir106/a -r -R  -E ENOENT
TEST rmdir.py:78: Remove populated directory with created file
 ./run --open-file /mnt/a/empty107/b -w -c -e -W abcq
 ./run --rmdir /mnt/a/empty107 -E ENOTEMPTY
 ./run --unlink /mnt/a/empty107/b
 ./run --open-file /mnt/a/empty107/b -r -E ENOENT
 ./run --unlink /mnt/a/empty107/b -E ENOENT
- rmtree /mnt/a/empty107
 ./run --open-file /mnt/a/empty107/b -r -R  -E ENOENT
TEST rmdir.py:92: Remove populated directory with copied up file
 ./run --rmdir /mnt/a/dir108 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir108/a -r -R 
 ./run --open-file /mnt/a/dir108/a -w -W abcd
 ./run --open-file /mnt/a/dir108/a -r -R abcd
 ./run --unlink /mnt/a/dir108/a
 ./run --open-file /mnt/a/dir108/a -r -E ENOENT
 ./run --unlink /mnt/a/dir108/a -E ENOENT
- rmtree /mnt/a/dir108
 ./run --open-file /mnt/a/dir108/a -r -R  -E ENOENT
TEST rmdir.py:108: Remove populated directory with mkdir after unlink
 ./run --rmdir /mnt/a/dir109 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir109/a -r -R 
 ./run --rmdir /mnt/a/dir109 -E ENOTEMPTY
 ./run --unlink /mnt/a/dir109/a
 ./run --open-file /mnt/a/dir109/a -r -E ENOENT
 ./run --unlink /mnt/a/dir109/a -E ENOENT
 ./run --mkdir /mnt/a/dir109/a 0755
 ./run --mkdir /mnt/a/dir109/a 0755 -E EEXIST
 ./run --rmdir /mnt/a/dir109 -E ENOTEMPTY
 ./run --rmdir /mnt/a/dir109/a
 ./run --rmdir /mnt/a/dir109/a -E ENOENT
- rmtree /mnt/a/dir109
 ./run --open-file /mnt/a/dir109/a -r -R  -E ENOENT
TEST rmdir.py:131: Remove directory from dir
 ./run --rmdir /mnt/a/dir110/pop/c
 ./run --rmdir /mnt/a/dir110/pop/c -E ENOENT
 ./run --mkdir /mnt/a/dir110/pop/c 0755
 ./run --mkdir /mnt/a/dir110/pop/c 0755 -E EEXIST
 ./run --open-file /mnt/a/dir110/pop/b -r -R :aaa:bbb:ccc
- rmtree /mnt/a/dir110
 ./run --open-file /mnt/a/dir110/pop/b -r -E ENOENT
TEST rmdir.py:148: Remove-dir symlinks to file
 ./run --rmdir /mnt/a/indirect_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/indirect_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/foo111 -E ENOTDIR
 ./run --rmdir /mnt/a/foo111 -E ENOTDIR
 ./run --open-file /mnt/a/foo111 -r -R :xxx:yyy:zzz
TEST rmdir.py:164: Remove directory over sym to dir
 ./run --rmdir /mnt/a/direct_dir_sym112 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_dir_sym112 -E ENOTDIR
 ./run --rmdir /mnt/a/dir112 -E ENOTEMPTY
 ./run --open-file /mnt/a/direct_dir_sym112/a -r -R 
 ./run --open-file /mnt/a/dir112/a -r -R 
- rmtree /mnt/a/dir112
 ./run --open-file /mnt/a/direct_dir_sym112/a -r -E ENOENT
 ./run --open-file /mnt/a/dir112/a -r -E ENOENT
TEST rmdir.py:179: Remove directory over sym to sym to dir
 ./run --rmdir /mnt/a/indirect_dir_sym113 -E ENOTDIR
 ./run --rmdir /mnt/a/indirect_dir_sym113 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_dir_sym113 -E ENOTDIR
 ./run --rmdir /mnt/a/dir113 -E ENOTEMPTY
 ./run --open-file /mnt/a/indirect_dir_sym113/a -r -R 
 ./run --open-file /mnt/a/direct_dir_sym113/a -r -R 
 ./run --open-file /mnt/a/dir113/a -r -R 
- rmtree /mnt/a/dir113
 ./run --open-file /mnt/a/indirect_dir_sym113/a -r -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym113/a -r -E ENOENT
 ./run --open-file /mnt/a/dir113/a -r -E ENOENT
TEST rmdir.py:198: Remove directory over dangling sym
 ./run --rmdir /mnt/a/pointless114 -E ENOTDIR
 ./run --rmdir /mnt/a/pointless114 -E ENOTDIR
 ./run --rmdir /mnt/a/no_foo114 -E ENOENT
***
*** ./run --ov --ts=1 rmdir
***
TEST rmdir.py:10: Remove nonexistent directory
 ./run --rmdir /mnt/a/no_dir100 -E ENOENT
 ./run --rmdir /mnt/a/no_dir100 -E ENOENT
TEST rmdir.py:18: Remove subdir from nonexistent directory
 ./run --rmdir /mnt/a/no_dir101/sub -E ENOENT
 ./run --rmdir /mnt/a/no_dir101/sub -E ENOENT
TEST rmdir.py:26: Remove-dir a file
 ./run --rmdir /mnt/a/foo102 -E ENOTDIR
 ./run --rmdir /mnt/a/foo102 -E ENOTDIR
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST rmdir.py:36: Remove subdir from file
 ./run --rmdir /mnt/a/foo103/sub -E ENOTDIR
 ./run --rmdir /mnt/a/foo103/sub -E ENOTDIR
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST rmdir.py:46: Remove empty dir
 ./run --rmdir /mnt/a/empty104
 ./run --rmdir /mnt/a/empty104 -E ENOENT
 ./run --rmdir /mnt/a/empty104/sub -E ENOENT
TEST rmdir.py:56: Remove directory from empty dir
 ./run --rmdir /mnt/a/empty105/sub -E ENOENT
 ./run --rmdir /mnt/a/empty105/sub -E ENOENT
TEST rmdir.py:64: Remove populated directory
 ./run --rmdir /mnt/a/dir106 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir106/a -r -R 
 ./run --unlink /mnt/a/dir106/a
 ./run --open-file /mnt/a/dir106/a -r -E ENOENT
 ./run --unlink /mnt/a/dir106/a -E ENOENT
- rmtree /mnt/a/dir106
 ./run --open-file /mnt/a/dir106/a -r -R  -E ENOENT
TEST rmdir.py:78: Remove populated directory with created file
 ./run --open-file /mnt/a/empty107/b -w -c -e -W abcq
 ./run --rmdir /mnt/a/empty107 -E ENOTEMPTY
 ./run --unlink /mnt/a/empty107/b
 ./run --open-file /mnt/a/empty107/b -r -E ENOENT
 ./run --unlink /mnt/a/empty107/b -E ENOENT
- rmtree /mnt/a/empty107
 ./run --open-file /mnt/a/empty107/b -r -R  -E ENOENT
TEST rmdir.py:92: Remove populated directory with copied up file
 ./run --rmdir /mnt/a/dir108 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir108/a -r -R 
 ./run --open-file /mnt/a/dir108/a -w -W abcd
 ./run --open-file /mnt/a/dir108/a -r -R abcd
 ./run --unlink /mnt/a/dir108/a
 ./run --open-file /mnt/a/dir108/a -r -E ENOENT
 ./run --unlink /mnt/a/dir108/a -E ENOENT
- rmtree /mnt/a/dir108
 ./run --open-file /mnt/a/dir108/a -r -R  -E ENOENT
TEST rmdir.py:108: Remove populated directory with mkdir after unlink
 ./run --rmdir /mnt/a/dir109 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir109/a -r -R 
 ./run --rmdir /mnt/a/dir109 -E ENOTEMPTY
 ./run --unlink /mnt/a/dir109/a
 ./run --open-file /mnt/a/dir109/a -r -E ENOENT
 ./run --unlink /mnt/a/dir109/a -E ENOENT
 ./run --mkdir /mnt/a/dir109/a 0755
 ./run --mkdir /mnt/a/dir109/a 0755 -E EEXIST
 ./run --rmdir /mnt/a/dir109 -E ENOTEMPTY
 ./run --rmdir /mnt/a/dir109/a
 ./run --rmdir /mnt/a/dir109/a -E ENOENT
- rmtree /mnt/a/dir109
 ./run --open-file /mnt/a/dir109/a -r -R  -E ENOENT
TEST rmdir.py:131: Remove directory from dir
 ./run --rmdir /mnt/a/dir110/pop/c
 ./run --rmdir /mnt/a/dir110/pop/c -E ENOENT
 ./run --mkdir /mnt/a/dir110/pop/c 0755
 ./run --mkdir /mnt/a/dir110/pop/c 0755 -E EEXIST
 ./run --open-file /mnt/a/dir110/pop/b -r -R :aaa:bbb:ccc
- rmtree /mnt/a/dir110
 ./run --open-file /mnt/a/dir110/pop/b -r -E ENOENT
TEST rmdir.py:148: Remove-dir symlinks to file
 ./run --rmdir /mnt/a/indirect_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/indirect_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_sym111 -E ENOTDIR
 ./run --rmdir /mnt/a/foo111 -E ENOTDIR
 ./run --rmdir /mnt/a/foo111 -E ENOTDIR
 ./run --open-file /mnt/a/foo111 -r -R :xxx:yyy:zzz
TEST rmdir.py:164: Remove directory over sym to dir
 ./run --rmdir /mnt/a/direct_dir_sym112 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_dir_sym112 -E ENOTDIR
 ./run --rmdir /mnt/a/dir112 -E ENOTEMPTY
 ./run --open-file /mnt/a/direct_dir_sym112/a -r -R 
 ./run --open-file /mnt/a/dir112/a -r -R 
- rmtree /mnt/a/dir112
 ./run --open-file /mnt/a/direct_dir_sym112/a -r -E ENOENT
 ./run --open-file /mnt/a/dir112/a -r -E ENOENT
TEST rmdir.py:179: Remove directory over sym to sym to dir
 ./run --rmdir /mnt/a/indirect_dir_sym113 -E ENOTDIR
 ./run --rmdir /mnt/a/indirect_dir_sym113 -E ENOTDIR
 ./run --rmdir /mnt/a/direct_dir_sym113 -E ENOTDIR
 ./run --rmdir /mnt/a/dir113 -E ENOTEMPTY
 ./run --open-file /mnt/a/indirect_dir_sym113/a -r -R 
 ./run --open-file /mnt/a/direct_dir_sym113/a -r -R 
 ./run --open-file /mnt/a/dir113/a -r -R 
- rmtree /mnt/a/dir113
 ./run --open-file /mnt/a/indirect_dir_sym113/a -r -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym113/a -r -E ENOENT
 ./run --open-file /mnt/a/dir113/a -r -E ENOENT
TEST rmdir.py:198: Remove directory over dangling sym
 ./run --rmdir /mnt/a/pointless114 -E ENOTDIR
 ./run --rmdir /mnt/a/pointless114 -E ENOTDIR
 ./run --rmdir /mnt/a/no_foo114 -E ENOENT
***
*** ./run --ov --ts=0 hard-link
***
TEST hard-link.py:10: Hard link file
 ./run --link /mnt/a/foo100 /mnt/a/no_foo100
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo100 -r -R :xxx:yyy:zzz
TEST hard-link.py:20: Hard link non-existent file
 ./run --link /mnt/a/no_foo101 /mnt/a/no_foo101a -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo101a -r -E ENOENT
TEST hard-link.py:30: Hard link non-existent file over a file
 ./run --link /mnt/a/no_foo102 /mnt/a/foo102 -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST hard-link.py:40: Hard link file over file
 ./run --link /mnt/a/foo103 /mnt/a/dir103/a -E EEXIST
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/dir103/a -r -R 
TEST hard-link.py:50: Hard link file over new file
 ./run --open-file /mnt/a/foo104-new -w -c -W aaaa
 ./run --link /mnt/a/foo104 /mnt/a/foo104-new -E EEXIST
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo104-new -r -R aaaa
TEST hard-link.py:61: Hard link new file over lower file
 ./run --open-file /mnt/a/foo105-new -w -c -W aaaa
 ./run --link /mnt/a/foo105-new /mnt/a/foo105 -E EEXIST
 ./run --open-file /mnt/a/foo105-new -r -R aaaa
 ./run --open-file /mnt/a/foo105 -r -R :xxx:yyy:zzz
TEST hard-link.py:72: Hard link file over itself
 ./run --link /mnt/a/foo106 /mnt/a/foo106 -E EEXIST
 ./run --open-file /mnt/a/foo106 -r -R :xxx:yyy:zzz
TEST hard-link.py:80: Hard link new file over itself
 ./run --open-file /mnt/a/foo107-new -w -c -W aaaa
 ./run --link /mnt/a/foo107-new /mnt/a/foo107-new -E EEXIST
 ./run --open-file /mnt/a/foo107-new -r -R aaaa
TEST hard-link.py:89: Hard link non-existent file over itself
 ./run --link /mnt/a/no_foo108 /mnt/a/no_foo108 -E ENOENT
 ./run --open-file /mnt/a/no_foo108 -r -E ENOENT
TEST hard-link.py:97: Hard link unlinked file
 ./run --unlink /mnt/a/foo109
 ./run --link /mnt/a/foo109 /mnt/a/no_foo109 -E ENOENT
 ./run --open-file /mnt/a/foo109 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo109 -r -E ENOENT
TEST hard-link.py:108: Hard link renamed file
 ./run --rename /mnt/a/foo110 /mnt/a/no_foo110
 ./run --link /mnt/a/foo110 /mnt/a/no_foo110-a -E ENOENT
 ./run --link /mnt/a/no_foo110 /mnt/a/foo110
 ./run --open-file /mnt/a/foo110 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo110 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo110-a -r -E ENOENT
***
*** ./run --ov --ts=1 hard-link
***
TEST hard-link.py:10: Hard link file
 ./run --link /mnt/a/foo100 /mnt/a/no_foo100
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo100 -r -R :xxx:yyy:zzz
TEST hard-link.py:20: Hard link non-existent file
 ./run --link /mnt/a/no_foo101 /mnt/a/no_foo101a -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo101a -r -E ENOENT
TEST hard-link.py:30: Hard link non-existent file over a file
 ./run --link /mnt/a/no_foo102 /mnt/a/foo102 -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
TEST hard-link.py:40: Hard link file over file
 ./run --link /mnt/a/foo103 /mnt/a/dir103/a -E EEXIST
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/dir103/a -r -R 
TEST hard-link.py:50: Hard link file over new file
 ./run --open-file /mnt/a/foo104-new -w -c -W aaaa
 ./run --link /mnt/a/foo104 /mnt/a/foo104-new -E EEXIST
 ./run --open-file /mnt/a/foo104 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo104-new -r -R aaaa
TEST hard-link.py:61: Hard link new file over lower file
 ./run --open-file /mnt/a/foo105-new -w -c -W aaaa
 ./run --link /mnt/a/foo105-new /mnt/a/foo105 -E EEXIST
 ./run --open-file /mnt/a/foo105-new -r -R aaaa
 ./run --open-file /mnt/a/foo105 -r -R :xxx:yyy:zzz
TEST hard-link.py:72: Hard link file over itself
 ./run --link /mnt/a/foo106 /mnt/a/foo106 -E EEXIST
 ./run --open-file /mnt/a/foo106 -r -R :xxx:yyy:zzz
TEST hard-link.py:80: Hard link new file over itself
 ./run --open-file /mnt/a/foo107-new -w -c -W aaaa
 ./run --link /mnt/a/foo107-new /mnt/a/foo107-new -E EEXIST
 ./run --open-file /mnt/a/foo107-new -r -R aaaa
TEST hard-link.py:89: Hard link non-existent file over itself
 ./run --link /mnt/a/no_foo108 /mnt/a/no_foo108 -E ENOENT
 ./run --open-file /mnt/a/no_foo108 -r -E ENOENT
TEST hard-link.py:97: Hard link unlinked file
 ./run --unlink /mnt/a/foo109
 ./run --link /mnt/a/foo109 /mnt/a/no_foo109 -E ENOENT
 ./run --open-file /mnt/a/foo109 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo109 -r -E ENOENT
TEST hard-link.py:108: Hard link renamed file
 ./run --rename /mnt/a/foo110 /mnt/a/no_foo110
 ./run --link /mnt/a/foo110 /mnt/a/no_foo110-a -E ENOENT
 ./run --link /mnt/a/no_foo110 /mnt/a/foo110
 ./run --open-file /mnt/a/foo110 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo110 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo110-a -r -E ENOENT
***
*** ./run --ov --ts=0 hard-link-dir
***
TEST hard-link-dir.py:10: Hard link dir
 ./run --link /mnt/a/empty100 /mnt/a/no_dir100 -E EPERM
 ./run --open-file /mnt/a/empty100 -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST hard-link-dir.py:20: Hard link file over dir
 ./run --link /mnt/a/foo101 /mnt/a/empty101 -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/empty101 -r -d
TEST hard-link-dir.py:30: Hard link dir over dir
 ./run --link /mnt/a/dir102 /mnt/a/empty102 -E EEXIST
 ./run --open-file /mnt/a/dir102 -r -d
 ./run --open-file /mnt/a/empty102 -r -d
TEST hard-link-dir.py:40: Hard link dir over dir
 ./run --link /mnt/a/dir103 /mnt/a/foo103 -E EEXIST
 ./run --open-file /mnt/a/dir103 -r -d
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST hard-link-dir.py:50: Hard link dir over itself
 ./run --link /mnt/a/dir104 /mnt/a/dir104 -E EEXIST
 ./run --open-file /mnt/a/dir104 -r -d
TEST hard-link-dir.py:58: Hard link dir over its parent
 ./run --link /mnt/a/dir105/pop /mnt/a/dir105 -E EEXIST
 ./run --open-file /mnt/a/dir105/pop -r -d
 ./run --open-file /mnt/a/dir105 -r -d
TEST hard-link-dir.py:68: Hard link removed dir
 ./run --rmdir /mnt/a/empty106
 ./run --link /mnt/a/empty106 /mnt/a/no_dir106 -E ENOENT
 ./run --open-file /mnt/a/empty106 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir106 -r -d -E ENOENT
TEST hard-link-dir.py:79: Hard link renamed dir
 ./run --mkdir /mnt/a/empty107/new 0755
 ./run --rename /mnt/a/empty107/new /mnt/a/no_dir107
 ./run --link /mnt/a/empty107/new /mnt/a/no_dir107-a -E ENOENT
 ./run --link /mnt/a/no_dir107 /mnt/a/empty107/new -E EPERM
 ./run --open-file /mnt/a/empty107/new -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir107 -r -d
 ./run --open-file /mnt/a/no_dir107-a -r -d -E ENOENT
***
*** ./run --ov --ts=1 hard-link-dir
***
TEST hard-link-dir.py:10: Hard link dir
 ./run --link /mnt/a/empty100 /mnt/a/no_dir100 -E EPERM
 ./run --open-file /mnt/a/empty100 -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST hard-link-dir.py:20: Hard link file over dir
 ./run --link /mnt/a/foo101 /mnt/a/empty101 -E EEXIST
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/empty101 -r -d
TEST hard-link-dir.py:30: Hard link dir over dir
 ./run --link /mnt/a/dir102 /mnt/a/empty102 -E EEXIST
 ./run --open-file /mnt/a/dir102 -r -d
 ./run --open-file /mnt/a/empty102 -r -d
TEST hard-link-dir.py:40: Hard link dir over dir
 ./run --link /mnt/a/dir103 /mnt/a/foo103 -E EEXIST
 ./run --open-file /mnt/a/dir103 -r -d
 ./run --open-file /mnt/a/foo103 -r -R :xxx:yyy:zzz
TEST hard-link-dir.py:50: Hard link dir over itself
 ./run --link /mnt/a/dir104 /mnt/a/dir104 -E EEXIST
 ./run --open-file /mnt/a/dir104 -r -d
TEST hard-link-dir.py:58: Hard link dir over its parent
 ./run --link /mnt/a/dir105/pop /mnt/a/dir105 -E EEXIST
 ./run --open-file /mnt/a/dir105/pop -r -d
 ./run --open-file /mnt/a/dir105 -r -d
TEST hard-link-dir.py:68: Hard link removed dir
 ./run --rmdir /mnt/a/empty106
 ./run --link /mnt/a/empty106 /mnt/a/no_dir106 -E ENOENT
 ./run --open-file /mnt/a/empty106 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir106 -r -d -E ENOENT
TEST hard-link-dir.py:79: Hard link renamed dir
 ./run --mkdir /mnt/a/empty107/new 0755
 ./run --rename /mnt/a/empty107/new /mnt/a/no_dir107
 ./run --link /mnt/a/empty107/new /mnt/a/no_dir107-a -E ENOENT
 ./run --link /mnt/a/no_dir107 /mnt/a/empty107/new -E EPERM
 ./run --open-file /mnt/a/empty107/new -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir107 -r -d
 ./run --open-file /mnt/a/no_dir107-a -r -d -E ENOENT
***
*** ./run --ov --ts=0 hard-link-sym
***
TEST hard-link-sym.py:10: Hard link symlink
 ./run --link /mnt/a/direct_sym100 /mnt/a/no_foo100
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo100 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:20: Hard link dangling symlink
 ./run --link /mnt/a/pointless101 /mnt/a/no_foo101
 ./run --open-file /mnt/a/pointless101 -r -E ELOOP
 ./run --open-file /mnt/a/no_foo101 -r -E ELOOP
TEST hard-link-sym.py:30: Hard link non-existent file over a symlink
 ./run --link /mnt/a/no_foo102 /mnt/a/direct_sym102 -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:40: Hard link symlink over file
 ./run --link /mnt/a/direct_sym103 /mnt/a/dir103/a -E EEXIST
 ./run --open-file /mnt/a/direct_sym103 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/dir103/a -r -R 
TEST hard-link-sym.py:50: Hard link symlink over new file
 ./run --open-file /mnt/a/foo104-new -w -c -W aaaa
 ./run --link /mnt/a/direct_sym104 /mnt/a/foo104-new -E EEXIST
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo104-new -r -R aaaa
TEST hard-link-sym.py:61: Hard link new file over symlink
 ./run --open-file /mnt/a/foo105-new -w -c -W aaaa
 ./run --link /mnt/a/foo105-new /mnt/a/direct_sym105 -E EEXIST
 ./run --open-file /mnt/a/foo105-new -r -R aaaa
 ./run --open-file /mnt/a/direct_sym105 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:72: Hard link symlink over itself
 ./run --link /mnt/a/direct_sym106 /mnt/a/direct_sym106 -E EEXIST
 ./run --open-file /mnt/a/direct_sym106 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:80: Hard link symlink over another symlink
 ./run --link /mnt/a/direct_sym107 /mnt/a/pointless107 -E EEXIST
 ./run --open-file /mnt/a/direct_sym107 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/pointless107 -r -E ENOENT
TEST hard-link-sym.py:90: Hard link unlinked symlink
 ./run --unlink /mnt/a/direct_sym108
 ./run --link /mnt/a/direct_sym108 /mnt/a/no_foo108 -E ENOENT
 ./run --open-file /mnt/a/direct_sym108 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo108 -r -E ENOENT
TEST hard-link-sym.py:101: Hard link renamed symlink
 ./run --rename /mnt/a/direct_sym109 /mnt/a/no_foo109
 ./run --link /mnt/a/direct_sym109 /mnt/a/no_foo109-a -E ENOENT
 ./run --link /mnt/a/no_foo109 /mnt/a/direct_sym109
 ./run --open-file /mnt/a/direct_sym109 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo109 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo109-a -r -E ENOENT
***
*** ./run --ov --ts=1 hard-link-sym
***
TEST hard-link-sym.py:10: Hard link symlink
 ./run --link /mnt/a/direct_sym100 /mnt/a/no_foo100
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo100 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:20: Hard link dangling symlink
 ./run --link /mnt/a/pointless101 /mnt/a/no_foo101
 ./run --open-file /mnt/a/pointless101 -r -E ELOOP
 ./run --open-file /mnt/a/no_foo101 -r -E ELOOP
TEST hard-link-sym.py:30: Hard link non-existent file over a symlink
 ./run --link /mnt/a/no_foo102 /mnt/a/direct_sym102 -E ENOENT
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:40: Hard link symlink over file
 ./run --link /mnt/a/direct_sym103 /mnt/a/dir103/a -E EEXIST
 ./run --open-file /mnt/a/direct_sym103 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/dir103/a -r -R 
TEST hard-link-sym.py:50: Hard link symlink over new file
 ./run --open-file /mnt/a/foo104-new -w -c -W aaaa
 ./run --link /mnt/a/direct_sym104 /mnt/a/foo104-new -E EEXIST
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo104-new -r -R aaaa
TEST hard-link-sym.py:61: Hard link new file over symlink
 ./run --open-file /mnt/a/foo105-new -w -c -W aaaa
 ./run --link /mnt/a/foo105-new /mnt/a/direct_sym105 -E EEXIST
 ./run --open-file /mnt/a/foo105-new -r -R aaaa
 ./run --open-file /mnt/a/direct_sym105 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:72: Hard link symlink over itself
 ./run --link /mnt/a/direct_sym106 /mnt/a/direct_sym106 -E EEXIST
 ./run --open-file /mnt/a/direct_sym106 -r -R :xxx:yyy:zzz
TEST hard-link-sym.py:80: Hard link symlink over another symlink
 ./run --link /mnt/a/direct_sym107 /mnt/a/pointless107 -E EEXIST
 ./run --open-file /mnt/a/direct_sym107 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/pointless107 -r -E ENOENT
TEST hard-link-sym.py:90: Hard link unlinked symlink
 ./run --unlink /mnt/a/direct_sym108
 ./run --link /mnt/a/direct_sym108 /mnt/a/no_foo108 -E ENOENT
 ./run --open-file /mnt/a/direct_sym108 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo108 -r -E ENOENT
TEST hard-link-sym.py:101: Hard link renamed symlink
 ./run --rename /mnt/a/direct_sym109 /mnt/a/no_foo109
 ./run --link /mnt/a/direct_sym109 /mnt/a/no_foo109-a -E ENOENT
 ./run --link /mnt/a/no_foo109 /mnt/a/direct_sym109
 ./run --open-file /mnt/a/direct_sym109 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo109 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo109-a -r -E ENOENT
***
*** ./run --ov --ts=0 unlink
***
TEST unlink.py:9: Unlink file
 ./run --unlink /mnt/a/foo100
 ./run --open-file /mnt/a/foo100 -r -E ENOENT
 ./run --unlink /mnt/a/foo100 -E ENOENT
 ./run --open-file /mnt/a/foo100 -r -E ENOENT
TEST unlink.py:19: Unlink direct symlink to file
 ./run --open-file /mnt/a/direct_sym101 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/direct_sym101
 ./run --open-file /mnt/a/direct_sym101 -r -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/direct_sym101 -E ENOENT
 ./run --open-file /mnt/a/direct_sym101 -r -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST unlink.py:33: Unlink indirect symlink to file
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/indirect_sym102
 ./run --open-file /mnt/a/indirect_sym102 -r -E ENOENT
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/indirect_sym102 -E ENOENT
 ./run --open-file /mnt/a/indirect_sym102 -r -E ENOENT
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
TEST unlink.py:52: Unlink dir
 ./run --unlink /mnt/a/dir103 -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
 ./run --unlink /mnt/a/dir103 -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
TEST unlink.py:62: Unlink direct symlink to dir
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d
 ./run --unlink /mnt/a/direct_dir_sym104
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d -E ENOENT
 ./run --open-file /mnt/a/dir104 -r -d
 ./run --unlink /mnt/a/direct_dir_sym104 -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d -E ENOENT
 ./run --open-file /mnt/a/dir104 -r -d
TEST unlink.py:82: Unlink indirect symlink to dir
 ./run --open-file /mnt/a/indirect_dir_sym105 -r -d
 ./run --unlink /mnt/a/indirect_dir_sym105
 ./run --open-file /mnt/a/indirect_dir_sym105 -r -d -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym105 -r -d
 ./run --open-file /mnt/a/dir105 -r -d
 ./run --unlink /mnt/a/indirect_dir_sym105 -E ENOENT
 ./run --open-file /mnt/a/indirect_dir_sym105 -r -d -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym105 -r -d
TEST unlink.py:107: Unlink absent file
 ./run --unlink /mnt/a/no_foo106 -E ENOENT
 ./run --unlink /mnt/a/no_foo106 -E ENOENT
TEST unlink.py:114: Unlink broken symlink to absent file
 ./run --unlink /mnt/a/pointless107
 ./run --unlink /mnt/a/pointless107 -E ENOENT
TEST unlink.py:121: Unlink broken symlink
 ./run --unlink /mnt/a/pointless108
 ./run --unlink /mnt/a/pointless108 -E ENOENT
TEST unlink.py:128: Unlink absent file pointed to by broken symlink
 ./run --unlink /mnt/a/no_foo109 -E ENOENT
 ./run --unlink /mnt/a/no_foo109 -E ENOENT
***
*** ./run --ov --ts=1 unlink
***
TEST unlink.py:9: Unlink file
 ./run --unlink /mnt/a/foo100
 ./run --open-file /mnt/a/foo100 -r -E ENOENT
 ./run --unlink /mnt/a/foo100 -E ENOENT
 ./run --open-file /mnt/a/foo100 -r -E ENOENT
TEST unlink.py:19: Unlink direct symlink to file
 ./run --open-file /mnt/a/direct_sym101 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/direct_sym101
 ./run --open-file /mnt/a/direct_sym101 -r -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/direct_sym101 -E ENOENT
 ./run --open-file /mnt/a/direct_sym101 -r -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
TEST unlink.py:33: Unlink indirect symlink to file
 ./run --open-file /mnt/a/indirect_sym102 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/indirect_sym102
 ./run --open-file /mnt/a/indirect_sym102 -r -E ENOENT
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/indirect_sym102 -E ENOENT
 ./run --open-file /mnt/a/indirect_sym102 -r -E ENOENT
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
TEST unlink.py:52: Unlink dir
 ./run --unlink /mnt/a/dir103 -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
 ./run --unlink /mnt/a/dir103 -E EISDIR
 ./run --open-file /mnt/a/dir103 -r -d
TEST unlink.py:62: Unlink direct symlink to dir
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d
 ./run --unlink /mnt/a/direct_dir_sym104
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d -E ENOENT
 ./run --open-file /mnt/a/dir104 -r -d
 ./run --unlink /mnt/a/direct_dir_sym104 -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d -E ENOENT
 ./run --open-file /mnt/a/dir104 -r -d
TEST unlink.py:82: Unlink indirect symlink to dir
 ./run --open-file /mnt/a/indirect_dir_sym105 -r -d
 ./run --unlink /mnt/a/indirect_dir_sym105
 ./run --open-file /mnt/a/indirect_dir_sym105 -r -d -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym105 -r -d
 ./run --open-file /mnt/a/dir105 -r -d
 ./run --unlink /mnt/a/indirect_dir_sym105 -E ENOENT
 ./run --open-file /mnt/a/indirect_dir_sym105 -r -d -E ENOENT
 ./run --open-file /mnt/a/direct_dir_sym105 -r -d
TEST unlink.py:107: Unlink absent file
 ./run --unlink /mnt/a/no_foo106 -E ENOENT
 ./run --unlink /mnt/a/no_foo106 -E ENOENT
TEST unlink.py:114: Unlink broken symlink to absent file
 ./run --unlink /mnt/a/pointless107
 ./run --unlink /mnt/a/pointless107 -E ENOENT
TEST unlink.py:121: Unlink broken symlink
 ./run --unlink /mnt/a/pointless108
 ./run --unlink /mnt/a/pointless108 -E ENOENT
TEST unlink.py:128: Unlink absent file pointed to by broken symlink
 ./run --unlink /mnt/a/no_foo109 -E ENOENT
 ./run --unlink /mnt/a/no_foo109 -E ENOENT
***
*** ./run --ov --ts=0 rename-file
***
TEST rename-file.py:10: Rename file and rename back
 ./run --rename /mnt/a/foo100 /mnt/a/no_foo100
 ./run --rename /mnt/a/foo100 /mnt/a/no_foo100 -E ENOENT
 ./run --rename /mnt/a/no_foo100 /mnt/a/foo100
 ./run --rename /mnt/a/no_foo100 /mnt/a/foo100 -E ENOENT
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
TEST rename-file.py:23: Rename file and unlink old name
 ./run --rename /mnt/a/foo101 /mnt/a/no_foo101
 ./run --unlink /mnt/a/foo101 -E ENOENT
 ./run --rename /mnt/a/no_foo101 /mnt/a/foo101
 ./run --rename /mnt/a/no_foo101 /mnt/a/foo101 -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/foo101
 ./run --unlink /mnt/a/foo101 -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -r -E ENOENT
TEST rename-file.py:39: Rename file and rmdir old name
 ./run --rename /mnt/a/foo102 /mnt/a/no_foo102
 ./run --rmdir /mnt/a/foo102 -E ENOENT
 ./run --rename /mnt/a/no_foo102 /mnt/a/foo102
 ./run --rename /mnt/a/no_foo102 /mnt/a/foo102 -E ENOENT
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
 ./run --rmdir /mnt/a/foo102 -E ENOTDIR
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
TEST rename-file.py:54: Unlink file and rename old name
 ./run --unlink /mnt/a/foo103
 ./run --rename /mnt/a/foo103 /mnt/a/no_foo103 -E ENOENT
 ./run --unlink /mnt/a/foo103 -E ENOENT
 ./run --unlink /mnt/a/no_foo103 -E ENOENT
TEST rename-file.py:65: Rmdir file and rename old name
 ./run --rmdir /mnt/a/foo104 -E ENOTDIR
 ./run --rename /mnt/a/foo104 /mnt/a/no_foo104
 ./run --rmdir /mnt/a/foo104 -E ENOENT
 ./run --unlink /mnt/a/no_foo104
TEST rename-file.py:76: Rename file twice
 ./run --rename /mnt/a/foo105 /mnt/a/no_foo105
 ./run --rename /mnt/a/foo105 /mnt/a/no_foo105 -E ENOENT
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo105x
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo105x -E ENOENT
 ./run --open-file /mnt/a/foo105 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo105 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo105x -r -R :xxx:yyy:zzz
TEST rename-file.py:91: Rename file over another
 ./run --rename /mnt/a/foo106 /mnt/a/dir106/a
 ./run --rename /mnt/a/foo106 /mnt/a/dir106/a -E ENOENT
 ./run --open-file /mnt/a/foo106 -r -E ENOENT
 ./run --open-file /mnt/a/dir106/a -r -R :xxx:yyy:zzz
TEST rename-file.py:102: Rename file over itself
 ./run --rename /mnt/a/foo107 /mnt/a/foo107
 ./run --open-file /mnt/a/foo107 -r -R :xxx:yyy:zzz
TEST rename-file.py:110: Rename file over a dir
 ./run --rename /mnt/a/foo108 /mnt/a/empty108 -E EISDIR
 ./run --rename /mnt/a/foo108 /mnt/a/dir108 -E EISDIR
 ./run --open-file /mnt/a/foo108 -r -R :xxx:yyy:zzz
TEST rename-file.py:121: Rename file over parent dir
 ./run --rename /mnt/a/foo109 /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/foo109 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=1 rename-file
***
TEST rename-file.py:10: Rename file and rename back
 ./run --rename /mnt/a/foo100 /mnt/a/no_foo100
 ./run --rename /mnt/a/foo100 /mnt/a/no_foo100 -E ENOENT
 ./run --rename /mnt/a/no_foo100 /mnt/a/foo100
 ./run --rename /mnt/a/no_foo100 /mnt/a/foo100 -E ENOENT
 ./run --open-file /mnt/a/foo100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo100 -r -E ENOENT
TEST rename-file.py:23: Rename file and unlink old name
 ./run --rename /mnt/a/foo101 /mnt/a/no_foo101
 ./run --unlink /mnt/a/foo101 -E ENOENT
 ./run --rename /mnt/a/no_foo101 /mnt/a/foo101
 ./run --rename /mnt/a/no_foo101 /mnt/a/foo101 -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -R :xxx:yyy:zzz
 ./run --unlink /mnt/a/foo101
 ./run --unlink /mnt/a/foo101 -E ENOENT
 ./run --open-file /mnt/a/foo101 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo101 -r -E ENOENT
TEST rename-file.py:39: Rename file and rmdir old name
 ./run --rename /mnt/a/foo102 /mnt/a/no_foo102
 ./run --rmdir /mnt/a/foo102 -E ENOENT
 ./run --rename /mnt/a/no_foo102 /mnt/a/foo102
 ./run --rename /mnt/a/no_foo102 /mnt/a/foo102 -E ENOENT
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
 ./run --rmdir /mnt/a/foo102 -E ENOTDIR
 ./run --open-file /mnt/a/foo102 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/no_foo102 -r -E ENOENT
TEST rename-file.py:54: Unlink file and rename old name
 ./run --unlink /mnt/a/foo103
 ./run --rename /mnt/a/foo103 /mnt/a/no_foo103 -E ENOENT
 ./run --unlink /mnt/a/foo103 -E ENOENT
 ./run --unlink /mnt/a/no_foo103 -E ENOENT
TEST rename-file.py:65: Rmdir file and rename old name
 ./run --rmdir /mnt/a/foo104 -E ENOTDIR
 ./run --rename /mnt/a/foo104 /mnt/a/no_foo104
 ./run --rmdir /mnt/a/foo104 -E ENOENT
 ./run --unlink /mnt/a/no_foo104
TEST rename-file.py:76: Rename file twice
 ./run --rename /mnt/a/foo105 /mnt/a/no_foo105
 ./run --rename /mnt/a/foo105 /mnt/a/no_foo105 -E ENOENT
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo105x
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo105x -E ENOENT
 ./run --open-file /mnt/a/foo105 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo105 -r -E ENOENT
 ./run --open-file /mnt/a/no_foo105x -r -R :xxx:yyy:zzz
TEST rename-file.py:91: Rename file over another
 ./run --rename /mnt/a/foo106 /mnt/a/dir106/a
 ./run --rename /mnt/a/foo106 /mnt/a/dir106/a -E ENOENT
 ./run --open-file /mnt/a/foo106 -r -E ENOENT
 ./run --open-file /mnt/a/dir106/a -r -R :xxx:yyy:zzz
TEST rename-file.py:102: Rename file over itself
 ./run --rename /mnt/a/foo107 /mnt/a/foo107
 ./run --open-file /mnt/a/foo107 -r -R :xxx:yyy:zzz
TEST rename-file.py:110: Rename file over a dir
 ./run --rename /mnt/a/foo108 /mnt/a/empty108 -E EISDIR
 ./run --rename /mnt/a/foo108 /mnt/a/dir108 -E EISDIR
 ./run --open-file /mnt/a/foo108 -r -R :xxx:yyy:zzz
TEST rename-file.py:121: Rename file over parent dir
 ./run --rename /mnt/a/foo109 /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/foo109 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=0 rename-empty-dir
***
TEST rename-empty-dir.py:10: Rename empty dir and rename back
 ./run --rename /mnt/a/empty100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/empty100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100 -E ENOENT
 ./run --open-file /mnt/a/empty100 -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-empty-dir.py:23: Rename empty dir and remove old name
 ./run --rename /mnt/a/empty101 /mnt/a/no_dir101 -E EXDEV
 ./run --rmdir /mnt/a/empty101
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101 -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101 -E ENOENT
 ./run --open-file /mnt/a/empty101 -r -d -E ENOENT
 ./run --rmdir /mnt/a/empty101 -E ENOENT
 ./run --rmdir /mnt/a/empty101 -E ENOENT
 ./run --open-file /mnt/a/empty101 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-empty-dir.py:39: Rename empty dir and unlink old name
 ./run --rename /mnt/a/empty102 /mnt/a/no_dir102 -E EXDEV
 ./run --unlink /mnt/a/empty102 -E EISDIR
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102 -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102 -E ENOENT
 ./run --open-file /mnt/a/empty102 -r -d
 ./run --unlink /mnt/a/empty102 -E EISDIR
 ./run --open-file /mnt/a/empty102 -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-empty-dir.py:54: Remove dir and rename old name
 ./run --rmdir /mnt/a/empty103
 ./run --rename /mnt/a/empty103 /mnt/a/no_dir103 -E ENOENT
 ./run --rmdir /mnt/a/empty103 -E ENOENT
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
TEST rename-empty-dir.py:65: Unlink dir and rename old name
 ./run --unlink /mnt/a/empty104 -E EISDIR
 ./run --rename /mnt/a/empty104 /mnt/a/no_dir104 -E EXDEV
 ./run --unlink /mnt/a/empty104 -E EISDIR
 ./run --rmdir /mnt/a/no_dir104 -E ENOENT
TEST rename-empty-dir.py:76: Rename empty dir twice
 ./run --rename /mnt/a/empty105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/empty105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/empty105 -r -d
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d -E ENOENT
TEST rename-empty-dir.py:91: Rename empty dir over another populated dir
 ./run --rename /mnt/a/empty106 /mnt/a/dir106 -E EXDEV
 ./run --open-file /mnt/a/empty106 -r -d
 ./run --open-file /mnt/a/dir106 -r -d
TEST rename-empty-dir.py:101: Rename empty dir over itself
 ./run --rename /mnt/a/empty107 /mnt/a/empty107
 ./run --open-file /mnt/a/empty107 -r -d
TEST rename-empty-dir.py:109: Rename empty dir over a file
 ./run --rename /mnt/a/empty108 /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/empty108 /mnt/a/dir108/a -E ENOTDIR
 ./run --open-file /mnt/a/empty108 -r -d
TEST rename-empty-dir.py:120: Rename empty dir over parent dir
 ./run --rename /mnt/a/empty109 /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/empty109 -r -d
***
*** ./run --ov --ts=1 rename-empty-dir
***
TEST rename-empty-dir.py:10: Rename empty dir and rename back
 ./run --rename /mnt/a/empty100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/empty100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100 -E ENOENT
 ./run --open-file /mnt/a/empty100 -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-empty-dir.py:23: Rename empty dir and remove old name
 ./run --rename /mnt/a/empty101 /mnt/a/no_dir101 -E EXDEV
 ./run --rmdir /mnt/a/empty101
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101 -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101 -E ENOENT
 ./run --open-file /mnt/a/empty101 -r -d -E ENOENT
 ./run --rmdir /mnt/a/empty101 -E ENOENT
 ./run --rmdir /mnt/a/empty101 -E ENOENT
 ./run --open-file /mnt/a/empty101 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-empty-dir.py:39: Rename empty dir and unlink old name
 ./run --rename /mnt/a/empty102 /mnt/a/no_dir102 -E EXDEV
 ./run --unlink /mnt/a/empty102 -E EISDIR
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102 -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102 -E ENOENT
 ./run --open-file /mnt/a/empty102 -r -d
 ./run --unlink /mnt/a/empty102 -E EISDIR
 ./run --open-file /mnt/a/empty102 -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-empty-dir.py:54: Remove dir and rename old name
 ./run --rmdir /mnt/a/empty103
 ./run --rename /mnt/a/empty103 /mnt/a/no_dir103 -E ENOENT
 ./run --rmdir /mnt/a/empty103 -E ENOENT
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
TEST rename-empty-dir.py:65: Unlink dir and rename old name
 ./run --unlink /mnt/a/empty104 -E EISDIR
 ./run --rename /mnt/a/empty104 /mnt/a/no_dir104 -E EXDEV
 ./run --unlink /mnt/a/empty104 -E EISDIR
 ./run --rmdir /mnt/a/no_dir104 -E ENOENT
TEST rename-empty-dir.py:76: Rename empty dir twice
 ./run --rename /mnt/a/empty105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/empty105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/empty105 -r -d
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d -E ENOENT
TEST rename-empty-dir.py:91: Rename empty dir over another populated dir
 ./run --rename /mnt/a/empty106 /mnt/a/dir106 -E EXDEV
 ./run --open-file /mnt/a/empty106 -r -d
 ./run --open-file /mnt/a/dir106 -r -d
TEST rename-empty-dir.py:101: Rename empty dir over itself
 ./run --rename /mnt/a/empty107 /mnt/a/empty107
 ./run --open-file /mnt/a/empty107 -r -d
TEST rename-empty-dir.py:109: Rename empty dir over a file
 ./run --rename /mnt/a/empty108 /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/empty108 /mnt/a/dir108/a -E ENOTDIR
 ./run --open-file /mnt/a/empty108 -r -d
TEST rename-empty-dir.py:120: Rename empty dir over parent dir
 ./run --rename /mnt/a/empty109 /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/empty109 -r -d
***
*** ./run --ov --ts=0 rename-new-dir
***
TEST rename-new-dir.py:10: Rename empty dir and rename back
 ./run --mkdir /mnt/a/empty100-new 0755
 ./run --rename /mnt/a/empty100-new /mnt/a/no_dir100
 ./run --rename /mnt/a/empty100-new /mnt/a/no_dir100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100-new
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100-new -E ENOENT
 ./run --open-file /mnt/a/empty100-new -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-new-dir.py:24: Rename empty dir and remove old name
 ./run --mkdir /mnt/a/empty101-new 0755
 ./run --rename /mnt/a/empty101-new /mnt/a/no_dir101
 ./run --rmdir /mnt/a/empty101-new -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101-new
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101-new -E ENOENT
 ./run --open-file /mnt/a/empty101-new -r -d
 ./run --rmdir /mnt/a/empty101-new
 ./run --rmdir /mnt/a/empty101-new -E ENOENT
 ./run --open-file /mnt/a/empty101-new -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-new-dir.py:41: Rename empty dir and unlink old name
 ./run --mkdir /mnt/a/empty102-new 0755
 ./run --rename /mnt/a/empty102-new /mnt/a/no_dir102
 ./run --unlink /mnt/a/empty102-new -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102-new
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102-new -E ENOENT
 ./run --open-file /mnt/a/empty102-new -r -d
 ./run --unlink /mnt/a/empty102-new -E EISDIR
 ./run --open-file /mnt/a/empty102-new -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-new-dir.py:57: Remove dir and rename old name
 ./run --mkdir /mnt/a/empty103-new 0755
 ./run --rmdir /mnt/a/empty103-new
 ./run --rename /mnt/a/empty103-new /mnt/a/no_dir103 -E ENOENT
 ./run --rmdir /mnt/a/empty103-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
TEST rename-new-dir.py:69: Unlink dir and rename old name
 ./run --mkdir /mnt/a/empty104-new 0755
 ./run --unlink /mnt/a/empty104-new -E EISDIR
 ./run --rename /mnt/a/empty104-new /mnt/a/no_dir104
 ./run --unlink /mnt/a/empty104-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir104
TEST rename-new-dir.py:81: Rename empty dir twice
 ./run --mkdir /mnt/a/empty105-new 0755
 ./run --rename /mnt/a/empty105-new /mnt/a/no_dir105
 ./run --rename /mnt/a/empty105-new /mnt/a/no_dir105 -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d
TEST rename-new-dir.py:97: Rename empty dir over another populated dir
 ./run --mkdir /mnt/a/empty106-new 0755
 ./run --rename /mnt/a/empty106-new /mnt/a/dir106 -E ENOTEMPTY
 ./run --open-file /mnt/a/empty106-new -r -d
 ./run --open-file /mnt/a/dir106 -r -d
TEST rename-new-dir.py:108: Rename empty dir over itself
 ./run --mkdir /mnt/a/empty107-new 0755
 ./run --rename /mnt/a/empty107-new /mnt/a/empty107-new
 ./run --open-file /mnt/a/empty107-new -r -d
TEST rename-new-dir.py:117: Rename empty dir over a file
 ./run --mkdir /mnt/a/empty108-new 0755
 ./run --rename /mnt/a/empty108-new /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/empty108-new /mnt/a/dir108/a -E ENOTDIR
 ./run --open-file /mnt/a/empty108-new -r -d
TEST rename-new-dir.py:129: Rename empty dir over parent dir
 ./run --mkdir /mnt/a/empty109-new 0755
 ./run --rename /mnt/a/empty109-new /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/empty109-new -r -d
TEST rename-new-dir.py:161: Rename empty dir over removed empty lower dir
 ./run --mkdir /mnt/a/empty110-new 0755
 ./run --rmdir /mnt/a/empty110
 ./run --rename /mnt/a/empty110-new /mnt/a/empty110
 ./run --open-file /mnt/a/empty110 -r -d
TEST rename-new-dir.py:172: Rename empty dir over removed populated lower dir
 ./run --mkdir /mnt/a/empty111-new 0755
- rmtree /mnt/a/dir111
 ./run --rename /mnt/a/empty111-new /mnt/a/dir111
 ./run --open-file /mnt/a/dir111/a -r -E ENOENT
 ./run --open-file /mnt/a/dir111/pop -r -d -E ENOENT
 ./run --open-file /mnt/a/dir111 -r -d
***
*** ./run --ov --ts=1 rename-new-dir
***
TEST rename-new-dir.py:10: Rename empty dir and rename back
 ./run --mkdir /mnt/a/empty100-new 0755
 ./run --rename /mnt/a/empty100-new /mnt/a/no_dir100
 ./run --rename /mnt/a/empty100-new /mnt/a/no_dir100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100-new
 ./run --rename /mnt/a/no_dir100 /mnt/a/empty100-new -E ENOENT
 ./run --open-file /mnt/a/empty100-new -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-new-dir.py:24: Rename empty dir and remove old name
 ./run --mkdir /mnt/a/empty101-new 0755
 ./run --rename /mnt/a/empty101-new /mnt/a/no_dir101
 ./run --rmdir /mnt/a/empty101-new -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101-new
 ./run --rename /mnt/a/no_dir101 /mnt/a/empty101-new -E ENOENT
 ./run --open-file /mnt/a/empty101-new -r -d
 ./run --rmdir /mnt/a/empty101-new
 ./run --rmdir /mnt/a/empty101-new -E ENOENT
 ./run --open-file /mnt/a/empty101-new -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-new-dir.py:41: Rename empty dir and unlink old name
 ./run --mkdir /mnt/a/empty102-new 0755
 ./run --rename /mnt/a/empty102-new /mnt/a/no_dir102
 ./run --unlink /mnt/a/empty102-new -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102-new
 ./run --rename /mnt/a/no_dir102 /mnt/a/empty102-new -E ENOENT
 ./run --open-file /mnt/a/empty102-new -r -d
 ./run --unlink /mnt/a/empty102-new -E EISDIR
 ./run --open-file /mnt/a/empty102-new -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-new-dir.py:57: Remove dir and rename old name
 ./run --mkdir /mnt/a/empty103-new 0755
 ./run --rmdir /mnt/a/empty103-new
 ./run --rename /mnt/a/empty103-new /mnt/a/no_dir103 -E ENOENT
 ./run --rmdir /mnt/a/empty103-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
TEST rename-new-dir.py:69: Unlink dir and rename old name
 ./run --mkdir /mnt/a/empty104-new 0755
 ./run --unlink /mnt/a/empty104-new -E EISDIR
 ./run --rename /mnt/a/empty104-new /mnt/a/no_dir104
 ./run --unlink /mnt/a/empty104-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir104
TEST rename-new-dir.py:81: Rename empty dir twice
 ./run --mkdir /mnt/a/empty105-new 0755
 ./run --rename /mnt/a/empty105-new /mnt/a/no_dir105
 ./run --rename /mnt/a/empty105-new /mnt/a/no_dir105 -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d
TEST rename-new-dir.py:97: Rename empty dir over another populated dir
 ./run --mkdir /mnt/a/empty106-new 0755
 ./run --rename /mnt/a/empty106-new /mnt/a/dir106 -E ENOTEMPTY
 ./run --open-file /mnt/a/empty106-new -r -d
 ./run --open-file /mnt/a/dir106 -r -d
TEST rename-new-dir.py:108: Rename empty dir over itself
 ./run --mkdir /mnt/a/empty107-new 0755
 ./run --rename /mnt/a/empty107-new /mnt/a/empty107-new
 ./run --open-file /mnt/a/empty107-new -r -d
TEST rename-new-dir.py:117: Rename empty dir over a file
 ./run --mkdir /mnt/a/empty108-new 0755
 ./run --rename /mnt/a/empty108-new /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/empty108-new /mnt/a/dir108/a -E ENOTDIR
 ./run --open-file /mnt/a/empty108-new -r -d
TEST rename-new-dir.py:129: Rename empty dir over parent dir
 ./run --mkdir /mnt/a/empty109-new 0755
 ./run --rename /mnt/a/empty109-new /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/empty109-new -r -d
TEST rename-new-dir.py:161: Rename empty dir over removed empty lower dir
 ./run --mkdir /mnt/a/empty110-new 0755
 ./run --rmdir /mnt/a/empty110
 ./run --rename /mnt/a/empty110-new /mnt/a/empty110
 ./run --open-file /mnt/a/empty110 -r -d
TEST rename-new-dir.py:172: Rename empty dir over removed populated lower dir
 ./run --mkdir /mnt/a/empty111-new 0755
- rmtree /mnt/a/dir111
 ./run --rename /mnt/a/empty111-new /mnt/a/dir111
 ./run --open-file /mnt/a/dir111/a -r -E ENOENT
 ./run --open-file /mnt/a/dir111/pop -r -d -E ENOENT
 ./run --open-file /mnt/a/dir111 -r -d
***
*** ./run --ov --ts=0 rename-pop-dir
***
TEST rename-pop-dir.py:10: Rename dir and rename back
 ./run --rename /mnt/a/dir100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/dir100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100 -E ENOENT
 ./run --open-file /mnt/a/dir100 -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-pop-dir.py:23: Rename dir and remove old name
 ./run --rename /mnt/a/dir101 /mnt/a/no_dir101 -E EXDEV
 ./run --rmdir /mnt/a/dir101 -E ENOTEMPTY
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101 -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101 -E ENOENT
 ./run --open-file /mnt/a/dir101 -r -d
 ./run --rmdir /mnt/a/dir101 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir101 -r -d
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-pop-dir.py:38: Rename dir and unlink old name
 ./run --rename /mnt/a/dir102 /mnt/a/no_dir102 -E EXDEV
 ./run --unlink /mnt/a/dir102 -E EISDIR
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102 -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102 -E ENOENT
 ./run --open-file /mnt/a/dir102 -r -d
 ./run --unlink /mnt/a/dir102 -E EISDIR
 ./run --open-file /mnt/a/dir102 -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-pop-dir.py:53: Remove dir and rename old name
 ./run --rmdir /mnt/a/dir103 -E ENOTEMPTY
 ./run --rename /mnt/a/dir103 /mnt/a/no_dir103 -E EXDEV
 ./run --rmdir /mnt/a/dir103 -E ENOTEMPTY
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
TEST rename-pop-dir.py:64: Unlink dir and rename old name
 ./run --unlink /mnt/a/dir104 -E EISDIR
 ./run --rename /mnt/a/dir104 /mnt/a/no_dir104 -E EXDEV
 ./run --unlink /mnt/a/dir104 -E EISDIR
 ./run --rmdir /mnt/a/no_dir104 -E ENOENT
TEST rename-pop-dir.py:75: Rename dir twice
 ./run --rename /mnt/a/dir105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/dir105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/dir105 -r -d
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d -E ENOENT
TEST rename-pop-dir.py:90: Rename dir over another populated dir
 ./run --rename /mnt/a/dir106 /mnt/a/empty106 -E EXDEV
 ./run --open-file /mnt/a/dir106 -r -d
 ./run --open-file /mnt/a/empty106 -r -d
TEST rename-pop-dir.py:100: Rename dir over itself
 ./run --rename /mnt/a/dir107 /mnt/a/dir107
 ./run --open-file /mnt/a/dir107 -r -d
TEST rename-pop-dir.py:108: Rename dir over a child file
 ./run --rename /mnt/a/dir108 /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/dir108 /mnt/a/dir108/a -E EINVAL
 ./run --open-file /mnt/a/dir108 -r -d
TEST rename-pop-dir.py:119: Rename dir over a file
 ./run --rename /mnt/a/dir109/pop /mnt/a/dir109/a -E ENOTDIR
 ./run --open-file /mnt/a/dir109/pop -r -d
TEST rename-pop-dir.py:128: Rename dir over parent dir
 ./run --rename /mnt/a/dir110 /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/dir110 -r -d
***
*** ./run --ov --ts=1 rename-pop-dir
***
TEST rename-pop-dir.py:10: Rename dir and rename back
 ./run --rename /mnt/a/dir100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/dir100 /mnt/a/no_dir100 -E EXDEV
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100 -E ENOENT
 ./run --open-file /mnt/a/dir100 -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-pop-dir.py:23: Rename dir and remove old name
 ./run --rename /mnt/a/dir101 /mnt/a/no_dir101 -E EXDEV
 ./run --rmdir /mnt/a/dir101 -E ENOTEMPTY
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101 -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101 -E ENOENT
 ./run --open-file /mnt/a/dir101 -r -d
 ./run --rmdir /mnt/a/dir101 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir101 -r -d
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-pop-dir.py:38: Rename dir and unlink old name
 ./run --rename /mnt/a/dir102 /mnt/a/no_dir102 -E EXDEV
 ./run --unlink /mnt/a/dir102 -E EISDIR
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102 -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102 -E ENOENT
 ./run --open-file /mnt/a/dir102 -r -d
 ./run --unlink /mnt/a/dir102 -E EISDIR
 ./run --open-file /mnt/a/dir102 -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-pop-dir.py:53: Remove dir and rename old name
 ./run --rmdir /mnt/a/dir103 -E ENOTEMPTY
 ./run --rename /mnt/a/dir103 /mnt/a/no_dir103 -E EXDEV
 ./run --rmdir /mnt/a/dir103 -E ENOTEMPTY
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
TEST rename-pop-dir.py:64: Unlink dir and rename old name
 ./run --unlink /mnt/a/dir104 -E EISDIR
 ./run --rename /mnt/a/dir104 /mnt/a/no_dir104 -E EXDEV
 ./run --unlink /mnt/a/dir104 -E EISDIR
 ./run --rmdir /mnt/a/no_dir104 -E ENOENT
TEST rename-pop-dir.py:75: Rename dir twice
 ./run --rename /mnt/a/dir105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/dir105 /mnt/a/no_dir105 -E EXDEV
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/dir105 -r -d
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d -E ENOENT
TEST rename-pop-dir.py:90: Rename dir over another populated dir
 ./run --rename /mnt/a/dir106 /mnt/a/empty106 -E EXDEV
 ./run --open-file /mnt/a/dir106 -r -d
 ./run --open-file /mnt/a/empty106 -r -d
TEST rename-pop-dir.py:100: Rename dir over itself
 ./run --rename /mnt/a/dir107 /mnt/a/dir107
 ./run --open-file /mnt/a/dir107 -r -d
TEST rename-pop-dir.py:108: Rename dir over a child file
 ./run --rename /mnt/a/dir108 /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/dir108 /mnt/a/dir108/a -E EINVAL
 ./run --open-file /mnt/a/dir108 -r -d
TEST rename-pop-dir.py:119: Rename dir over a file
 ./run --rename /mnt/a/dir109/pop /mnt/a/dir109/a -E ENOTDIR
 ./run --open-file /mnt/a/dir109/pop -r -d
TEST rename-pop-dir.py:128: Rename dir over parent dir
 ./run --rename /mnt/a/dir110 /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/dir110 -r -d
***
*** ./run --ov --ts=0 rename-new-pop-dir
***
TEST rename-new-pop-dir.py:10: Rename new dir and rename back
 ./run --mkdir /mnt/a/dir100-new 0755
 ./run --open-file /mnt/a/dir100-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir100-new /mnt/a/no_dir100
 ./run --rename /mnt/a/dir100-new /mnt/a/no_dir100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100-new
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100-new -E ENOENT
 ./run --open-file /mnt/a/dir100-new -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-new-pop-dir.py:25: Rename new dir and remove old name
 ./run --mkdir /mnt/a/dir101-new 0755
 ./run --open-file /mnt/a/dir101-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir101-new /mnt/a/no_dir101
 ./run --rmdir /mnt/a/dir101-new -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101-new
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101-new -E ENOENT
 ./run --open-file /mnt/a/dir101-new -r -d
 ./run --rmdir /mnt/a/dir101-new -E ENOTEMPTY
 ./run --open-file /mnt/a/dir101-new -r -d
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-new-pop-dir.py:42: Rename new dir and unlink old name
 ./run --mkdir /mnt/a/dir102-new 0755
 ./run --open-file /mnt/a/dir102-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir102-new /mnt/a/no_dir102
 ./run --unlink /mnt/a/dir102-new -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102-new
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102-new -E ENOENT
 ./run --open-file /mnt/a/dir102-new -r -d
 ./run --unlink /mnt/a/dir102-new -E EISDIR
 ./run --open-file /mnt/a/dir102-new -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-new-pop-dir.py:59: Remove dir and rename old name
 ./run --mkdir /mnt/a/dir103-new 0755
 ./run --open-file /mnt/a/dir103-new/a -w -c -W aaaa
 ./run --rmdir /mnt/a/dir103-new -E ENOTEMPTY
 ./run --rename /mnt/a/dir103-new /mnt/a/no_dir103
 ./run --rmdir /mnt/a/dir103-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir103 -E ENOTEMPTY
TEST rename-new-pop-dir.py:72: Unlink dir and rename old name
 ./run --mkdir /mnt/a/dir104-new 0755
 ./run --open-file /mnt/a/dir104-new/a -w -c -W aaaa
 ./run --unlink /mnt/a/dir104-new -E EISDIR
 ./run --rename /mnt/a/dir104-new /mnt/a/no_dir104
 ./run --unlink /mnt/a/dir104-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir104 -E ENOTEMPTY
TEST rename-new-pop-dir.py:85: Rename new dir twice
 ./run --mkdir /mnt/a/dir105-new 0755
 ./run --open-file /mnt/a/dir105-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir105-new /mnt/a/no_dir105
 ./run --rename /mnt/a/dir105-new /mnt/a/no_dir105 -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/dir105-new -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d
TEST rename-new-pop-dir.py:102: Rename new dir over another populated dir
 ./run --mkdir /mnt/a/dir106-new 0755
 ./run --open-file /mnt/a/dir106-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir106-new /mnt/a/empty106
 ./run --open-file /mnt/a/dir106-new -r -d -E ENOENT
 ./run --open-file /mnt/a/empty106 -r -d
TEST rename-new-pop-dir.py:114: Rename new dir over itself
 ./run --mkdir /mnt/a/dir107-new 0755
 ./run --open-file /mnt/a/dir107-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir107-new /mnt/a/dir107-new
 ./run --open-file /mnt/a/dir107-new -r -d
TEST rename-new-pop-dir.py:124: Rename new dir over a child file
 ./run --mkdir /mnt/a/dir108-new 0755
 ./run --open-file /mnt/a/dir108-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir108-new /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/dir108-new /mnt/a/dir108-new/a -E EINVAL
 ./run --open-file /mnt/a/dir108-new -r -d
TEST rename-new-pop-dir.py:137: Rename new dir over a file
 ./run --mkdir /mnt/a/dir109-new 0755
 ./run --open-file /mnt/a/dir109-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir109-new /mnt/a/dir109/a -E ENOTDIR
 ./run --open-file /mnt/a/dir109-new -r -d
TEST rename-new-pop-dir.py:148: Rename new dir over parent dir
 ./run --mkdir /mnt/a/dir110-new 0755
 ./run --open-file /mnt/a/dir110-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir110-new /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/dir110-new -r -d
TEST rename-new-pop-dir.py:159: Rename new dir over unioned dir
 ./run --mkdir /mnt/a/dir111-new 0755
 ./run --open-file /mnt/a/dir111-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir111-new /mnt/a/dir111 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir111-new -r -d
TEST rename-new-pop-dir.py:170: Rename new dir over removed unioned empty dir
 ./run --mkdir /mnt/a/dir112-new 0755
 ./run --open-file /mnt/a/dir112-new/a -w -c -W aaaa
 ./run --rmdir /mnt/a/dir112/pop/c
 ./run --rename /mnt/a/dir112-new /mnt/a/dir112/pop/c
 ./run --open-file /mnt/a/dir112/pop/c -r -d
 ./run --open-file /mnt/a/dir112/pop/c/a -r -R aaaa
TEST rename-new-pop-dir.py:183: Rename new dir over removed unioned dir, different files
 ./run --mkdir /mnt/a/dir113-new 0755
 ./run --open-file /mnt/a/dir113-new/a -w -c -W aaaa
- rmtree /mnt/a/dir113/pop
 ./run --rename /mnt/a/dir113-new /mnt/a/dir113/pop
 ./run --open-file /mnt/a/dir113/pop -r -d
 ./run --open-file /mnt/a/dir113/pop/a -r -R aaaa
 ./run --open-file /mnt/a/dir113/pop/b -r -E ENOENT
TEST rename-new-pop-dir.py:197: Rename new dir over removed unioned dir, same files
 ./run --mkdir /mnt/a/dir114-new 0755
 ./run --open-file /mnt/a/dir114-new/b -w -c -W aaaa
- rmtree /mnt/a/dir114/pop
 ./run --rename /mnt/a/dir114-new /mnt/a/dir114/pop
 ./run --open-file /mnt/a/dir114-new -r -d -E ENOENT
 ./run --open-file /mnt/a/dir114/pop -r -d
 ./run --open-file /mnt/a/dir114/pop/b -r -R aaaa
TEST rename-new-pop-dir.py:211: Rename new dir over removed unioned dir, different dirs
 ./run --mkdir /mnt/a/dir115-new 0755
 ./run --mkdir /mnt/a/dir115-new/pop 0755
 ./run --open-file /mnt/a/dir115-new/pop/x -w -c -W aaaa
- rmtree /mnt/a/dir115
 ./run --rename /mnt/a/dir115-new /mnt/a/dir115
 ./run --open-file /mnt/a/dir115-new -r -d -E ENOENT
 ./run --open-file /mnt/a/dir115 -r -d
 ./run --open-file /mnt/a/dir115/pop/x -r -R aaaa
 ./run --open-file /mnt/a/dir115/pop/b -r -E ENOENT
TEST rename-new-pop-dir.py:227: Rename new dir over removed unioned dir, same dirs
 ./run --mkdir /mnt/a/dir116-new 0755
 ./run --mkdir /mnt/a/dir116-new/pop 0755
 ./run --open-file /mnt/a/dir116-new/pop/b -w -c -W aaaa
- rmtree /mnt/a/dir116
 ./run --rename /mnt/a/dir116-new /mnt/a/dir116
 ./run --open-file /mnt/a/dir116-new -r -d -E ENOENT
 ./run --open-file /mnt/a/dir116 -r -d
 ./run --open-file /mnt/a/dir116/pop/b -r -R aaaa
TEST rename-new-pop-dir.py:242: Rename new dir over unlinked unioned dir
 ./run --mkdir /mnt/a/dir117-new 0755
 ./run --mkdir /mnt/a/dir117-new/pop 0755
 ./run --open-file /mnt/a/dir117-new/pop/b -w -c -W aaaa
 ./run --unlink /mnt/a/dir117 -E EISDIR
 ./run --rename /mnt/a/dir117-new /mnt/a/dir117 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir117-new -r -d
 ./run --open-file /mnt/a/dir117 -r -d
 ./run --open-file /mnt/a/dir117-new/pop/b -r -R aaaa
 ./run --open-file /mnt/a/dir117/pop/b -r -R :aaa:bbb:ccc
***
*** ./run --ov --ts=1 rename-new-pop-dir
***
TEST rename-new-pop-dir.py:10: Rename new dir and rename back
 ./run --mkdir /mnt/a/dir100-new 0755
 ./run --open-file /mnt/a/dir100-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir100-new /mnt/a/no_dir100
 ./run --rename /mnt/a/dir100-new /mnt/a/no_dir100 -E ENOENT
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100-new
 ./run --rename /mnt/a/no_dir100 /mnt/a/dir100-new -E ENOENT
 ./run --open-file /mnt/a/dir100-new -r -d
 ./run --open-file /mnt/a/no_dir100 -r -d -E ENOENT
TEST rename-new-pop-dir.py:25: Rename new dir and remove old name
 ./run --mkdir /mnt/a/dir101-new 0755
 ./run --open-file /mnt/a/dir101-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir101-new /mnt/a/no_dir101
 ./run --rmdir /mnt/a/dir101-new -E ENOENT
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101-new
 ./run --rename /mnt/a/no_dir101 /mnt/a/dir101-new -E ENOENT
 ./run --open-file /mnt/a/dir101-new -r -d
 ./run --rmdir /mnt/a/dir101-new -E ENOTEMPTY
 ./run --open-file /mnt/a/dir101-new -r -d
 ./run --open-file /mnt/a/no_dir101 -r -d -E ENOENT
TEST rename-new-pop-dir.py:42: Rename new dir and unlink old name
 ./run --mkdir /mnt/a/dir102-new 0755
 ./run --open-file /mnt/a/dir102-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir102-new /mnt/a/no_dir102
 ./run --unlink /mnt/a/dir102-new -E ENOENT
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102-new
 ./run --rename /mnt/a/no_dir102 /mnt/a/dir102-new -E ENOENT
 ./run --open-file /mnt/a/dir102-new -r -d
 ./run --unlink /mnt/a/dir102-new -E EISDIR
 ./run --open-file /mnt/a/dir102-new -r -d
 ./run --open-file /mnt/a/no_dir102 -r -d -E ENOENT
TEST rename-new-pop-dir.py:59: Remove dir and rename old name
 ./run --mkdir /mnt/a/dir103-new 0755
 ./run --open-file /mnt/a/dir103-new/a -w -c -W aaaa
 ./run --rmdir /mnt/a/dir103-new -E ENOTEMPTY
 ./run --rename /mnt/a/dir103-new /mnt/a/no_dir103
 ./run --rmdir /mnt/a/dir103-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir103 -E ENOTEMPTY
TEST rename-new-pop-dir.py:72: Unlink dir and rename old name
 ./run --mkdir /mnt/a/dir104-new 0755
 ./run --open-file /mnt/a/dir104-new/a -w -c -W aaaa
 ./run --unlink /mnt/a/dir104-new -E EISDIR
 ./run --rename /mnt/a/dir104-new /mnt/a/no_dir104
 ./run --unlink /mnt/a/dir104-new -E ENOENT
 ./run --rmdir /mnt/a/no_dir104 -E ENOTEMPTY
TEST rename-new-pop-dir.py:85: Rename new dir twice
 ./run --mkdir /mnt/a/dir105-new 0755
 ./run --open-file /mnt/a/dir105-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir105-new /mnt/a/no_dir105
 ./run --rename /mnt/a/dir105-new /mnt/a/no_dir105 -E ENOENT
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir105x -E ENOENT
 ./run --open-file /mnt/a/dir105-new -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105 -r -d -E ENOENT
 ./run --open-file /mnt/a/no_dir105x -r -d
TEST rename-new-pop-dir.py:102: Rename new dir over another populated dir
 ./run --mkdir /mnt/a/dir106-new 0755
 ./run --open-file /mnt/a/dir106-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir106-new /mnt/a/empty106
 ./run --open-file /mnt/a/dir106-new -r -d -E ENOENT
 ./run --open-file /mnt/a/empty106 -r -d
TEST rename-new-pop-dir.py:114: Rename new dir over itself
 ./run --mkdir /mnt/a/dir107-new 0755
 ./run --open-file /mnt/a/dir107-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir107-new /mnt/a/dir107-new
 ./run --open-file /mnt/a/dir107-new -r -d
TEST rename-new-pop-dir.py:124: Rename new dir over a child file
 ./run --mkdir /mnt/a/dir108-new 0755
 ./run --open-file /mnt/a/dir108-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir108-new /mnt/a/foo108 -E ENOTDIR
 ./run --rename /mnt/a/dir108-new /mnt/a/dir108-new/a -E EINVAL
 ./run --open-file /mnt/a/dir108-new -r -d
TEST rename-new-pop-dir.py:137: Rename new dir over a file
 ./run --mkdir /mnt/a/dir109-new 0755
 ./run --open-file /mnt/a/dir109-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir109-new /mnt/a/dir109/a -E ENOTDIR
 ./run --open-file /mnt/a/dir109-new -r -d
TEST rename-new-pop-dir.py:148: Rename new dir over parent dir
 ./run --mkdir /mnt/a/dir110-new 0755
 ./run --open-file /mnt/a/dir110-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir110-new /mnt/a -E ENOTEMPTY
 ./run --open-file /mnt/a/dir110-new -r -d
TEST rename-new-pop-dir.py:159: Rename new dir over unioned dir
 ./run --mkdir /mnt/a/dir111-new 0755
 ./run --open-file /mnt/a/dir111-new/a -w -c -W aaaa
 ./run --rename /mnt/a/dir111-new /mnt/a/dir111 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir111-new -r -d
TEST rename-new-pop-dir.py:170: Rename new dir over removed unioned empty dir
 ./run --mkdir /mnt/a/dir112-new 0755
 ./run --open-file /mnt/a/dir112-new/a -w -c -W aaaa
 ./run --rmdir /mnt/a/dir112/pop/c
 ./run --rename /mnt/a/dir112-new /mnt/a/dir112/pop/c
 ./run --open-file /mnt/a/dir112/pop/c -r -d
 ./run --open-file /mnt/a/dir112/pop/c/a -r -R aaaa
TEST rename-new-pop-dir.py:183: Rename new dir over removed unioned dir, different files
 ./run --mkdir /mnt/a/dir113-new 0755
 ./run --open-file /mnt/a/dir113-new/a -w -c -W aaaa
- rmtree /mnt/a/dir113/pop
 ./run --rename /mnt/a/dir113-new /mnt/a/dir113/pop
 ./run --open-file /mnt/a/dir113/pop -r -d
 ./run --open-file /mnt/a/dir113/pop/a -r -R aaaa
 ./run --open-file /mnt/a/dir113/pop/b -r -E ENOENT
TEST rename-new-pop-dir.py:197: Rename new dir over removed unioned dir, same files
 ./run --mkdir /mnt/a/dir114-new 0755
 ./run --open-file /mnt/a/dir114-new/b -w -c -W aaaa
- rmtree /mnt/a/dir114/pop
 ./run --rename /mnt/a/dir114-new /mnt/a/dir114/pop
 ./run --open-file /mnt/a/dir114-new -r -d -E ENOENT
 ./run --open-file /mnt/a/dir114/pop -r -d
 ./run --open-file /mnt/a/dir114/pop/b -r -R aaaa
TEST rename-new-pop-dir.py:211: Rename new dir over removed unioned dir, different dirs
 ./run --mkdir /mnt/a/dir115-new 0755
 ./run --mkdir /mnt/a/dir115-new/pop 0755
 ./run --open-file /mnt/a/dir115-new/pop/x -w -c -W aaaa
- rmtree /mnt/a/dir115
 ./run --rename /mnt/a/dir115-new /mnt/a/dir115
 ./run --open-file /mnt/a/dir115-new -r -d -E ENOENT
 ./run --open-file /mnt/a/dir115 -r -d
 ./run --open-file /mnt/a/dir115/pop/x -r -R aaaa
 ./run --open-file /mnt/a/dir115/pop/b -r -E ENOENT
TEST rename-new-pop-dir.py:227: Rename new dir over removed unioned dir, same dirs
 ./run --mkdir /mnt/a/dir116-new 0755
 ./run --mkdir /mnt/a/dir116-new/pop 0755
 ./run --open-file /mnt/a/dir116-new/pop/b -w -c -W aaaa
- rmtree /mnt/a/dir116
 ./run --rename /mnt/a/dir116-new /mnt/a/dir116
 ./run --open-file /mnt/a/dir116-new -r -d -E ENOENT
 ./run --open-file /mnt/a/dir116 -r -d
 ./run --open-file /mnt/a/dir116/pop/b -r -R aaaa
TEST rename-new-pop-dir.py:242: Rename new dir over unlinked unioned dir
 ./run --mkdir /mnt/a/dir117-new 0755
 ./run --mkdir /mnt/a/dir117-new/pop 0755
 ./run --open-file /mnt/a/dir117-new/pop/b -w -c -W aaaa
 ./run --unlink /mnt/a/dir117 -E EISDIR
 ./run --rename /mnt/a/dir117-new /mnt/a/dir117 -E ENOTEMPTY
 ./run --open-file /mnt/a/dir117-new -r -d
 ./run --open-file /mnt/a/dir117 -r -d
 ./run --open-file /mnt/a/dir117-new/pop/b -r -R aaaa
 ./run --open-file /mnt/a/dir117/pop/b -r -R :aaa:bbb:ccc
***
*** ./run --ov --ts=0 rename-move-dir
***
TEST rename-move-dir.py:10: Move dir into another
 ./run --rename /mnt/a/empty100 /mnt/a/dir100/empty100 -E EXDEV
 ./run --rename /mnt/a/empty100 /mnt/a/dir100/empty100 -E EXDEV
 ./run --open-file /mnt/a/dir100/empty100 -r -d -E ENOENT
 ./run --open-file /mnt/a/empty100 -r -d
***
*** ./run --ov --ts=1 rename-move-dir
***
TEST rename-move-dir.py:10: Move dir into another
 ./run --rename /mnt/a/empty100 /mnt/a/dir100/empty100 -E EXDEV
 ./run --rename /mnt/a/empty100 /mnt/a/dir100/empty100 -E EXDEV
 ./run --open-file /mnt/a/dir100/empty100 -r -d -E ENOENT
 ./run --open-file /mnt/a/empty100 -r -d
***
*** ./run --ov --ts=0 rename-mass
***
TEST rename-mass.py:15: Mass rename sequential files into each other's vacated name slots
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
TEST rename-mass.py:26: Unlink mass renamed files
 ./run --unlink /mnt/a/foo103
 ./run --unlink /mnt/a/foo104
 ./run --unlink /mnt/a/foo105
 ./run --unlink /mnt/a/foo106
***
*** ./run --ov --ts=1 rename-mass
***
TEST rename-mass.py:15: Mass rename sequential files into each other's vacated name slots
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
TEST rename-mass.py:26: Unlink mass renamed files
 ./run --unlink /mnt/a/foo103
 ./run --unlink /mnt/a/foo104
 ./run --unlink /mnt/a/foo105
 ./run --unlink /mnt/a/foo106
***
*** ./run --ov --ts=0 rename-mass-2
***
TEST rename-mass-2.py:14: Mass rename fooN_0->fooN_1->...->fooN_M
 ./run --rename /mnt/a/foo100 /mnt/a/foo100_0
 ./run --rename /mnt/a/foo101 /mnt/a/foo101_0
 ./run --rename /mnt/a/foo102 /mnt/a/foo102_0
 ./run --rename /mnt/a/foo103 /mnt/a/foo103_0
 ./run --rename /mnt/a/foo103_0 /mnt/a/foo103_1
 ./run --rename /mnt/a/foo102_0 /mnt/a/foo102_1
 ./run --rename /mnt/a/foo101_0 /mnt/a/foo101_1
 ./run --rename /mnt/a/foo100_0 /mnt/a/foo100_1
 ./run --rename /mnt/a/foo103_1 /mnt/a/foo103_2
 ./run --rename /mnt/a/foo102_1 /mnt/a/foo102_2
 ./run --rename /mnt/a/foo101_1 /mnt/a/foo101_2
 ./run --rename /mnt/a/foo100_1 /mnt/a/foo100_2
 ./run --rename /mnt/a/foo103_2 /mnt/a/foo103_3
 ./run --rename /mnt/a/foo102_2 /mnt/a/foo102_3
 ./run --rename /mnt/a/foo101_2 /mnt/a/foo101_3
 ./run --rename /mnt/a/foo100_2 /mnt/a/foo100_3
TEST rename-mass-2.py:30: Unlink mass renamed files
 ./run --unlink /mnt/a/foo100_3
 ./run --unlink /mnt/a/foo101_3
 ./run --unlink /mnt/a/foo102_3
 ./run --unlink /mnt/a/foo103_3
***
*** ./run --ov --ts=1 rename-mass-2
***
TEST rename-mass-2.py:14: Mass rename fooN_0->fooN_1->...->fooN_M
 ./run --rename /mnt/a/foo100 /mnt/a/foo100_0
 ./run --rename /mnt/a/foo101 /mnt/a/foo101_0
 ./run --rename /mnt/a/foo102 /mnt/a/foo102_0
 ./run --rename /mnt/a/foo103 /mnt/a/foo103_0
 ./run --rename /mnt/a/foo103_0 /mnt/a/foo103_1
 ./run --rename /mnt/a/foo102_0 /mnt/a/foo102_1
 ./run --rename /mnt/a/foo101_0 /mnt/a/foo101_1
 ./run --rename /mnt/a/foo100_0 /mnt/a/foo100_1
 ./run --rename /mnt/a/foo103_1 /mnt/a/foo103_2
 ./run --rename /mnt/a/foo102_1 /mnt/a/foo102_2
 ./run --rename /mnt/a/foo101_1 /mnt/a/foo101_2
 ./run --rename /mnt/a/foo100_1 /mnt/a/foo100_2
 ./run --rename /mnt/a/foo103_2 /mnt/a/foo103_3
 ./run --rename /mnt/a/foo102_2 /mnt/a/foo102_3
 ./run --rename /mnt/a/foo101_2 /mnt/a/foo101_3
 ./run --rename /mnt/a/foo100_2 /mnt/a/foo100_3
TEST rename-mass-2.py:30: Unlink mass renamed files
 ./run --unlink /mnt/a/foo100_3
 ./run --unlink /mnt/a/foo101_3
 ./run --unlink /mnt/a/foo102_3
 ./run --unlink /mnt/a/foo103_3
***
*** ./run --ov --ts=0 rename-mass-3
***
TEST rename-mass-3.py:16: Mass rename sequential files circularly
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
TEST rename-mass-3.py:29: Unlink mass renamed files
 ./run --unlink /mnt/a/foo100
 ./run --unlink /mnt/a/foo101
 ./run --unlink /mnt/a/foo102
 ./run --unlink /mnt/a/foo103 -E ENOENT
 ./run --unlink /mnt/a/foo104
 ./run --unlink /mnt/a/foo105
 ./run --unlink /mnt/a/foo106
***
*** ./run --ov --ts=1 rename-mass-3
***
TEST rename-mass-3.py:16: Mass rename sequential files circularly
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
 ./run --rename /mnt/a/foo102 /mnt/a/foo103
 ./run --rename /mnt/a/foo101 /mnt/a/foo102
 ./run --rename /mnt/a/foo100 /mnt/a/foo101
 ./run --rename /mnt/a/foo106 /mnt/a/foo100
 ./run --rename /mnt/a/foo105 /mnt/a/foo106
 ./run --rename /mnt/a/foo104 /mnt/a/foo105
 ./run --rename /mnt/a/foo103 /mnt/a/foo104
TEST rename-mass-3.py:29: Unlink mass renamed files
 ./run --unlink /mnt/a/foo100
 ./run --unlink /mnt/a/foo101
 ./run --unlink /mnt/a/foo102
 ./run --unlink /mnt/a/foo103 -E ENOENT
 ./run --unlink /mnt/a/foo104
 ./run --unlink /mnt/a/foo105
 ./run --unlink /mnt/a/foo106
***
*** ./run --ov --ts=0 rename-mass-4
***
TEST rename-mass-4.py:16: Mass rename new sequential files circularly
 ./run --open-file /mnt/a/no_foo100 -w -c -W abcd0
 ./run --open-file /mnt/a/no_foo101 -w -c -W abcd1
 ./run --open-file /mnt/a/no_foo102 -w -c -W abcd2
 ./run --open-file /mnt/a/no_foo103 -w -c -W abcd3
 ./run --open-file /mnt/a/no_foo104 -w -c -W abcd4
 ./run --open-file /mnt/a/no_foo105 -w -c -W abcd5
 ./run --open-file /mnt/a/no_foo106 -w -c -W abcd6
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
TEST rename-mass-4.py:33: Unlink mass renamed files
 ./run --unlink /mnt/a/no_foo100
 ./run --unlink /mnt/a/no_foo101
 ./run --unlink /mnt/a/no_foo102
 ./run --unlink /mnt/a/no_foo103 -E ENOENT
 ./run --unlink /mnt/a/no_foo104
 ./run --unlink /mnt/a/no_foo105
 ./run --unlink /mnt/a/no_foo106
***
*** ./run --ov --ts=1 rename-mass-4
***
TEST rename-mass-4.py:16: Mass rename new sequential files circularly
 ./run --open-file /mnt/a/no_foo100 -w -c -W abcd0
 ./run --open-file /mnt/a/no_foo101 -w -c -W abcd1
 ./run --open-file /mnt/a/no_foo102 -w -c -W abcd2
 ./run --open-file /mnt/a/no_foo103 -w -c -W abcd3
 ./run --open-file /mnt/a/no_foo104 -w -c -W abcd4
 ./run --open-file /mnt/a/no_foo105 -w -c -W abcd5
 ./run --open-file /mnt/a/no_foo106 -w -c -W abcd6
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
TEST rename-mass-4.py:33: Unlink mass renamed files
 ./run --unlink /mnt/a/no_foo100
 ./run --unlink /mnt/a/no_foo101
 ./run --unlink /mnt/a/no_foo102
 ./run --unlink /mnt/a/no_foo103 -E ENOENT
 ./run --unlink /mnt/a/no_foo104
 ./run --unlink /mnt/a/no_foo105
 ./run --unlink /mnt/a/no_foo106
***
*** ./run --ov --ts=0 rename-mass-5
***
TEST rename-mass-5.py:16: Mass rename hardlinked sequential files circularly
 ./run --link /mnt/a/foo100 /mnt/a/no_foo100
 ./run --link /mnt/a/foo101 /mnt/a/no_foo101
 ./run --link /mnt/a/foo102 /mnt/a/no_foo102
 ./run --link /mnt/a/foo103 /mnt/a/no_foo103
 ./run --link /mnt/a/foo104 /mnt/a/no_foo104
 ./run --link /mnt/a/foo105 /mnt/a/no_foo105
 ./run --link /mnt/a/foo106 /mnt/a/no_foo106
 ./run --link /mnt/a/foo107 /mnt/a/no_foo107
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
TEST rename-mass-5.py:43: Unlink mass renamed files
 ./run --unlink /mnt/a/no_foo100
 ./run --unlink /mnt/a/no_foo101
 ./run --unlink /mnt/a/no_foo102
 ./run --unlink /mnt/a/no_foo103 -E ENOENT
 ./run --unlink /mnt/a/no_foo104
 ./run --unlink /mnt/a/no_foo105
 ./run --unlink /mnt/a/no_foo106
 ./run --unlink /mnt/a/no_foo107
 ./run --unlink /mnt/a/foo100
 ./run --unlink /mnt/a/foo101
 ./run --unlink /mnt/a/foo102 -E ENOENT
 ./run --unlink /mnt/a/foo103
 ./run --unlink /mnt/a/foo104
 ./run --unlink /mnt/a/foo105
 ./run --unlink /mnt/a/foo106
 ./run --unlink /mnt/a/foo107
***
*** ./run --ov --ts=1 rename-mass-5
***
TEST rename-mass-5.py:16: Mass rename hardlinked sequential files circularly
 ./run --link /mnt/a/foo100 /mnt/a/no_foo100
 ./run --link /mnt/a/foo101 /mnt/a/no_foo101
 ./run --link /mnt/a/foo102 /mnt/a/no_foo102
 ./run --link /mnt/a/foo103 /mnt/a/no_foo103
 ./run --link /mnt/a/foo104 /mnt/a/no_foo104
 ./run --link /mnt/a/foo105 /mnt/a/no_foo105
 ./run --link /mnt/a/foo106 /mnt/a/no_foo106
 ./run --link /mnt/a/foo107 /mnt/a/no_foo107
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/no_foo102 /mnt/a/no_foo103
 ./run --rename /mnt/a/no_foo101 /mnt/a/no_foo102
 ./run --rename /mnt/a/no_foo100 /mnt/a/no_foo101
 ./run --rename /mnt/a/no_foo106 /mnt/a/no_foo100
 ./run --rename /mnt/a/no_foo105 /mnt/a/no_foo106
 ./run --rename /mnt/a/no_foo104 /mnt/a/no_foo105
 ./run --rename /mnt/a/no_foo103 /mnt/a/no_foo104
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
 ./run --rename /mnt/a/foo103 /mnt/a/foo102
 ./run --rename /mnt/a/foo104 /mnt/a/foo103
 ./run --rename /mnt/a/foo105 /mnt/a/foo104
 ./run --rename /mnt/a/foo106 /mnt/a/foo105
 ./run --rename /mnt/a/foo100 /mnt/a/foo106
 ./run --rename /mnt/a/foo101 /mnt/a/foo100
 ./run --rename /mnt/a/foo102 /mnt/a/foo101
TEST rename-mass-5.py:43: Unlink mass renamed files
 ./run --unlink /mnt/a/no_foo100
 ./run --unlink /mnt/a/no_foo101
 ./run --unlink /mnt/a/no_foo102
 ./run --unlink /mnt/a/no_foo103 -E ENOENT
 ./run --unlink /mnt/a/no_foo104
 ./run --unlink /mnt/a/no_foo105
 ./run --unlink /mnt/a/no_foo106
 ./run --unlink /mnt/a/no_foo107
 ./run --unlink /mnt/a/foo100
 ./run --unlink /mnt/a/foo101
 ./run --unlink /mnt/a/foo102 -E ENOENT
 ./run --unlink /mnt/a/foo103
 ./run --unlink /mnt/a/foo104
 ./run --unlink /mnt/a/foo105
 ./run --unlink /mnt/a/foo106
 ./run --unlink /mnt/a/foo107
***
*** ./run --ov --ts=0 rename-mass-dir
***
TEST rename-mass-dir.py:16: Mass rename new sequential dirs circularly
 ./run --mkdir /mnt/a/no_dir100 0755
 ./run --mkdir /mnt/a/no_dir101 0755
 ./run --mkdir /mnt/a/no_dir102 0755
 ./run --mkdir /mnt/a/no_dir103 0755
 ./run --mkdir /mnt/a/no_dir104 0755
 ./run --mkdir /mnt/a/no_dir105 0755
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
TEST rename-mass-dir.py:33: Unlink mass renamed dirs
 ./run --rmdir /mnt/a/no_dir100
 ./run --rmdir /mnt/a/no_dir101
 ./run --rmdir /mnt/a/no_dir102
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
 ./run --rmdir /mnt/a/no_dir104
 ./run --rmdir /mnt/a/no_dir105
 ./run --rmdir /mnt/a/no_dir106
TEST rename-mass-dir.py:46: Mass rename new populated sequential dirs circularly
 ./run --mkdir /mnt/a/no_dir100 0755
 ./run --open-file /mnt/a/no_dir100/a -w -c -W abcd0
 ./run --mkdir /mnt/a/no_dir101 0755
 ./run --open-file /mnt/a/no_dir101/a -w -c -W abcd1
 ./run --mkdir /mnt/a/no_dir102 0755
 ./run --open-file /mnt/a/no_dir102/a -w -c -W abcd2
 ./run --mkdir /mnt/a/no_dir103 0755
 ./run --open-file /mnt/a/no_dir103/a -w -c -W abcd3
 ./run --mkdir /mnt/a/no_dir104 0755
 ./run --open-file /mnt/a/no_dir104/a -w -c -W abcd4
 ./run --mkdir /mnt/a/no_dir105 0755
 ./run --open-file /mnt/a/no_dir105/a -w -c -W abcd5
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
TEST rename-mass-dir.py:64: Check files in renamed dirs
 ./run --open-file /mnt/a/no_dir100/a -r -R abcd2
 ./run --open-file /mnt/a/no_dir101/a -r -R abcd3
 ./run --open-file /mnt/a/no_dir102/a -r -R abcd4
 ./run --open-file /mnt/a/no_dir104/a -r -R abcd5
 ./run --open-file /mnt/a/no_dir105/a -r -R abcd0
 ./run --open-file /mnt/a/no_dir106/a -r -R abcd1
TEST rename-mass-dir.py:87: Unlink mass renamed dirs
 ./run --unlink /mnt/a/no_dir100/a
 ./run --rmdir /mnt/a/no_dir100
 ./run --unlink /mnt/a/no_dir101/a
 ./run --rmdir /mnt/a/no_dir101
 ./run --unlink /mnt/a/no_dir102/a
 ./run --rmdir /mnt/a/no_dir102
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
 ./run --unlink /mnt/a/no_dir104/a
 ./run --rmdir /mnt/a/no_dir104
 ./run --unlink /mnt/a/no_dir105/a
 ./run --rmdir /mnt/a/no_dir105
 ./run --unlink /mnt/a/no_dir106/a
 ./run --rmdir /mnt/a/no_dir106
***
*** ./run --ov --ts=1 rename-mass-dir
***
TEST rename-mass-dir.py:16: Mass rename new sequential dirs circularly
 ./run --mkdir /mnt/a/no_dir100 0755
 ./run --mkdir /mnt/a/no_dir101 0755
 ./run --mkdir /mnt/a/no_dir102 0755
 ./run --mkdir /mnt/a/no_dir103 0755
 ./run --mkdir /mnt/a/no_dir104 0755
 ./run --mkdir /mnt/a/no_dir105 0755
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
TEST rename-mass-dir.py:33: Unlink mass renamed dirs
 ./run --rmdir /mnt/a/no_dir100
 ./run --rmdir /mnt/a/no_dir101
 ./run --rmdir /mnt/a/no_dir102
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
 ./run --rmdir /mnt/a/no_dir104
 ./run --rmdir /mnt/a/no_dir105
 ./run --rmdir /mnt/a/no_dir106
TEST rename-mass-dir.py:46: Mass rename new populated sequential dirs circularly
 ./run --mkdir /mnt/a/no_dir100 0755
 ./run --open-file /mnt/a/no_dir100/a -w -c -W abcd0
 ./run --mkdir /mnt/a/no_dir101 0755
 ./run --open-file /mnt/a/no_dir101/a -w -c -W abcd1
 ./run --mkdir /mnt/a/no_dir102 0755
 ./run --open-file /mnt/a/no_dir102/a -w -c -W abcd2
 ./run --mkdir /mnt/a/no_dir103 0755
 ./run --open-file /mnt/a/no_dir103/a -w -c -W abcd3
 ./run --mkdir /mnt/a/no_dir104 0755
 ./run --open-file /mnt/a/no_dir104/a -w -c -W abcd4
 ./run --mkdir /mnt/a/no_dir105 0755
 ./run --open-file /mnt/a/no_dir105/a -w -c -W abcd5
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
 ./run --rename /mnt/a/no_dir102 /mnt/a/no_dir103
 ./run --rename /mnt/a/no_dir101 /mnt/a/no_dir102
 ./run --rename /mnt/a/no_dir100 /mnt/a/no_dir101
 ./run --rename /mnt/a/no_dir106 /mnt/a/no_dir100
 ./run --rename /mnt/a/no_dir105 /mnt/a/no_dir106
 ./run --rename /mnt/a/no_dir104 /mnt/a/no_dir105
 ./run --rename /mnt/a/no_dir103 /mnt/a/no_dir104
TEST rename-mass-dir.py:64: Check files in renamed dirs
 ./run --open-file /mnt/a/no_dir100/a -r -R abcd2
 ./run --open-file /mnt/a/no_dir101/a -r -R abcd3
 ./run --open-file /mnt/a/no_dir102/a -r -R abcd4
 ./run --open-file /mnt/a/no_dir104/a -r -R abcd5
 ./run --open-file /mnt/a/no_dir105/a -r -R abcd0
 ./run --open-file /mnt/a/no_dir106/a -r -R abcd1
TEST rename-mass-dir.py:87: Unlink mass renamed dirs
 ./run --unlink /mnt/a/no_dir100/a
 ./run --rmdir /mnt/a/no_dir100
 ./run --unlink /mnt/a/no_dir101/a
 ./run --rmdir /mnt/a/no_dir101
 ./run --unlink /mnt/a/no_dir102/a
 ./run --rmdir /mnt/a/no_dir102
 ./run --rmdir /mnt/a/no_dir103 -E ENOENT
 ./run --unlink /mnt/a/no_dir104/a
 ./run --rmdir /mnt/a/no_dir104
 ./run --unlink /mnt/a/no_dir105/a
 ./run --rmdir /mnt/a/no_dir105
 ./run --unlink /mnt/a/no_dir106/a
 ./run --rmdir /mnt/a/no_dir106
***
*** ./run --ov --ts=0 rename-mass-sym
***
TEST rename-mass-sym.py:16: Mass rename sequential symlinks circularly
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
TEST rename-mass-sym.py:29: Check renamed symlink contents
 ./run --readlink /mnt/a/direct_sym100 -R ../a/foo102
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym101 -R ../a/foo103
 ./run --open-file /mnt/a/direct_sym101 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym102 -R ../a/foo104
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym104 -R ../a/foo105
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym105 -R ../a/foo100
 ./run --open-file /mnt/a/direct_sym105 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym106 -R ../a/foo101
 ./run --open-file /mnt/a/direct_sym106 -r -R :xxx:yyy:zzz
TEST rename-mass-sym.py:66: Mass rename sequential dir symlinks circularly
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
TEST rename-mass-sym.py:79: Check renamed symlink contents
 ./run --readlink /mnt/a/direct_dir_sym100 -R ../a/dir102
 ./run --open-file /mnt/a/direct_dir_sym100 -r -d
 ./run --readlink /mnt/a/direct_dir_sym101 -R ../a/dir103
 ./run --open-file /mnt/a/direct_dir_sym101 -r -d
 ./run --readlink /mnt/a/direct_dir_sym102 -R ../a/dir104
 ./run --open-file /mnt/a/direct_dir_sym102 -r -d
 ./run --readlink /mnt/a/direct_dir_sym104 -R ../a/dir105
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d
 ./run --readlink /mnt/a/direct_dir_sym105 -R ../a/dir100
 ./run --open-file /mnt/a/direct_dir_sym105 -r -d
 ./run --readlink /mnt/a/direct_dir_sym106 -R ../a/dir101
 ./run --open-file /mnt/a/direct_dir_sym106 -r -d
TEST rename-mass-sym.py:103: Unlink mass renamed symlinks
 ./run --rmdir /mnt/a/direct_dir_sym100 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym100
 ./run --rmdir /mnt/a/direct_dir_sym101 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym101
 ./run --rmdir /mnt/a/direct_dir_sym102 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym102
 ./run --unlink /mnt/a/direct_dir_sym103 -E ENOENT
 ./run --rmdir /mnt/a/direct_dir_sym104 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym104
 ./run --rmdir /mnt/a/direct_dir_sym105 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym105
 ./run --rmdir /mnt/a/direct_dir_sym106 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym106
 ./run --rmdir /mnt/a/direct_dir_sym107 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym107
***
*** ./run --ov --ts=1 rename-mass-sym
***
TEST rename-mass-sym.py:16: Mass rename sequential symlinks circularly
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
 ./run --rename /mnt/a/direct_sym102 /mnt/a/direct_sym103
 ./run --rename /mnt/a/direct_sym101 /mnt/a/direct_sym102
 ./run --rename /mnt/a/direct_sym100 /mnt/a/direct_sym101
 ./run --rename /mnt/a/direct_sym106 /mnt/a/direct_sym100
 ./run --rename /mnt/a/direct_sym105 /mnt/a/direct_sym106
 ./run --rename /mnt/a/direct_sym104 /mnt/a/direct_sym105
 ./run --rename /mnt/a/direct_sym103 /mnt/a/direct_sym104
TEST rename-mass-sym.py:29: Check renamed symlink contents
 ./run --readlink /mnt/a/direct_sym100 -R ../a/foo102
 ./run --open-file /mnt/a/direct_sym100 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym101 -R ../a/foo103
 ./run --open-file /mnt/a/direct_sym101 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym102 -R ../a/foo104
 ./run --open-file /mnt/a/direct_sym102 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym104 -R ../a/foo105
 ./run --open-file /mnt/a/direct_sym104 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym105 -R ../a/foo100
 ./run --open-file /mnt/a/direct_sym105 -r -R :xxx:yyy:zzz
 ./run --readlink /mnt/a/direct_sym106 -R ../a/foo101
 ./run --open-file /mnt/a/direct_sym106 -r -R :xxx:yyy:zzz
TEST rename-mass-sym.py:66: Mass rename sequential dir symlinks circularly
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
 ./run --rename /mnt/a/direct_dir_sym102 /mnt/a/direct_dir_sym103
 ./run --rename /mnt/a/direct_dir_sym101 /mnt/a/direct_dir_sym102
 ./run --rename /mnt/a/direct_dir_sym100 /mnt/a/direct_dir_sym101
 ./run --rename /mnt/a/direct_dir_sym106 /mnt/a/direct_dir_sym100
 ./run --rename /mnt/a/direct_dir_sym105 /mnt/a/direct_dir_sym106
 ./run --rename /mnt/a/direct_dir_sym104 /mnt/a/direct_dir_sym105
 ./run --rename /mnt/a/direct_dir_sym103 /mnt/a/direct_dir_sym104
TEST rename-mass-sym.py:79: Check renamed symlink contents
 ./run --readlink /mnt/a/direct_dir_sym100 -R ../a/dir102
 ./run --open-file /mnt/a/direct_dir_sym100 -r -d
 ./run --readlink /mnt/a/direct_dir_sym101 -R ../a/dir103
 ./run --open-file /mnt/a/direct_dir_sym101 -r -d
 ./run --readlink /mnt/a/direct_dir_sym102 -R ../a/dir104
 ./run --open-file /mnt/a/direct_dir_sym102 -r -d
 ./run --readlink /mnt/a/direct_dir_sym104 -R ../a/dir105
 ./run --open-file /mnt/a/direct_dir_sym104 -r -d
 ./run --readlink /mnt/a/direct_dir_sym105 -R ../a/dir100
 ./run --open-file /mnt/a/direct_dir_sym105 -r -d
 ./run --readlink /mnt/a/direct_dir_sym106 -R ../a/dir101
 ./run --open-file /mnt/a/direct_dir_sym106 -r -d
TEST rename-mass-sym.py:103: Unlink mass renamed symlinks
 ./run --rmdir /mnt/a/direct_dir_sym100 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym100
 ./run --rmdir /mnt/a/direct_dir_sym101 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym101
 ./run --rmdir /mnt/a/direct_dir_sym102 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym102
 ./run --unlink /mnt/a/direct_dir_sym103 -E ENOENT
 ./run --rmdir /mnt/a/direct_dir_sym104 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym104
 ./run --rmdir /mnt/a/direct_dir_sym105 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym105
 ./run --rmdir /mnt/a/direct_dir_sym106 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym106
 ./run --rmdir /mnt/a/direct_dir_sym107 -E ENOTDIR
 ./run --unlink /mnt/a/direct_dir_sym107
***
*** ./run --ov --ts=0 impermissible
***
TEST impermissible.py:9: Impermissible open O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/rootfile100 -w -t -B -E EACCES
 ./run --open-file /mnt/a/rootfile100 -w -B -E EACCES
 ./run --open-file /mnt/a/rootfile100 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/rootfile100 -w -W shark
 ./run --open-file /mnt/a/rootfile100 -r -R sharkyyy:zzz
 ./run --open-file /mnt/a/rootfile100 -r -R sharkyyy:zzz -B
TEST impermissible.py:21: Impermissible open O_WRONLY
 ./run --open-file /mnt/a/rootfile101 -w -B -E EACCES
 ./run --open-file /mnt/a/rootfile101 -w -B -E EACCES
 ./run --open-file /mnt/a/rootfile101 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile101 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/rootfile101 -w -W shark
 ./run --open-file /mnt/a/rootfile101 -r -R sharkyyy:zzz
 ./run --open-file /mnt/a/rootfile101 -r -R sharkyyy:zzz -B
TEST impermissible.py:33: Impermissible open O_APPEND
 ./run --open-file /mnt/a/rootfile102 -a -B -E EACCES
 ./run --open-file /mnt/a/rootfile102 -a -B -E EACCES
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/rootfile102 -a -W shark
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzzshark
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzzshark -B
TEST impermissible.py:48: Impermissible truncate
 ./run --truncate /mnt/a/rootfile103 4 -B -E EACCES
 ./run --truncate /mnt/a/rootfile103 4 -B -E EACCES
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx:yyy:zzz
 ./run --truncate /mnt/a/rootfile103 4
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx -B
TEST impermissible.py:75: Impermissible utimes
 ./run --utimes /mnt/a/rootfile104 -B -E EACCES
 ./run --utimes /mnt/a/rootfile104 -B -E EACCES
 ./run --utimes /mnt/a/rootfile104
 ./run --open-file /mnt/a/rootfile104 -r -R :xxx:yyy:zzz
***
*** ./run --ov --ts=1 impermissible
***
TEST impermissible.py:9: Impermissible open O_TRUNC|O_WRONLY
 ./run --open-file /mnt/a/rootfile100 -w -t -B -E EACCES
 ./run --open-file /mnt/a/rootfile100 -w -B -E EACCES
 ./run --open-file /mnt/a/rootfile100 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile100 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/rootfile100 -w -W shark
 ./run --open-file /mnt/a/rootfile100 -r -R sharkyyy:zzz
 ./run --open-file /mnt/a/rootfile100 -r -R sharkyyy:zzz -B
TEST impermissible.py:21: Impermissible open O_WRONLY
 ./run --open-file /mnt/a/rootfile101 -w -B -E EACCES
 ./run --open-file /mnt/a/rootfile101 -w -B -E EACCES
 ./run --open-file /mnt/a/rootfile101 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile101 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/rootfile101 -w -W shark
 ./run --open-file /mnt/a/rootfile101 -r -R sharkyyy:zzz
 ./run --open-file /mnt/a/rootfile101 -r -R sharkyyy:zzz -B
TEST impermissible.py:33: Impermissible open O_APPEND
 ./run --open-file /mnt/a/rootfile102 -a -B -E EACCES
 ./run --open-file /mnt/a/rootfile102 -a -B -E EACCES
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzz
 ./run --open-file /mnt/a/rootfile102 -a -W shark
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzzshark
 ./run --open-file /mnt/a/rootfile102 -r -R :xxx:yyy:zzzshark -B
TEST impermissible.py:48: Impermissible truncate
 ./run --truncate /mnt/a/rootfile103 4 -B -E EACCES
 ./run --truncate /mnt/a/rootfile103 4 -B -E EACCES
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx:yyy:zzz -B
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx:yyy:zzz
 ./run --truncate /mnt/a/rootfile103 4
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx
 ./run --open-file /mnt/a/rootfile103 -r -R :xxx -B
TEST impermissible.py:75: Impermissible utimes
 ./run --utimes /mnt/a/rootfile104 -B -E EACCES
 ./run --utimes /mnt/a/rootfile104 -B -E EACCES
 ./run --utimes /mnt/a/rootfile104
 ./run --open-file /mnt/a/rootfile104 -r -R :xxx:yyy:zzz

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [git pull] more vfs bits, updated
  2015-02-22 12:54               ` David Howells
@ 2015-02-22 16:46                 ` Al Viro
  2015-02-22 20:10                   ` Sedat Dilek
  0 siblings, 1 reply; 30+ messages in thread
From: Al Viro @ 2015-02-22 16:46 UTC (permalink / raw)
  To: David Howells; +Cc: Linus Torvalds, Linux Kernel Mailing List, linux-fsdevel

On Sun, Feb 22, 2015 at 12:54:57PM +0000, David Howells wrote:
> You might want to remove dentry_inode_once().  I can still see it in your
> vfs/for-linus branch.
> 
> It might also be worth renaming d_dentry() to d_backing_dentry() to match
> d_backing_inode().

Done and re-pushed; neither sucker was ever called, so I'll skip the testing -
it's the same kernel binary.   I've pushed that to

git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git for-linus-2

Shortlog:
Al Viro (10):
      switch ll_lookup_finish_locks() and ll_revalidate_it_finish() to inode
      configfs: configfs_create() init callback is never NULL and it never fails
      configfs: fold create_dir() into its only caller
      configfs_add_file: fold into its sole caller
      don't bother with most of the bad_file_ops methods
      hypfs: switch to read_iter/write_iter
      Documentation/filesystems/Locking: ->get_sb() is long gone
      debugfs: leave freeing a symlink body until inode eviction
      procfs: fix race between symlink removals and traversals
      autofs4 copy_dev_ioctl(): keep the value of ->size we'd used for allocation

Bastien Nocera (1):
      coredump: Fix typo in comment

David Howells (14):
      configfs: Fix potential NULL d_inode dereference
      Infiniband: Fix potential NULL d_inode dereference
      VFS: Introduce inode-getting helpers for layered/unioned fs environments
      VFS: Add a whiteout dentry type
      VFS: Add a fallthrough flag for marking virtual dentries
      VFS: Split DCACHE_FILE_TYPE into regular and special types
      Apparmor: mediated_filesystem() should use dentry->d_sb not inode->i_sb
      Apparmor: Use d_is_positive/negative() rather than testing dentry->d_inode
      TOMOYO: Use d_is_dir() rather than d_inode and S_ISDIR()
      Smack: Use d_is_positive() rather than testing dentry->d_inode
      SELinux: Use d_is_positive() rather than testing dentry->d_inode
      VFS: (Scripted) Convert S_ISLNK/DIR/REG(dentry->d_inode) to d_is_*(dentry)
      Cachefiles: Fix up scripted S_ISDIR/S_ISREG/S_ISLNK conversions
      fanotify: Fix up scripted S_ISDIR/S_ISREG/S_ISLNK conversions

Kinglong Mee (1):
      fs/aio.c: Remove duplicate function name in pr_debug messages

Konstantin Khlebnikov (1):
      trylock_super(): replacement for grab_super_passive()

Miklos Szeredi (16):
      ovl: check whiteout while reading directory
      ovl: make path-type a bitmap
      ovl: dont replace opaque dir
      ovl: add mutli-layer infrastructure
      ovl: helper to iterate layers
      ovl: multi-layer readdir
      ovl: multi-layer lookup
      ovl: check whiteout on lowest layer as well
      ovl: lookup ENAMETOOLONG on lower means ENOENT
      ovl: allow statfs if no upper layer
      ovl: mount: change order of initialization
      ovl: improve mount helpers
      ovl: make upperdir optional
      ovl: support multiple lower layers
      ovl: add testsuite to docs
      ovl: document lower layer ordering

Omar Sandoval (1):
      posix_acl: fix reference leaks in posix_acl_create

Rasmus Villemoes (1):
      autofs4: Wrong format for printing dentry

Seunghun Lee (1):
      ovl: Prevent rw remount when it should be ro mount

hujianyang (5):
      ovl: Cleanup redundant blank lines
      ovl: Use macros to present ovl_xattr
      ovl: Fix kernel panic while mounting overlayfs
      ovl: Fix opaque regression in ovl_lookup
      ovl: discard independent cursor in readdir()

Diffstat:
 Documentation/filesystems/Locking                  |   2 -
 Documentation/filesystems/overlayfs.txt            |  28 +
 arch/s390/hypfs/inode.c                            |  53 +-
 drivers/infiniband/hw/ipath/ipath_fs.c             |   2 +-
 drivers/infiniband/hw/qib/qib_fs.c                 |   2 +-
 drivers/staging/lustre/lustre/llite/dcache.c       |  12 +-
 drivers/staging/lustre/lustre/llite/file.c         |   8 +-
 .../staging/lustre/lustre/llite/llite_internal.h   |   4 +-
 drivers/staging/lustre/lustre/llite/namei.c        |  12 +-
 fs/9p/vfs_inode.c                                  |   2 +-
 fs/aio.c                                           |   6 +-
 fs/autofs4/dev-ioctl.c                             |   8 +-
 fs/autofs4/expire.c                                |   2 +-
 fs/autofs4/root.c                                  |   6 +-
 fs/bad_inode.c                                     | 147 ------
 fs/btrfs/ioctl.c                                   |   4 +-
 fs/cachefiles/daemon.c                             |   4 +-
 fs/cachefiles/interface.c                          |   4 +-
 fs/cachefiles/namei.c                              |  16 +-
 fs/cachefiles/rdwr.c                               |   2 +-
 fs/ceph/dir.c                                      |   2 +-
 fs/ceph/file.c                                     |   2 +-
 fs/coda/dir.c                                      |   2 +-
 fs/configfs/configfs_internal.h                    |   3 +-
 fs/configfs/dir.c                                  |  72 ++-
 fs/configfs/file.c                                 |  28 +-
 fs/configfs/inode.c                                |  12 +-
 fs/coredump.c                                      |   2 +-
 fs/dcache.c                                        |  37 +-
 fs/debugfs/inode.c                                 |  36 +-
 fs/ecryptfs/file.c                                 |   2 +-
 fs/ecryptfs/inode.c                                |   4 +-
 fs/exportfs/expfs.c                                |   2 +-
 fs/fs-writeback.c                                  |   6 +-
 fs/fuse/dir.c                                      |   2 +-
 fs/gfs2/dir.c                                      |   2 +-
 fs/hfsplus/dir.c                                   |   2 +-
 fs/hppfs/hppfs.c                                   |   4 +-
 fs/internal.h                                      |   2 +-
 fs/jffs2/dir.c                                     |  14 +-
 fs/jffs2/super.c                                   |   2 +-
 fs/libfs.c                                         |   2 +-
 fs/namei.c                                         |   2 +-
 fs/namespace.c                                     |  10 +-
 fs/nfsd/nfs4recover.c                              |   4 +-
 fs/nfsd/nfsfh.c                                    |   8 +-
 fs/nfsd/vfs.c                                      |   8 +-
 fs/notify/fanotify/fanotify.c                      |   6 +-
 fs/overlayfs/copy_up.c                             |   5 +-
 fs/overlayfs/dir.c                                 |  34 +-
 fs/overlayfs/inode.c                               |  12 +-
 fs/overlayfs/overlayfs.h                           |  18 +-
 fs/overlayfs/readdir.c                             | 181 +++----
 fs/overlayfs/super.c                               | 564 ++++++++++++++-------
 fs/posix_acl.c                                     |  18 +-
 fs/proc/generic.c                                  |  12 -
 fs/proc/inode.c                                    |  21 +
 fs/proc/internal.h                                 |   1 +
 fs/reiserfs/xattr.c                                |   4 +-
 fs/super.c                                         |  40 +-
 fs/xfs/xfs_ioctl.c                                 |   2 +-
 include/linux/dcache.h                             | 103 +++-
 mm/shmem.c                                         |   4 +-
 security/apparmor/include/apparmor.h               |   4 +-
 security/apparmor/lsm.c                            |  20 +-
 security/apparmor/path.c                           |   2 +-
 security/inode.c                                   |   2 +-
 security/selinux/hooks.c                           |   8 +-
 security/smack/smack_lsm.c                         |   4 +-
 security/tomoyo/file.c                             |   4 +-
 70 files changed, 907 insertions(+), 758 deletions(-)

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [git pull] more vfs bits, updated
  2015-02-22 16:46                 ` [git pull] more vfs bits, updated Al Viro
@ 2015-02-22 20:10                   ` Sedat Dilek
  0 siblings, 0 replies; 30+ messages in thread
From: Sedat Dilek @ 2015-02-22 20:10 UTC (permalink / raw)
  To: Al Viro
  Cc: David Howells, Linus Torvalds, Linux Kernel Mailing List, linux-fsdevel

[-- Attachment #1: Type: text/plain, Size: 8480 bytes --]

On Sun, Feb 22, 2015 at 5:46 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> On Sun, Feb 22, 2015 at 12:54:57PM +0000, David Howells wrote:
>> You might want to remove dentry_inode_once().  I can still see it in your
>> vfs/for-linus branch.
>>
>> It might also be worth renaming d_dentry() to d_backing_dentry() to match
>> d_backing_inode().
>
> Done and re-pushed; neither sucker was ever called, so I'll skip the testing -
> it's the same kernel binary.   I've pushed that to
>
> git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git for-linus-2
>

Re-tested with ltp-lite, fio and unionmount-testsuite (see attached tarball).

- Sedat -

> Shortlog:
> Al Viro (10):
>       switch ll_lookup_finish_locks() and ll_revalidate_it_finish() to inode
>       configfs: configfs_create() init callback is never NULL and it never fails
>       configfs: fold create_dir() into its only caller
>       configfs_add_file: fold into its sole caller
>       don't bother with most of the bad_file_ops methods
>       hypfs: switch to read_iter/write_iter
>       Documentation/filesystems/Locking: ->get_sb() is long gone
>       debugfs: leave freeing a symlink body until inode eviction
>       procfs: fix race between symlink removals and traversals
>       autofs4 copy_dev_ioctl(): keep the value of ->size we'd used for allocation
>
> Bastien Nocera (1):
>       coredump: Fix typo in comment
>
> David Howells (14):
>       configfs: Fix potential NULL d_inode dereference
>       Infiniband: Fix potential NULL d_inode dereference
>       VFS: Introduce inode-getting helpers for layered/unioned fs environments
>       VFS: Add a whiteout dentry type
>       VFS: Add a fallthrough flag for marking virtual dentries
>       VFS: Split DCACHE_FILE_TYPE into regular and special types
>       Apparmor: mediated_filesystem() should use dentry->d_sb not inode->i_sb
>       Apparmor: Use d_is_positive/negative() rather than testing dentry->d_inode
>       TOMOYO: Use d_is_dir() rather than d_inode and S_ISDIR()
>       Smack: Use d_is_positive() rather than testing dentry->d_inode
>       SELinux: Use d_is_positive() rather than testing dentry->d_inode
>       VFS: (Scripted) Convert S_ISLNK/DIR/REG(dentry->d_inode) to d_is_*(dentry)
>       Cachefiles: Fix up scripted S_ISDIR/S_ISREG/S_ISLNK conversions
>       fanotify: Fix up scripted S_ISDIR/S_ISREG/S_ISLNK conversions
>
> Kinglong Mee (1):
>       fs/aio.c: Remove duplicate function name in pr_debug messages
>
> Konstantin Khlebnikov (1):
>       trylock_super(): replacement for grab_super_passive()
>
> Miklos Szeredi (16):
>       ovl: check whiteout while reading directory
>       ovl: make path-type a bitmap
>       ovl: dont replace opaque dir
>       ovl: add mutli-layer infrastructure
>       ovl: helper to iterate layers
>       ovl: multi-layer readdir
>       ovl: multi-layer lookup
>       ovl: check whiteout on lowest layer as well
>       ovl: lookup ENAMETOOLONG on lower means ENOENT
>       ovl: allow statfs if no upper layer
>       ovl: mount: change order of initialization
>       ovl: improve mount helpers
>       ovl: make upperdir optional
>       ovl: support multiple lower layers
>       ovl: add testsuite to docs
>       ovl: document lower layer ordering
>
> Omar Sandoval (1):
>       posix_acl: fix reference leaks in posix_acl_create
>
> Rasmus Villemoes (1):
>       autofs4: Wrong format for printing dentry
>
> Seunghun Lee (1):
>       ovl: Prevent rw remount when it should be ro mount
>
> hujianyang (5):
>       ovl: Cleanup redundant blank lines
>       ovl: Use macros to present ovl_xattr
>       ovl: Fix kernel panic while mounting overlayfs
>       ovl: Fix opaque regression in ovl_lookup
>       ovl: discard independent cursor in readdir()
>
> Diffstat:
>  Documentation/filesystems/Locking                  |   2 -
>  Documentation/filesystems/overlayfs.txt            |  28 +
>  arch/s390/hypfs/inode.c                            |  53 +-
>  drivers/infiniband/hw/ipath/ipath_fs.c             |   2 +-
>  drivers/infiniband/hw/qib/qib_fs.c                 |   2 +-
>  drivers/staging/lustre/lustre/llite/dcache.c       |  12 +-
>  drivers/staging/lustre/lustre/llite/file.c         |   8 +-
>  .../staging/lustre/lustre/llite/llite_internal.h   |   4 +-
>  drivers/staging/lustre/lustre/llite/namei.c        |  12 +-
>  fs/9p/vfs_inode.c                                  |   2 +-
>  fs/aio.c                                           |   6 +-
>  fs/autofs4/dev-ioctl.c                             |   8 +-
>  fs/autofs4/expire.c                                |   2 +-
>  fs/autofs4/root.c                                  |   6 +-
>  fs/bad_inode.c                                     | 147 ------
>  fs/btrfs/ioctl.c                                   |   4 +-
>  fs/cachefiles/daemon.c                             |   4 +-
>  fs/cachefiles/interface.c                          |   4 +-
>  fs/cachefiles/namei.c                              |  16 +-
>  fs/cachefiles/rdwr.c                               |   2 +-
>  fs/ceph/dir.c                                      |   2 +-
>  fs/ceph/file.c                                     |   2 +-
>  fs/coda/dir.c                                      |   2 +-
>  fs/configfs/configfs_internal.h                    |   3 +-
>  fs/configfs/dir.c                                  |  72 ++-
>  fs/configfs/file.c                                 |  28 +-
>  fs/configfs/inode.c                                |  12 +-
>  fs/coredump.c                                      |   2 +-
>  fs/dcache.c                                        |  37 +-
>  fs/debugfs/inode.c                                 |  36 +-
>  fs/ecryptfs/file.c                                 |   2 +-
>  fs/ecryptfs/inode.c                                |   4 +-
>  fs/exportfs/expfs.c                                |   2 +-
>  fs/fs-writeback.c                                  |   6 +-
>  fs/fuse/dir.c                                      |   2 +-
>  fs/gfs2/dir.c                                      |   2 +-
>  fs/hfsplus/dir.c                                   |   2 +-
>  fs/hppfs/hppfs.c                                   |   4 +-
>  fs/internal.h                                      |   2 +-
>  fs/jffs2/dir.c                                     |  14 +-
>  fs/jffs2/super.c                                   |   2 +-
>  fs/libfs.c                                         |   2 +-
>  fs/namei.c                                         |   2 +-
>  fs/namespace.c                                     |  10 +-
>  fs/nfsd/nfs4recover.c                              |   4 +-
>  fs/nfsd/nfsfh.c                                    |   8 +-
>  fs/nfsd/vfs.c                                      |   8 +-
>  fs/notify/fanotify/fanotify.c                      |   6 +-
>  fs/overlayfs/copy_up.c                             |   5 +-
>  fs/overlayfs/dir.c                                 |  34 +-
>  fs/overlayfs/inode.c                               |  12 +-
>  fs/overlayfs/overlayfs.h                           |  18 +-
>  fs/overlayfs/readdir.c                             | 181 +++----
>  fs/overlayfs/super.c                               | 564 ++++++++++++++-------
>  fs/posix_acl.c                                     |  18 +-
>  fs/proc/generic.c                                  |  12 -
>  fs/proc/inode.c                                    |  21 +
>  fs/proc/internal.h                                 |   1 +
>  fs/reiserfs/xattr.c                                |   4 +-
>  fs/super.c                                         |  40 +-
>  fs/xfs/xfs_ioctl.c                                 |   2 +-
>  include/linux/dcache.h                             | 103 +++-
>  mm/shmem.c                                         |   4 +-
>  security/apparmor/include/apparmor.h               |   4 +-
>  security/apparmor/lsm.c                            |  20 +-
>  security/apparmor/path.c                           |   2 +-
>  security/inode.c                                   |   2 +-
>  security/selinux/hooks.c                           |   8 +-
>  security/smack/smack_lsm.c                         |   4 +-
>  security/tomoyo/file.c                             |   4 +-
>  70 files changed, 907 insertions(+), 758 deletions(-)
> --
> 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

[-- Attachment #2: for-viro-2.tar.gz --]
[-- Type: application/x-gzip, Size: 125780 bytes --]

[-- Attachment #3: for-viro-2.tar.gz.sha256sum --]
[-- Type: application/octet-stream, Size: 84 bytes --]

8feeac8371e1870a746b4e33f47264100405d1d7bc5ccb7f8de0c031c8bcbb77  for-viro-2.tar.gz

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [git pull] more vfs bits
@ 2013-03-03 16:04 Al Viro
  0 siblings, 0 replies; 30+ messages in thread
From: Al Viro @ 2013-03-03 16:04 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: linux-kernel, linux-fsdevel

	Unfortunately, it looks like xattr series will have to wait until
the next cycle ;-/  This pile contains 9p cleanups and fixes (races in
v9fs_fid_add(), etc.), fixup for nommu breakage in shmem.c, several cleanups
and a bit more file_inode() work.  Please, pull from
git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git for-linus

Shortlog:
Al Viro (13):
      selinux: opened file can't have NULL or negative ->f_path.dentry
      more file_inode() open-coded instances
      9p: don't bother with private lock in ->d_fsdata; dentry->d_lock will do just fine
      9p: turn fid->dlist into hlist
      v9fs: get rid of v9fs_dentry
      9p: v9fs_fid_add() can't fail now
      9p: double iput() in ->lookup() if d_materialise_unique() fails
      9p: untangle ->lookup() a bit
      9p: make sure ->lookup() adds fid to the right dentry
      9p: if v9fs_fid_lookup() gets to asking server, it'd better have hashed dentry
      cache the value of file_inode() in struct file
      fix nommu breakage in shmem.c
      constify path_get/path_put and fs_struct.c stuff

Diffstat:
 arch/s390/hypfs/inode.c              |    6 +--
 arch/x86/kernel/msr.c                |    9 ++---
 drivers/staging/comedi/comedi_fops.c |   14 ++++----
 drivers/tty/tty_io.c                 |   16 ++++------
 fs/9p/fid.c                          |   55 ++++++++++++++++------------------
 fs/9p/fid.h                          |   22 +-------------
 fs/9p/vfs_dentry.c                   |   17 ++--------
 fs/9p/vfs_inode.c                    |   40 ++++++++----------------
 fs/9p/vfs_inode_dotl.c               |   19 ++++-------
 fs/ext4/indirect.c                   |    2 +-
 fs/f2fs/file.c                       |    6 ++--
 fs/file_table.c                      |    2 +
 fs/fs_struct.c                       |    6 ++--
 fs/fuse/dev.c                        |    2 +-
 fs/fuse/file.c                       |   24 +++++++-------
 fs/internal.h                        |    2 +-
 fs/namei.c                           |    4 +-
 fs/open.c                            |    3 +-
 fs/seq_file.c                        |    2 +-
 include/linux/fs.h                   |    3 +-
 include/linux/fs_struct.h            |    4 +-
 include/linux/path.h                 |    4 +-
 include/net/9p/client.h              |    2 +-
 kernel/futex.c                       |    2 +-
 mm/shmem.c                           |    5 +--
 security/selinux/hooks.c             |    9 -----
 26 files changed, 109 insertions(+), 171 deletions(-)

^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2015-02-22 20:10 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-21  3:34 [git pull] more vfs bits Al Viro
2015-02-21 22:45 ` Linus Torvalds
2015-02-21 22:48   ` Linus Torvalds
2015-02-22  0:23   ` David Howells
2015-02-22  0:59     ` Al Viro
2015-02-22  0:51   ` Al Viro
2015-02-22  1:34     ` Linus Torvalds
2015-02-22  2:02       ` Al Viro
2015-02-22  2:11         ` Al Viro
2015-02-22  2:19         ` Linus Torvalds
2015-02-22  2:51           ` Al Viro
2015-02-22  3:16             ` Linus Torvalds
2015-02-22  8:51               ` Al Viro
2015-02-22  9:32                 ` Sedat Dilek
2015-02-22  9:37                   ` Al Viro
2015-02-22 10:36                     ` Sedat Dilek
2015-02-22 15:05                       ` Sedat Dilek
2015-02-22 15:12                         ` Sedat Dilek
2015-02-22 13:22                     ` Sedat Dilek
2015-02-22 13:23                       ` Sedat Dilek
2015-02-22 12:54               ` David Howells
2015-02-22 16:46                 ` [git pull] more vfs bits, updated Al Viro
2015-02-22 20:10                   ` Sedat Dilek
2015-02-22 12:44         ` [git pull] more vfs bits David Howells
2015-02-22 12:39     ` David Howells
2015-02-22 12:30   ` David Howells
2015-02-22  0:18 ` David Howells
2015-02-22  1:14   ` Linus Torvalds
2015-02-22  1:32     ` Al Viro
  -- strict thread matches above, loose matches on Subject: below --
2013-03-03 16:04 Al Viro

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).