* [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 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-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-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: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-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
* 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 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
* [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
* 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 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-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-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-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
* [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).