X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=kernel-aufs4.patch;h=0d0604488b326b240909fa949a8f08a57979468a;hb=1d092b397bb7a9cfd8ed6c529fca521532d03469;hp=7009c6af3b425630830930c82faf5f7986e35e96;hpb=2121bcd9351934ee7b11e33abb1918842cef1c11;p=packages%2Fkernel.git diff --git a/kernel-aufs4.patch b/kernel-aufs4.patch index 7009c6af..0d060448 100644 --- a/kernel-aufs4.patch +++ b/kernel-aufs4.patch @@ -2,10 +2,10 @@ SPDX-License-Identifier: GPL-2.0 aufs4.x-rcN kbuild patch diff --git a/fs/Kconfig b/fs/Kconfig -index 7aee6d6..ec92031 100644 +index bc821a8..7ae814c 100644 --- a/fs/Kconfig +++ b/fs/Kconfig -@@ -248,6 +248,7 @@ source "fs/pstore/Kconfig" +@@ -251,6 +251,7 @@ source "fs/pstore/Kconfig" source "fs/sysv/Kconfig" source "fs/ufs/Kconfig" source "fs/exofs/Kconfig" @@ -14,10 +14,10 @@ index 7aee6d6..ec92031 100644 endif # MISC_FILESYSTEMS diff --git a/fs/Makefile b/fs/Makefile -index ef772f1..51779e68c 100644 +index add789e..26100d6 100644 --- a/fs/Makefile +++ b/fs/Makefile -@@ -129,3 +129,4 @@ obj-y += exofs/ # Multiple modules +@@ -128,3 +128,4 @@ obj-y += exofs/ # Multiple modules obj-$(CONFIG_CEPH_FS) += ceph/ obj-$(CONFIG_PSTORE) += pstore/ obj-$(CONFIG_EFIVAR_FS) += efivarfs/ @@ -26,10 +26,10 @@ SPDX-License-Identifier: GPL-2.0 aufs4.x-rcN base patch diff --git a/MAINTAINERS b/MAINTAINERS -index 82ad0ea..7d8b461 100644 +index 4623caf..7617c0e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -2478,6 +2478,19 @@ F: include/linux/audit.h +@@ -2484,6 +2484,19 @@ F: include/linux/audit.h F: include/uapi/linux/audit.h F: kernel/audit* @@ -50,7 +50,7 @@ index 82ad0ea..7d8b461 100644 M: Miguel Ojeda Sandonis W: http://miguelojeda.es/auxdisplay.htm diff --git a/drivers/block/loop.c b/drivers/block/loop.c -index bc8e615..e51a59d 100644 +index 87855b5..962b2d6 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -691,6 +691,24 @@ static inline int is_loop_device(struct file *file) @@ -79,10 +79,10 @@ index bc8e615..e51a59d 100644 static ssize_t loop_attr_show(struct device *dev, char *page, diff --git a/fs/dcache.c b/fs/dcache.c -index 5c7df1d..019f14b 100644 +index 7c38f39..9ce5e26 100644 --- a/fs/dcache.c +++ b/fs/dcache.c -@@ -1197,7 +1197,7 @@ enum d_walk_ret { +@@ -1200,7 +1200,7 @@ enum d_walk_ret { * * The @enter() and @finish() callbacks are called with d_lock held. */ @@ -92,7 +92,7 @@ index 5c7df1d..019f14b 100644 void (*finish)(void *)) { diff --git a/fs/fcntl.c b/fs/fcntl.c -index 0522e28..74c255d 100644 +index 1e97f1f..8cd01f7 100644 --- a/fs/fcntl.c +++ b/fs/fcntl.c @@ -32,7 +32,7 @@ @@ -114,10 +114,10 @@ index 0522e28..74c255d 100644 return error; diff --git a/fs/inode.c b/fs/inode.c -index 03102d6..517883c 100644 +index ef36236..929a5a3 100644 --- a/fs/inode.c +++ b/fs/inode.c -@@ -1655,7 +1655,7 @@ EXPORT_SYMBOL(generic_update_time); +@@ -1659,7 +1659,7 @@ EXPORT_SYMBOL(generic_update_time); * This does the actual work of updating an inodes time or version. Must have * had called mnt_want_write() before calling this. */ @@ -127,7 +127,7 @@ index 03102d6..517883c 100644 int (*update_time)(struct inode *, struct timespec *, int); diff --git a/fs/namespace.c b/fs/namespace.c -index e158ec6..312bdbd8 100644 +index 9d1374a..26ef600 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -846,6 +846,12 @@ static inline int check_mnt(struct mount *mnt) @@ -230,10 +230,10 @@ index 279720d..76e38ea 100644 static inline void fput_light(struct file *file, int fput_needed) { diff --git a/include/linux/fs.h b/include/linux/fs.h -index 511fbaa..96e05b3 100644 +index 79c41398..383ab06 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h -@@ -1265,6 +1265,7 @@ extern void fasync_free(struct fasync_struct *); +@@ -1270,6 +1270,7 @@ extern void fasync_free(struct fasync_struct *); /* can be called from interrupts */ extern void kill_fasync(struct fasync_struct **, int, int); @@ -241,7 +241,7 @@ index 511fbaa..96e05b3 100644 extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force); extern int f_setown(struct file *filp, unsigned long arg, int force); extern void f_delown(struct file *filp); -@@ -1712,6 +1713,7 @@ struct file_operations { +@@ -1721,6 +1722,7 @@ struct file_operations { ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int); unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); int (*check_flags)(int); @@ -249,7 +249,7 @@ index 511fbaa..96e05b3 100644 int (*flock) (struct file *, int, struct file_lock *); ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int); ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int); -@@ -1782,6 +1784,12 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, +@@ -1791,6 +1793,12 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, struct iovec *fast_pointer, struct iovec **ret_pointer); @@ -262,7 +262,7 @@ index 511fbaa..96e05b3 100644 extern ssize_t __vfs_read(struct file *, char __user *, size_t, loff_t *); extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *); extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *); -@@ -2201,6 +2209,7 @@ extern int current_umask(void); +@@ -2195,6 +2203,7 @@ extern int current_umask(void); extern void ihold(struct inode * inode); extern void iput(struct inode *); extern int generic_update_time(struct inode *, struct timespec *, int); @@ -270,7 +270,7 @@ index 511fbaa..96e05b3 100644 /* /sys/fs */ extern struct kobject *fs_kobj; -@@ -2481,6 +2490,7 @@ static inline bool sb_is_blkdev_sb(struct super_block *sb) +@@ -2475,6 +2484,7 @@ static inline bool sb_is_blkdev_sb(struct super_block *sb) return false; } #endif @@ -279,10 +279,10 @@ index 511fbaa..96e05b3 100644 extern const struct file_operations def_blk_fops; extern const struct file_operations def_chr_fops; diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h -index a842551..453e941 100644 +index 6fc77d4..27e76f0 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h -@@ -406,6 +406,8 @@ static inline int lockdep_match_key(struct lockdep_map *lock, +@@ -313,6 +313,8 @@ static inline int lockdep_match_key(struct lockdep_map *lock, return lock->key == key; } @@ -291,7 +291,7 @@ index a842551..453e941 100644 /* * Acquire a lock. * -@@ -535,6 +537,7 @@ struct lockdep_map { }; +@@ -439,6 +441,7 @@ struct lockdep_map { }; #define lockdep_depth(tsk) (0) @@ -334,10 +334,10 @@ index 74b4911..19789fb 100644 + unsigned int flags); #endif diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c -index 670d8d7..2cd0282 100644 +index 89b5f83..0dca42f 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c -@@ -156,7 +156,7 @@ static struct lock_list list_entries[MAX_LOCKDEP_ENTRIES]; +@@ -140,7 +140,7 @@ static struct lock_list list_entries[MAX_LOCKDEP_ENTRIES]; unsigned long nr_lock_classes; static struct lock_class lock_classes[MAX_LOCKDEP_KEYS]; @@ -346,7 +346,7 @@ index 670d8d7..2cd0282 100644 { if (!hlock->class_idx) { /* -@@ -167,6 +167,7 @@ static inline struct lock_class *hlock_class(struct held_lock *hlock) +@@ -151,6 +151,7 @@ static inline struct lock_class *hlock_class(struct held_lock *hlock) } return lock_classes + hlock->class_idx - 1; } @@ -358,10 +358,10 @@ SPDX-License-Identifier: GPL-2.0 aufs4.x-rcN mmap patch diff --git a/fs/proc/base.c b/fs/proc/base.c -index 60316b5..ce5314e 100644 +index 9298324..da5bf4f9 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c -@@ -1987,7 +1987,7 @@ static int map_files_get_link(struct dentry *dentry, struct path *path) +@@ -2014,7 +2014,7 @@ static int map_files_get_link(struct dentry *dentry, struct path *path) down_read(&mm->mmap_sem); vma = find_exact_vma(mm, vm_start, vm_end); if (vma && vma->vm_file) { @@ -387,10 +387,10 @@ index 7563437..7c0dc0f 100644 ino = inode->i_ino; } diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c -index 339e4c1..1138098 100644 +index ec6d298..34c7193 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c -@@ -306,7 +306,10 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) +@@ -311,7 +311,10 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) const char *name = NULL; if (file) { @@ -402,7 +402,7 @@ index 339e4c1..1138098 100644 dev = inode->i_sb->s_dev; ino = inode->i_ino; pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT; -@@ -1736,7 +1739,7 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) +@@ -1741,7 +1744,7 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) struct proc_maps_private *proc_priv = &numa_priv->proc_maps; struct vm_area_struct *vma = v; struct numa_maps *md = &numa_priv->md; @@ -428,12 +428,12 @@ index 5b62f57..dfb4a3b 100644 ino = inode->i_ino; pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT; diff --git a/include/linux/mm.h b/include/linux/mm.h -index ea818ff..fbd4799 100644 +index ad06d42..75e5d37 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h -@@ -1362,6 +1362,28 @@ static inline int fixup_user_fault(struct task_struct *tsk, +@@ -1368,6 +1368,28 @@ static inline void unmap_shared_mapping_range(struct address_space *mapping, + unmap_mapping_range(mapping, holebegin, holelen, 0); } - #endif +extern void vma_do_file_update_time(struct vm_area_struct *, const char[], int); +extern struct file *vma_do_pr_or_file(struct vm_area_struct *, const char[], @@ -457,14 +457,14 @@ index ea818ff..fbd4799 100644 +#define vmr_fput(region) vmr_do_fput(region, __func__, __LINE__) +#endif /* !CONFIG_MMU */ + - extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, - unsigned int gup_flags); + extern int access_process_vm(struct task_struct *tsk, unsigned long addr, + void *buf, int len, unsigned int gup_flags); extern int access_remote_vm(struct mm_struct *mm, unsigned long addr, diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h -index cfd0ac4..135e11c 100644 +index fd1af6b..89ec438 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h -@@ -255,6 +255,7 @@ struct vm_region { +@@ -249,6 +249,7 @@ struct vm_region { unsigned long vm_top; /* region allocated to here */ unsigned long vm_pgoff; /* the offset in vm_file corresponding to vm_start */ struct file *vm_file; /* the backing file or NULL */ @@ -472,7 +472,7 @@ index cfd0ac4..135e11c 100644 int vm_usage; /* region usage count (access under nommu_region_sem) */ bool vm_icache_flushed : 1; /* true if the icache has been flushed for -@@ -329,6 +330,7 @@ struct vm_area_struct { +@@ -323,6 +324,7 @@ struct vm_area_struct { unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE units */ struct file * vm_file; /* File we map to (can be NULL). */ @@ -481,10 +481,10 @@ index cfd0ac4..135e11c 100644 atomic_long_t swap_readahead_info; diff --git a/kernel/fork.c b/kernel/fork.c -index 432eadf..8b2ba5b 100644 +index e5d9d40..f6f6fbf 100644 --- a/kernel/fork.c +++ b/kernel/fork.c -@@ -676,7 +676,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm, +@@ -474,7 +474,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm, struct inode *inode = file_inode(file); struct address_space *mapping = file->f_mapping; @@ -507,10 +507,10 @@ index e669f02..9c36567 100644 obj-y += init-mm.o diff --git a/mm/filemap.c b/mm/filemap.c -index ee83baa..7677d13 100644 +index 693f622..ea46048 100644 --- a/mm/filemap.c +++ b/mm/filemap.c -@@ -2704,7 +2704,7 @@ int filemap_page_mkwrite(struct vm_fault *vmf) +@@ -2703,7 +2703,7 @@ int filemap_page_mkwrite(struct vm_fault *vmf) int ret = VM_FAULT_LOCKED; sb_start_pagefault(inode->i_sb); @@ -520,7 +520,7 @@ index ee83baa..7677d13 100644 if (page->mapping != inode->i_mapping) { unlock_page(page); diff --git a/mm/mmap.c b/mm/mmap.c -index a4d5468..cb06cbd 100644 +index 9efdc021..d77f01f 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -171,7 +171,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma) @@ -617,7 +617,7 @@ index a4d5468..cb06cbd 100644 new_vma->vm_ops->open(new_vma); vma_link(mm, new_vma, prev, rb_link, rb_parent); diff --git a/mm/nommu.c b/mm/nommu.c -index 17c00d9..4bcdf94 100644 +index ebb6e61..8cf2428 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -641,7 +641,7 @@ static void __put_nommu_region(struct vm_region *region) @@ -756,10 +756,10 @@ SPDX-License-Identifier: GPL-2.0 aufs4.x-rcN standalone patch diff --git a/fs/dcache.c b/fs/dcache.c -index 019f14b..10c1a6d 100644 +index 9ce5e26..0f59369 100644 --- a/fs/dcache.c +++ b/fs/dcache.c -@@ -1305,6 +1305,7 @@ void d_walk(struct dentry *parent, void *data, +@@ -1308,6 +1308,7 @@ void d_walk(struct dentry *parent, void *data, seq = 1; goto again; } @@ -767,7 +767,7 @@ index 019f14b..10c1a6d 100644 struct check_mount { struct vfsmount *mnt; -@@ -2892,6 +2893,7 @@ void d_exchange(struct dentry *dentry1, struct dentry *dentry2) +@@ -2920,6 +2921,7 @@ void d_exchange(struct dentry *dentry1, struct dentry *dentry2) write_sequnlock(&rename_lock); } @@ -776,7 +776,7 @@ index 019f14b..10c1a6d 100644 /** * d_ancestor - search for an ancestor diff --git a/fs/exec.c b/fs/exec.c -index 6be2aa0..1e003f9 100644 +index 7eb8d21..56d7985 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -109,6 +109,7 @@ bool path_noexec(const struct path *path) @@ -788,7 +788,7 @@ index 6be2aa0..1e003f9 100644 #ifdef CONFIG_USELIB /* diff --git a/fs/fcntl.c b/fs/fcntl.c -index 74c255d..ec53ee1 100644 +index 8cd01f7..bdd1c6c 100644 --- a/fs/fcntl.c +++ b/fs/fcntl.c @@ -85,6 +85,7 @@ int setfl(int fd, struct file * filp, unsigned long arg) @@ -800,10 +800,10 @@ index 74c255d..ec53ee1 100644 static void f_modown(struct file *filp, struct pid *pid, enum pid_type type, int force) diff --git a/fs/file_table.c b/fs/file_table.c -index 2dc9f38..7bf57df 100644 +index 7ec0b3e..819ee07 100644 --- a/fs/file_table.c +++ b/fs/file_table.c -@@ -148,6 +148,7 @@ struct file *get_empty_filp(void) +@@ -147,6 +147,7 @@ struct file *get_empty_filp(void) } return ERR_PTR(-ENFILE); } @@ -811,7 +811,7 @@ index 2dc9f38..7bf57df 100644 /** * alloc_file - allocate and initialize a 'struct file' -@@ -258,6 +259,7 @@ void flush_delayed_fput(void) +@@ -257,6 +258,7 @@ void flush_delayed_fput(void) { delayed_fput(NULL); } @@ -819,7 +819,7 @@ index 2dc9f38..7bf57df 100644 static DECLARE_DELAYED_WORK(delayed_fput_work, delayed_fput); -@@ -300,6 +302,7 @@ void __fput_sync(struct file *file) +@@ -299,6 +301,7 @@ void __fput_sync(struct file *file) } EXPORT_SYMBOL(fput); @@ -827,7 +827,7 @@ index 2dc9f38..7bf57df 100644 void put_filp(struct file *file) { -@@ -308,6 +311,7 @@ void put_filp(struct file *file) +@@ -307,6 +310,7 @@ void put_filp(struct file *file) file_free(file); } } @@ -836,10 +836,10 @@ index 2dc9f38..7bf57df 100644 void __init files_init(void) { diff --git a/fs/inode.c b/fs/inode.c -index 517883c..5cece5e 100644 +index 929a5a3..d93653e 100644 --- a/fs/inode.c +++ b/fs/inode.c -@@ -1664,6 +1664,7 @@ int update_time(struct inode *inode, struct timespec *time, int flags) +@@ -1668,6 +1668,7 @@ int update_time(struct inode *inode, struct timespec *time, int flags) return update_time(inode, time, flags); } @@ -848,7 +848,7 @@ index 517883c..5cece5e 100644 /** * touch_atime - update the access time diff --git a/fs/namespace.c b/fs/namespace.c -index 312bdbd8..a5baeb5 100644 +index 26ef600..a4b9707 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -517,6 +517,7 @@ void __mnt_drop_write(struct vfsmount *mnt) @@ -1048,10 +1048,10 @@ index 61cd28b..35570cd 100644 ssize_t __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name, diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c -index 2cd0282..af59768 100644 +index 0dca42f..7bb20c5 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c -@@ -167,6 +167,7 @@ inline struct lock_class *lockdep_hlock_class(struct held_lock *hlock) +@@ -151,6 +151,7 @@ inline struct lock_class *lockdep_hlock_class(struct held_lock *hlock) } return lock_classes + hlock->class_idx - 1; } @@ -1069,10 +1069,10 @@ index 0fef395..83fb1ec 100644 } +EXPORT_SYMBOL_GPL(task_work_run); diff --git a/security/commoncap.c b/security/commoncap.c -index 4f8e093..f1e0544 100644 +index 48620c9..4981104 100644 --- a/security/commoncap.c +++ b/security/commoncap.c -@@ -1333,12 +1333,14 @@ int cap_mmap_addr(unsigned long addr) +@@ -1330,12 +1330,14 @@ int cap_mmap_addr(unsigned long addr) } return ret; } @@ -1190,7 +1190,7 @@ index 1cd8526..f2e4736 100644 { diff -urN /usr/share/empty/Documentation/ABI/testing/debugfs-aufs linux/Documentation/ABI/testing/debugfs-aufs --- /usr/share/empty/Documentation/ABI/testing/debugfs-aufs 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/ABI/testing/debugfs-aufs 2016-01-13 20:11:11.663093444 +0100 ++++ linux/Documentation/ABI/testing/debugfs-aufs 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,50 @@ +What: /debug/aufs/si_/ +Date: March 2009 @@ -1244,7 +1244,7 @@ diff -urN /usr/share/empty/Documentation/ABI/testing/debugfs-aufs linux/Document + will be empty. About XINO files, see the aufs manual. diff -urN /usr/share/empty/Documentation/ABI/testing/sysfs-aufs linux/Documentation/ABI/testing/sysfs-aufs --- /usr/share/empty/Documentation/ABI/testing/sysfs-aufs 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/ABI/testing/sysfs-aufs 2016-01-13 20:11:11.663093444 +0100 ++++ linux/Documentation/ABI/testing/sysfs-aufs 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,31 @@ +What: /sys/fs/aufs/si_/ +Date: March 2009 @@ -1279,7 +1279,7 @@ diff -urN /usr/share/empty/Documentation/ABI/testing/sysfs-aufs linux/Documentat + will be empty. About XINO files, see the aufs manual. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/01intro.txt linux/Documentation/filesystems/aufs/design/01intro.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/01intro.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/01intro.txt 2018-01-29 07:56:20.046658203 +0100 ++++ linux/Documentation/filesystems/aufs/design/01intro.txt 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,171 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima @@ -1454,7 +1454,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/01intro.txt lin +about it. But currently I have implemented it in kernel space. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/02struct.txt linux/Documentation/filesystems/aufs/design/02struct.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/02struct.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/02struct.txt 2018-01-29 07:56:20.049991637 +0100 ++++ linux/Documentation/filesystems/aufs/design/02struct.txt 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,258 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima @@ -1716,7 +1716,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/02struct.txt li +For this purpose, use "aumvdown" command in aufs-util.git. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/03atomic_open.txt linux/Documentation/filesystems/aufs/design/03atomic_open.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/03atomic_open.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/03atomic_open.txt 2018-01-29 07:56:20.049991637 +0100 ++++ linux/Documentation/filesystems/aufs/design/03atomic_open.txt 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,85 @@ + +# Copyright (C) 2015-2017 Junjiro R. Okajima @@ -1805,7 +1805,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/03atomic_open.t + be implemented in aufs, but not all I am afraid. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/03lookup.txt linux/Documentation/filesystems/aufs/design/03lookup.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/03lookup.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/03lookup.txt 2018-01-29 07:56:20.049991637 +0100 ++++ linux/Documentation/filesystems/aufs/design/03lookup.txt 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,113 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima @@ -1922,7 +1922,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/03lookup.txt li + by over-mounting something (or another method). diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/04branch.txt linux/Documentation/filesystems/aufs/design/04branch.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/04branch.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/04branch.txt 2018-01-29 07:56:20.049991637 +0100 ++++ linux/Documentation/filesystems/aufs/design/04branch.txt 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,74 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima @@ -2000,7 +2000,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/04branch.txt li + same named entry on the upper branch. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/05wbr_policy.txt linux/Documentation/filesystems/aufs/design/05wbr_policy.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/05wbr_policy.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/05wbr_policy.txt 2018-01-29 07:56:20.049991637 +0100 ++++ linux/Documentation/filesystems/aufs/design/05wbr_policy.txt 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,64 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima @@ -2068,7 +2068,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/05wbr_policy.tx + copyup policy. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06dirren.dot linux/Documentation/filesystems/aufs/design/06dirren.dot --- /usr/share/empty/Documentation/filesystems/aufs/design/06dirren.dot 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/06dirren.dot 2018-01-29 07:56:20.049991637 +0100 ++++ linux/Documentation/filesystems/aufs/design/06dirren.dot 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,31 @@ + +// to view this graph, run dot(1) command in GRAPHVIZ. @@ -2103,7 +2103,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06dirren.dot li +} diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06dirren.txt linux/Documentation/filesystems/aufs/design/06dirren.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/06dirren.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/06dirren.txt 2018-01-29 07:56:20.049991637 +0100 ++++ linux/Documentation/filesystems/aufs/design/06dirren.txt 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,102 @@ + +# Copyright (C) 2017 Junjiro R. Okajima @@ -2209,7 +2209,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06dirren.txt li +equivalen to udba=reval case. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06fhsm.txt linux/Documentation/filesystems/aufs/design/06fhsm.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/06fhsm.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/06fhsm.txt 2018-01-29 07:56:20.049991637 +0100 ++++ linux/Documentation/filesystems/aufs/design/06fhsm.txt 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,120 @@ + +# Copyright (C) 2011-2017 Junjiro R. Okajima @@ -2333,7 +2333,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06fhsm.txt linu +should restore the original file state after an error happens. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06mmap.txt linux/Documentation/filesystems/aufs/design/06mmap.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/06mmap.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/06mmap.txt 2018-01-29 07:56:20.049991637 +0100 ++++ linux/Documentation/filesystems/aufs/design/06mmap.txt 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,72 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima @@ -2409,7 +2409,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06mmap.txt linu +I have to give up this "looks-smater" approach. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06xattr.txt linux/Documentation/filesystems/aufs/design/06xattr.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/06xattr.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/06xattr.txt 2018-01-29 07:56:20.049991637 +0100 ++++ linux/Documentation/filesystems/aufs/design/06xattr.txt 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,96 @@ + +# Copyright (C) 2014-2017 Junjiro R. Okajima @@ -2509,7 +2509,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06xattr.txt lin +now, aufs implements the branch attributes to ignore the error. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/07export.txt linux/Documentation/filesystems/aufs/design/07export.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/07export.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/07export.txt 2018-01-29 07:56:20.049991637 +0100 ++++ linux/Documentation/filesystems/aufs/design/07export.txt 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,58 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima @@ -2571,7 +2571,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/07export.txt li + lookup_one_len(), vfs_getattr(), encode_fh() and others. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/08shwh.txt linux/Documentation/filesystems/aufs/design/08shwh.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/08shwh.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/08shwh.txt 2018-01-29 07:56:20.049991637 +0100 ++++ linux/Documentation/filesystems/aufs/design/08shwh.txt 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,52 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima @@ -2627,7 +2627,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/08shwh.txt linu +initramfs will use it to replace the old one at the next boot. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/10dynop.txt linux/Documentation/filesystems/aufs/design/10dynop.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/10dynop.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/10dynop.txt 2018-01-29 07:56:20.049991637 +0100 ++++ linux/Documentation/filesystems/aufs/design/10dynop.txt 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,47 @@ + +# Copyright (C) 2010-2017 Junjiro R. Okajima @@ -2678,7 +2678,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/10dynop.txt lin +regular files only. diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documentation/filesystems/aufs/README --- /usr/share/empty/Documentation/filesystems/aufs/README 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/README 2018-01-29 07:56:20.046658203 +0100 ++++ linux/Documentation/filesystems/aufs/README 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,393 @@ + +Aufs4 -- advanced multi layered unification filesystem version 4.x @@ -3075,7 +3075,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta +# End: ; diff -urN /usr/share/empty/fs/aufs/aufs.h linux/fs/aufs/aufs.h --- /usr/share/empty/fs/aufs/aufs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/aufs.h 2018-01-29 07:56:20.049991637 +0100 ++++ linux/fs/aufs/aufs.h 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -3139,7 +3139,7 @@ diff -urN /usr/share/empty/fs/aufs/aufs.h linux/fs/aufs/aufs.h +#endif /* __AUFS_H__ */ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c --- /usr/share/empty/fs/aufs/branch.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/branch.c 2018-01-29 07:56:20.049991637 +0100 ++++ linux/fs/aufs/branch.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,1432 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -4575,7 +4575,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c +} diff -urN /usr/share/empty/fs/aufs/branch.h linux/fs/aufs/branch.h --- /usr/share/empty/fs/aufs/branch.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/branch.h 2018-01-29 07:56:20.049991637 +0100 ++++ linux/fs/aufs/branch.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,333 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -4912,7 +4912,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.h linux/fs/aufs/branch.h +#endif /* __AUFS_BRANCH_H__ */ diff -urN /usr/share/empty/fs/aufs/conf.mk linux/fs/aufs/conf.mk --- /usr/share/empty/fs/aufs/conf.mk 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/conf.mk 2018-01-29 07:56:20.049991637 +0100 ++++ linux/fs/aufs/conf.mk 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,40 @@ +# SPDX-License-Identifier: GPL-2.0 + @@ -4956,8 +4956,8 @@ diff -urN /usr/share/empty/fs/aufs/conf.mk linux/fs/aufs/conf.mk +-include ${srctree}/${src}/conf_priv.mk diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c --- /usr/share/empty/fs/aufs/cpup.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/cpup.c 2018-01-29 07:56:20.053325069 +0100 -@@ -0,0 +1,1442 @@ ++++ linux/fs/aufs/cpup.c 2018-04-06 07:48:44.204604724 +0200 +@@ -0,0 +1,1441 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * @@ -5340,7 +5340,7 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + else { + inode_unlock_shared(h_src_inode); + err = au_copy_file(dst, src, len); -+ vfsub_inode_lock_shared_nested(h_src_inode, AuLsc_I_CHILD); ++ inode_lock_shared_nested(h_src_inode, AuLsc_I_CHILD); + } + + return err; @@ -5363,7 +5363,7 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + if (!au_test_nfs(h_src_sb)) { + inode_unlock_shared(h_src_inode); + err = vfsub_clone_file_range(src, dst, len); -+ vfsub_inode_lock_shared_nested(h_src_inode, AuLsc_I_CHILD); ++ inode_lock_shared_nested(h_src_inode, AuLsc_I_CHILD); + } else + err = vfsub_clone_file_range(src, dst, len); + /* older XFS has a condition in cloning */ @@ -5467,7 +5467,7 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + cpg->len = l; + if (cpg->len) { + /* try stopping to update while we are referencing */ -+ vfsub_inode_lock_shared_nested(h_src_inode, AuLsc_I_CHILD); ++ inode_lock_shared_nested(h_src_inode, AuLsc_I_CHILD); + au_pin_hdir_unlock(cpg->pin); + + h_path.dentry = au_h_dptr(cpg->dentry, cpg->bsrc); @@ -5478,8 +5478,7 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + else { + inode_unlock_shared(h_src_inode); + err = vfsub_getattr(&h_path, &h_src_attr->st); -+ vfsub_inode_lock_shared_nested(h_src_inode, -+ AuLsc_I_CHILD); ++ inode_lock_shared_nested(h_src_inode, AuLsc_I_CHILD); + } + if (unlikely(err)) { + inode_unlock_shared(h_src_inode); @@ -6402,7 +6401,7 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c +} diff -urN /usr/share/empty/fs/aufs/cpup.h linux/fs/aufs/cpup.h --- /usr/share/empty/fs/aufs/cpup.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/cpup.h 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/cpup.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -6505,7 +6504,7 @@ diff -urN /usr/share/empty/fs/aufs/cpup.h linux/fs/aufs/cpup.h +#endif /* __AUFS_CPUP_H__ */ diff -urN /usr/share/empty/fs/aufs/dbgaufs.c linux/fs/aufs/dbgaufs.c --- /usr/share/empty/fs/aufs/dbgaufs.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dbgaufs.c 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/dbgaufs.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,437 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -6946,7 +6945,7 @@ diff -urN /usr/share/empty/fs/aufs/dbgaufs.c linux/fs/aufs/dbgaufs.c +} diff -urN /usr/share/empty/fs/aufs/dbgaufs.h linux/fs/aufs/dbgaufs.h --- /usr/share/empty/fs/aufs/dbgaufs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dbgaufs.h 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/dbgaufs.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -6998,7 +6997,7 @@ diff -urN /usr/share/empty/fs/aufs/dbgaufs.h linux/fs/aufs/dbgaufs.h +#endif /* __DBGAUFS_H__ */ diff -urN /usr/share/empty/fs/aufs/dcsub.c linux/fs/aufs/dcsub.c --- /usr/share/empty/fs/aufs/dcsub.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dcsub.c 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/dcsub.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,225 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -7227,7 +7226,7 @@ diff -urN /usr/share/empty/fs/aufs/dcsub.c linux/fs/aufs/dcsub.c +} diff -urN /usr/share/empty/fs/aufs/dcsub.h linux/fs/aufs/dcsub.h --- /usr/share/empty/fs/aufs/dcsub.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dcsub.h 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/dcsub.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -7367,7 +7366,7 @@ diff -urN /usr/share/empty/fs/aufs/dcsub.h linux/fs/aufs/dcsub.h +#endif /* __AUFS_DCSUB_H__ */ diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c --- /usr/share/empty/fs/aufs/debug.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/debug.c 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/debug.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,440 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -7466,7 +7465,7 @@ diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c + return; + } + -+ dpri("deblk %u, nblk %lu, deblk %p, last{%lu, %p}, ver %lu\n", ++ dpri("deblk %u, nblk %lu, deblk %p, last{%lu, %p}, ver %llu\n", + vdir->vd_deblk_sz, vdir->vd_nblk, vdir->vd_deblk, + vdir->vd_last.ul, vdir->vd_last.p.deblk, vdir->vd_version); + for (ul = 0; ul < vdir->vd_nblk; ul++) { @@ -7503,7 +7502,7 @@ diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c + i_size_read(inode), (unsigned long long)inode->i_blocks, + hn, (long long)timespec_to_ns(&inode->i_ctime) & 0x0ffff, + inode->i_mapping ? inode->i_mapping->nrpages : 0, -+ inode->i_state, inode->i_flags, inode->i_version, ++ inode->i_state, inode->i_flags, inode_peek_iversion(inode), + inode->i_generation, + l ? ", wh " : "", l, n); + return 0; @@ -7811,7 +7810,7 @@ diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c +} diff -urN /usr/share/empty/fs/aufs/debug.h linux/fs/aufs/debug.h --- /usr/share/empty/fs/aufs/debug.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/debug.h 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/debug.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,225 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -8040,7 +8039,7 @@ diff -urN /usr/share/empty/fs/aufs/debug.h linux/fs/aufs/debug.h +#endif /* __AUFS_DEBUG_H__ */ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c --- /usr/share/empty/fs/aufs/dentry.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dentry.c 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/dentry.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,1152 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -8138,7 +8137,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + || (d_really_is_positive(dentry) && !d_is_dir(dentry))) + goto out; /* success */ + -+ vfsub_inode_lock_shared_nested(h_inode, AuLsc_I_CHILD); ++ inode_lock_shared_nested(h_inode, AuLsc_I_CHILD); + opq = au_diropq_test(h_dentry); + inode_unlock_shared(h_inode); + if (opq > 0) @@ -8223,7 +8222,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + } + + h_dir = d_inode(h_parent); -+ vfsub_inode_lock_shared_nested(h_dir, AuLsc_I_PARENT); ++ inode_lock_shared_nested(h_dir, AuLsc_I_PARENT); + h_dentry = au_do_lookup(h_parent, dentry, bindex, &args); + inode_unlock_shared(h_dir); + err = PTR_ERR(h_dentry); @@ -8366,7 +8365,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + /* ia->i_nlink = h_inode->i_nlink; */ + ia->i_uid = h_inode->i_uid; + ia->i_gid = h_inode->i_gid; -+ ia->i_version = h_inode->i_version; ++ ia->i_version = inode_query_iversion(h_inode); +/* + ia->i_size = h_inode->i_size; + ia->i_blocks = h_inode->i_blocks; @@ -8380,7 +8379,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + /* || ia->i_nlink != h_inode->i_nlink */ + || !uid_eq(ia->i_uid, h_inode->i_uid) + || !gid_eq(ia->i_gid, h_inode->i_gid) -+ || ia->i_version != h_inode->i_version ++ || !inode_eq_iversion(h_inode, ia->i_version) +/* + || ia->i_size != h_inode->i_size + || ia->i_blocks != h_inode->i_blocks @@ -9196,7 +9195,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c +}; diff -urN /usr/share/empty/fs/aufs/dentry.h linux/fs/aufs/dentry.h --- /usr/share/empty/fs/aufs/dentry.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dentry.h 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/dentry.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,266 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -9466,7 +9465,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.h linux/fs/aufs/dentry.h +#endif /* __AUFS_DENTRY_H__ */ diff -urN /usr/share/empty/fs/aufs/dinfo.c linux/fs/aufs/dinfo.c --- /usr/share/empty/fs/aufs/dinfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dinfo.c 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/dinfo.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,553 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -10023,7 +10022,7 @@ diff -urN /usr/share/empty/fs/aufs/dinfo.c linux/fs/aufs/dinfo.c +} diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c --- /usr/share/empty/fs/aufs/dir.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dir.c 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/dir.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,759 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -10285,7 +10284,7 @@ diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c + err = 0; + mnt = file->f_path.mnt; + dentry = file->f_path.dentry; -+ file->f_version = d_inode(dentry)->i_version; ++ file->f_version = inode_query_iversion(d_inode(dentry)); + bindex = au_dbtop(dentry); + au_set_fbtop(file, bindex); + btail = au_dbtaildir(dentry); @@ -10664,7 +10663,7 @@ diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c + h_dentry = au_h_dptr(dentry, arg->bindex); + h_inode = d_inode(h_dentry); + /* todo: i_mode changes anytime? */ -+ vfsub_inode_lock_shared_nested(h_inode, AuLsc_I_CHILD); ++ inode_lock_shared_nested(h_inode, AuLsc_I_CHILD); + err = au_test_h_perm_sio(h_inode, MAY_EXEC | MAY_READ); + inode_unlock_shared(h_inode); + if (!err) @@ -10786,7 +10785,7 @@ diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c +}; diff -urN /usr/share/empty/fs/aufs/dir.h linux/fs/aufs/dir.h --- /usr/share/empty/fs/aufs/dir.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dir.h 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/dir.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -10868,7 +10867,7 @@ diff -urN /usr/share/empty/fs/aufs/dir.h linux/fs/aufs/dir.h + union au_vdir_deblk_p p; + } vd_last; + -+ unsigned long vd_version; ++ u64 vd_version; + unsigned int vd_deblk_sz; + unsigned long vd_jiffy; +} ____cacheline_aligned_in_smp; @@ -10921,7 +10920,7 @@ diff -urN /usr/share/empty/fs/aufs/dir.h linux/fs/aufs/dir.h +#endif /* __AUFS_DIR_H__ */ diff -urN /usr/share/empty/fs/aufs/dirren.c linux/fs/aufs/dirren.c --- /usr/share/empty/fs/aufs/dirren.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dirren.c 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/dirren.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,1315 @@ +/* + * Copyright (C) 2017 Junjiro R. Okajima @@ -11926,7 +11925,7 @@ diff -urN /usr/share/empty/fs/aufs/dirren.c linux/fs/aufs/dirren.c + drinfo = NULL; + unlocked = 0; + h_dir = d_inode(h_ppath->dentry); -+ vfsub_inode_lock_shared_nested(h_dir, AuLsc_I_PARENT); ++ inode_lock_shared_nested(h_dir, AuLsc_I_PARENT); + infopath.dentry = vfsub_lookup_one_len(whname, h_ppath->dentry, + whnamelen); + if (IS_ERR(infopath.dentry)) { @@ -12240,7 +12239,7 @@ diff -urN /usr/share/empty/fs/aufs/dirren.c linux/fs/aufs/dirren.c +} diff -urN /usr/share/empty/fs/aufs/dirren.h linux/fs/aufs/dirren.h --- /usr/share/empty/fs/aufs/dirren.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dirren.h 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/dirren.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2017 Junjiro R. Okajima @@ -12383,7 +12382,7 @@ diff -urN /usr/share/empty/fs/aufs/dirren.h linux/fs/aufs/dirren.h +#endif /* __AUFS_DIRREN_H__ */ diff -urN /usr/share/empty/fs/aufs/dynop.c linux/fs/aufs/dynop.c --- /usr/share/empty/fs/aufs/dynop.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dynop.c 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/dynop.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,369 @@ +/* + * Copyright (C) 2010-2017 Junjiro R. Okajima @@ -12756,7 +12755,7 @@ diff -urN /usr/share/empty/fs/aufs/dynop.c linux/fs/aufs/dynop.c +} diff -urN /usr/share/empty/fs/aufs/dynop.h linux/fs/aufs/dynop.h --- /usr/share/empty/fs/aufs/dynop.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dynop.h 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/dynop.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2010-2017 Junjiro R. Okajima @@ -12834,7 +12833,7 @@ diff -urN /usr/share/empty/fs/aufs/dynop.h linux/fs/aufs/dynop.h +#endif /* __AUFS_DYNOP_H__ */ diff -urN /usr/share/empty/fs/aufs/export.c linux/fs/aufs/export.c --- /usr/share/empty/fs/aufs/export.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/export.c 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/export.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,836 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -13674,8 +13673,8 @@ diff -urN /usr/share/empty/fs/aufs/export.c linux/fs/aufs/export.c +} diff -urN /usr/share/empty/fs/aufs/fhsm.c linux/fs/aufs/fhsm.c --- /usr/share/empty/fs/aufs/fhsm.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/fhsm.c 2018-01-29 07:56:20.053325069 +0100 -@@ -0,0 +1,426 @@ ++++ linux/fs/aufs/fhsm.c 2018-04-06 07:48:44.204604724 +0200 +@@ -0,0 +1,425 @@ +/* + * Copyright (C) 2011-2017 Junjiro R. Okajima + * @@ -13847,10 +13846,9 @@ diff -urN /usr/share/empty/fs/aufs/fhsm.c linux/fs/aufs/fhsm.c + +/* ---------------------------------------------------------------------- */ + -+static unsigned int au_fhsm_poll(struct file *file, -+ struct poll_table_struct *wait) ++static __poll_t au_fhsm_poll(struct file *file, struct poll_table_struct *wait) +{ -+ unsigned int mask; ++ __poll_t mask; + struct au_sbinfo *sbinfo; + struct au_fhsm *fhsm; + @@ -13859,9 +13857,9 @@ diff -urN /usr/share/empty/fs/aufs/fhsm.c linux/fs/aufs/fhsm.c + fhsm = &sbinfo->si_fhsm; + poll_wait(file, &fhsm->fhsm_wqh, wait); + if (atomic_read(&fhsm->fhsm_readable)) -+ mask = POLLIN /* | POLLRDNORM */; ++ mask = EPOLLIN /* | EPOLLRDNORM */; + -+ AuTraceErr((int)mask); ++ AuDbg("mask 0x%x\n", mask); + return mask; +} + @@ -14104,7 +14102,7 @@ diff -urN /usr/share/empty/fs/aufs/fhsm.c linux/fs/aufs/fhsm.c +} diff -urN /usr/share/empty/fs/aufs/file.c linux/fs/aufs/file.c --- /usr/share/empty/fs/aufs/file.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/file.c 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/file.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,856 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -14964,7 +14962,7 @@ diff -urN /usr/share/empty/fs/aufs/file.c linux/fs/aufs/file.c +}; diff -urN /usr/share/empty/fs/aufs/file.h linux/fs/aufs/file.h --- /usr/share/empty/fs/aufs/file.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/file.h 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/file.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,340 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -15060,7 +15058,7 @@ diff -urN /usr/share/empty/fs/aufs/file.h linux/fs/aufs/file.h + +/* poll.c */ +#ifdef CONFIG_AUFS_POLL -+unsigned int aufs_poll(struct file *file, poll_table *wait); ++__poll_t aufs_poll(struct file *file, poll_table *wait); +#endif + +#ifdef CONFIG_AUFS_BR_HFSPLUS @@ -15308,7 +15306,7 @@ diff -urN /usr/share/empty/fs/aufs/file.h linux/fs/aufs/file.h +#endif /* __AUFS_FILE_H__ */ diff -urN /usr/share/empty/fs/aufs/finfo.c linux/fs/aufs/finfo.c --- /usr/share/empty/fs/aufs/finfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/finfo.c 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/finfo.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -15460,7 +15458,7 @@ diff -urN /usr/share/empty/fs/aufs/finfo.c linux/fs/aufs/finfo.c +} diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c --- /usr/share/empty/fs/aufs/f_op.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/f_op.c 2018-01-29 07:56:20.053325069 +0100 ++++ linux/fs/aufs/f_op.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,817 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -16281,7 +16279,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c +}; diff -urN /usr/share/empty/fs/aufs/fstype.h linux/fs/aufs/fstype.h --- /usr/share/empty/fs/aufs/fstype.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/fstype.h 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/fstype.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,400 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -16685,7 +16683,7 @@ diff -urN /usr/share/empty/fs/aufs/fstype.h linux/fs/aufs/fstype.h +#endif /* __AUFS_FSTYPE_H__ */ diff -urN /usr/share/empty/fs/aufs/hbl.h linux/fs/aufs/hbl.h --- /usr/share/empty/fs/aufs/hbl.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/hbl.h 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/hbl.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2017 Junjiro R. Okajima @@ -16753,7 +16751,7 @@ diff -urN /usr/share/empty/fs/aufs/hbl.h linux/fs/aufs/hbl.h +#endif /* __AUFS_HBL_H__ */ diff -urN /usr/share/empty/fs/aufs/hfsnotify.c linux/fs/aufs/hfsnotify.c --- /usr/share/empty/fs/aufs/hfsnotify.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/hfsnotify.c 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/hfsnotify.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,289 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -17046,7 +17044,7 @@ diff -urN /usr/share/empty/fs/aufs/hfsnotify.c linux/fs/aufs/hfsnotify.c +}; diff -urN /usr/share/empty/fs/aufs/hfsplus.c linux/fs/aufs/hfsplus.c --- /usr/share/empty/fs/aufs/hfsplus.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/hfsplus.c 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/hfsplus.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2010-2017 Junjiro R. Okajima @@ -17106,7 +17104,7 @@ diff -urN /usr/share/empty/fs/aufs/hfsplus.c linux/fs/aufs/hfsplus.c +} diff -urN /usr/share/empty/fs/aufs/hnotify.c linux/fs/aufs/hnotify.c --- /usr/share/empty/fs/aufs/hnotify.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/hnotify.c 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/hnotify.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,719 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -17432,7 +17430,7 @@ diff -urN /usr/share/empty/fs/aufs/hnotify.c linux/fs/aufs/hnotify.c + if (au_ftest_hnjob(a->flags, TRYXINO0) + && a->inode + && a->h_inode) { -+ vfsub_inode_lock_shared_nested(a->h_inode, AuLsc_I_CHILD); ++ inode_lock_shared_nested(a->h_inode, AuLsc_I_CHILD); + if (!a->h_inode->i_nlink + && !(a->h_inode->i_state & I_LINKABLE)) + hn_xino(a->inode, a->h_inode); /* ignore this error */ @@ -17458,7 +17456,7 @@ diff -urN /usr/share/empty/fs/aufs/hnotify.c linux/fs/aufs/hnotify.c + if (vdir) + vdir->vd_jiffy = 0; + /* IMustLock(a->inode); */ -+ /* a->inode->i_version++; */ ++ /* inode_inc_iversion(a->inode); */ + } + + /* can do nothing but warn */ @@ -17829,7 +17827,7 @@ diff -urN /usr/share/empty/fs/aufs/hnotify.c linux/fs/aufs/hnotify.c +} diff -urN /usr/share/empty/fs/aufs/iinfo.c linux/fs/aufs/iinfo.c --- /usr/share/empty/fs/aufs/iinfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/iinfo.c 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/iinfo.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,285 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -18118,7 +18116,7 @@ diff -urN /usr/share/empty/fs/aufs/iinfo.c linux/fs/aufs/iinfo.c +} diff -urN /usr/share/empty/fs/aufs/inode.c linux/fs/aufs/inode.c --- /usr/share/empty/fs/aufs/inode.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/inode.c 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/inode.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,527 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -18157,7 +18155,7 @@ diff -urN /usr/share/empty/fs/aufs/inode.c linux/fs/aufs/inode.c + au_cpup_attr_all(inode, /*force*/0); + au_update_iigen(inode, /*half*/1); + if (do_version) -+ inode->i_version++; ++ inode_inc_iversion(inode); +} + +static int au_ii_refresh(struct inode *inode, int *update) @@ -18649,7 +18647,7 @@ diff -urN /usr/share/empty/fs/aufs/inode.c linux/fs/aufs/inode.c +} diff -urN /usr/share/empty/fs/aufs/inode.h linux/fs/aufs/inode.h --- /usr/share/empty/fs/aufs/inode.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/inode.h 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/inode.h 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,695 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -19333,7 +19331,7 @@ diff -urN /usr/share/empty/fs/aufs/inode.h linux/fs/aufs/inode.h +static inline void au_hn_inode_lock_shared_nested(struct au_hinode *hdir, + unsigned int sc) +{ -+ vfsub_inode_lock_shared_nested(hdir->hi_inode, sc); ++ inode_lock_shared_nested(hdir->hi_inode, sc); + au_hn_suspend(hdir); +} +#endif @@ -19348,7 +19346,7 @@ diff -urN /usr/share/empty/fs/aufs/inode.h linux/fs/aufs/inode.h +#endif /* __AUFS_INODE_H__ */ diff -urN /usr/share/empty/fs/aufs/ioctl.c linux/fs/aufs/ioctl.c --- /usr/share/empty/fs/aufs/ioctl.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/ioctl.c 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/ioctl.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,219 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -19571,7 +19569,7 @@ diff -urN /usr/share/empty/fs/aufs/ioctl.c linux/fs/aufs/ioctl.c +#endif diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c --- /usr/share/empty/fs/aufs/i_op_add.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/i_op_add.c 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/i_op_add.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,920 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -19633,7 +19631,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c + dir = d_inode(dentry->d_parent); /* dir inode is locked */ + IMustLock(dir); + au_dir_ts(dir, bindex); -+ dir->i_version++; ++ inode_inc_iversion(dir); + au_fhsm_wrote(sb, bindex, /*force*/0); + return 0; /* success */ + } @@ -20346,7 +20344,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c + } + + au_dir_ts(dir, a->bdst); -+ dir->i_version++; ++ inode_inc_iversion(dir); + inc_nlink(inode); + inode->i_ctime = dir->i_ctime; + d_instantiate(dentry, au_igrab(inode)); @@ -20495,7 +20493,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c +} diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c --- /usr/share/empty/fs/aufs/i_op.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/i_op.c 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/i_op.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,1459 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -20931,7 +20929,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c + if (!err && add_entry && !au_ftest_wrdir(add_entry, TMPFILE)) { + h_parent = au_h_dptr(parent, bcpup); + h_dir = d_inode(h_parent); -+ vfsub_inode_lock_shared_nested(h_dir, AuLsc_I_PARENT); ++ inode_lock_shared_nested(h_dir, AuLsc_I_PARENT); + err = au_lkup_neg(dentry, bcpup, /*wh*/0); + /* todo: no unlock here */ + inode_unlock_shared(h_dir); @@ -21318,7 +21316,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c + a->h_path.dentry = au_h_dptr(dentry, btop); + a->h_inode = d_inode(a->h_path.dentry); + if (ia && (ia->ia_valid & ATTR_SIZE)) { -+ vfsub_inode_lock_shared_nested(a->h_inode, AuLsc_I_CHILD); ++ inode_lock_shared_nested(a->h_inode, AuLsc_I_CHILD); + if (ia->ia_size < i_size_read(a->h_inode)) + sz = ia->ia_size; + inode_unlock_shared(a->h_inode); @@ -21958,7 +21956,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c +}; diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c --- /usr/share/empty/fs/aufs/i_op_del.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/i_op_del.c 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/i_op_del.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,511 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -22231,7 +22229,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c + inode->i_ctime = dir->i_ctime; + + au_dir_ts(dir, bindex); -+ dir->i_version++; ++ inode_inc_iversion(dir); +} + +/* @@ -22473,7 +22471,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c +} diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c --- /usr/share/empty/fs/aufs/i_op_ren.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/i_op_ren.c 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/i_op_ren.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,1246 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -23228,7 +23226,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c + struct inode *dir; + + dir = a->dst_dir; -+ dir->i_version++; ++ inode_inc_iversion(dir); + if (au_ftest_ren(a->auren_flags, ISDIR_SRC)) { + /* is this updating defined in POSIX? */ + au_cpup_attr_timesizes(a->src_inode); @@ -23238,7 +23236,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c + + if (a->exchange) { + dir = a->src_dir; -+ dir->i_version++; ++ inode_inc_iversion(dir); + if (au_ftest_ren(a->auren_flags, ISDIR_DST)) { + /* is this updating defined in POSIX? */ + au_cpup_attr_timesizes(a->dst_inode); @@ -23251,7 +23249,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c + return; + + dir = a->src_dir; -+ dir->i_version++; ++ inode_inc_iversion(dir); + if (au_ftest_ren(a->auren_flags, ISDIR_SRC)) + au_cpup_attr_nlink(dir, /*force*/1); + au_dir_ts(dir, a->btgt); @@ -23723,7 +23721,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c +} diff -urN /usr/share/empty/fs/aufs/Kconfig linux/fs/aufs/Kconfig --- /usr/share/empty/fs/aufs/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/Kconfig 2018-01-29 07:56:20.049991637 +0100 ++++ linux/fs/aufs/Kconfig 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,199 @@ +# SPDX-License-Identifier: GPL-2.0 +config AUFS_FS @@ -23926,7 +23924,7 @@ diff -urN /usr/share/empty/fs/aufs/Kconfig linux/fs/aufs/Kconfig +endif diff -urN /usr/share/empty/fs/aufs/loop.c linux/fs/aufs/loop.c --- /usr/share/empty/fs/aufs/loop.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/loop.c 2018-01-29 07:56:20.056658502 +0100 ++++ linux/fs/aufs/loop.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -24077,7 +24075,7 @@ diff -urN /usr/share/empty/fs/aufs/loop.c linux/fs/aufs/loop.c +} diff -urN /usr/share/empty/fs/aufs/loop.h linux/fs/aufs/loop.h --- /usr/share/empty/fs/aufs/loop.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/loop.h 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/loop.h 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -24133,7 +24131,7 @@ diff -urN /usr/share/empty/fs/aufs/loop.h linux/fs/aufs/loop.h +#endif /* __AUFS_LOOP_H__ */ diff -urN /usr/share/empty/fs/aufs/magic.mk linux/fs/aufs/magic.mk --- /usr/share/empty/fs/aufs/magic.mk 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/magic.mk 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/magic.mk 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,31 @@ +# SPDX-License-Identifier: GPL-2.0 + @@ -24168,7 +24166,7 @@ diff -urN /usr/share/empty/fs/aufs/magic.mk linux/fs/aufs/magic.mk +endif diff -urN /usr/share/empty/fs/aufs/Makefile linux/fs/aufs/Makefile --- /usr/share/empty/fs/aufs/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/Makefile 2018-01-29 07:56:20.049991637 +0100 ++++ linux/fs/aufs/Makefile 2018-04-06 07:48:44.201271351 +0200 @@ -0,0 +1,46 @@ +# SPDX-License-Identifier: GPL-2.0 + @@ -24218,7 +24216,7 @@ diff -urN /usr/share/empty/fs/aufs/Makefile linux/fs/aufs/Makefile +aufs-$(CONFIG_AUFS_MAGIC_SYSRQ) += sysrq.o diff -urN /usr/share/empty/fs/aufs/module.c linux/fs/aufs/module.c --- /usr/share/empty/fs/aufs/module.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/module.c 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/module.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,266 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -24488,7 +24486,7 @@ diff -urN /usr/share/empty/fs/aufs/module.c linux/fs/aufs/module.c +module_exit(aufs_exit); diff -urN /usr/share/empty/fs/aufs/module.h linux/fs/aufs/module.h --- /usr/share/empty/fs/aufs/module.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/module.h 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/module.h 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -24593,7 +24591,7 @@ diff -urN /usr/share/empty/fs/aufs/module.h linux/fs/aufs/module.h +#endif /* __AUFS_MODULE_H__ */ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c --- /usr/share/empty/fs/aufs/mvdown.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/mvdown.c 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/mvdown.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,704 @@ +/* + * Copyright (C) 2011-2017 Junjiro R. Okajima @@ -25301,7 +25299,7 @@ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c +} diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c --- /usr/share/empty/fs/aufs/opts.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/opts.c 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/opts.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,1891 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -27196,7 +27194,7 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c +} diff -urN /usr/share/empty/fs/aufs/opts.h linux/fs/aufs/opts.h --- /usr/share/empty/fs/aufs/opts.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/opts.h 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/opts.h 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,224 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -27424,7 +27422,7 @@ diff -urN /usr/share/empty/fs/aufs/opts.h linux/fs/aufs/opts.h +#endif /* __AUFS_OPTS_H__ */ diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c --- /usr/share/empty/fs/aufs/plink.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/plink.c 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/plink.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,515 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -27645,7 +27643,7 @@ diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c + struct inode *h_inode; + + h_inode = d_inode(h_parent); -+ vfsub_inode_lock_shared_nested(h_inode, AuLsc_I_CHILD2); ++ inode_lock_shared_nested(h_inode, AuLsc_I_CHILD2); + h_dentry = vfsub_lkup_one(tgtname, h_parent); + inode_unlock_shared(h_inode); + return h_dentry; @@ -27943,7 +27941,7 @@ diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c +} diff -urN /usr/share/empty/fs/aufs/poll.c linux/fs/aufs/poll.c --- /usr/share/empty/fs/aufs/poll.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/poll.c 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/poll.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -27969,15 +27967,15 @@ diff -urN /usr/share/empty/fs/aufs/poll.c linux/fs/aufs/poll.c + +#include "aufs.h" + -+unsigned int aufs_poll(struct file *file, poll_table *wait) ++__poll_t aufs_poll(struct file *file, poll_table *wait) +{ -+ unsigned int mask; ++ __poll_t mask; + int err; + struct file *h_file; + struct super_block *sb; + + /* We should pretend an error happened. */ -+ mask = POLLERR /* | POLLIN | POLLOUT */; ++ mask = EPOLLERR /* | EPOLLIN | EPOLLOUT */; + sb = file->f_path.dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); + @@ -27994,12 +27992,12 @@ diff -urN /usr/share/empty/fs/aufs/poll.c linux/fs/aufs/poll.c + +out: + si_read_unlock(sb); -+ AuTraceErr((int)mask); ++ AuDbg("mask 0x%x\n", mask); + return mask; +} diff -urN /usr/share/empty/fs/aufs/posix_acl.c linux/fs/aufs/posix_acl.c --- /usr/share/empty/fs/aufs/posix_acl.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/posix_acl.c 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/posix_acl.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2014-2017 Junjiro R. Okajima @@ -28105,7 +28103,7 @@ diff -urN /usr/share/empty/fs/aufs/posix_acl.c linux/fs/aufs/posix_acl.c +} diff -urN /usr/share/empty/fs/aufs/procfs.c linux/fs/aufs/procfs.c --- /usr/share/empty/fs/aufs/procfs.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/procfs.c 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/procfs.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,170 @@ +/* + * Copyright (C) 2010-2017 Junjiro R. Okajima @@ -28279,7 +28277,7 @@ diff -urN /usr/share/empty/fs/aufs/procfs.c linux/fs/aufs/procfs.c +} diff -urN /usr/share/empty/fs/aufs/rdu.c linux/fs/aufs/rdu.c --- /usr/share/empty/fs/aufs/rdu.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/rdu.c 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/rdu.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,381 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -28664,7 +28662,7 @@ diff -urN /usr/share/empty/fs/aufs/rdu.c linux/fs/aufs/rdu.c +#endif diff -urN /usr/share/empty/fs/aufs/rwsem.h linux/fs/aufs/rwsem.h --- /usr/share/empty/fs/aufs/rwsem.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/rwsem.h 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/rwsem.h 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -28740,7 +28738,7 @@ diff -urN /usr/share/empty/fs/aufs/rwsem.h linux/fs/aufs/rwsem.h +#endif /* __AUFS_RWSEM_H__ */ diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c --- /usr/share/empty/fs/aufs/sbinfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/sbinfo.c 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/sbinfo.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,304 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -28904,7 +28902,7 @@ diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c + au_update_digen(sb->s_root); + inode = d_inode(sb->s_root); + au_update_iigen(inode, /*half*/0); -+ inode->i_version++; ++ inode_inc_iversion(inode); + return gen; +} + @@ -29048,8 +29046,8 @@ diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c +} diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c --- /usr/share/empty/fs/aufs/super.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/super.c 2018-01-29 07:56:20.059991935 +0100 -@@ -0,0 +1,1046 @@ ++++ linux/fs/aufs/super.c 2018-04-06 07:48:44.207938097 +0200 +@@ -0,0 +1,1051 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * @@ -29087,7 +29085,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c + c = au_cache_alloc_icntnr(); + if (c) { + au_icntnr_init(c); -+ c->vfs_inode.i_version = 1; /* sigen(sb); */ ++ inode_set_iversion(&c->vfs_inode, 1); /* sigen(sb); */ + c->iinfo.ii_hinode = NULL; + return &c->vfs_inode; + } @@ -29125,7 +29123,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c + if (!err) + err = au_iinfo_init(inode); + if (!err) -+ inode->i_version++; ++ inode_inc_iversion(inode); + else { + iget_failed(inode); + inode = ERR_PTR(err); @@ -29297,6 +29295,10 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c + sb = dentry->d_sb; + if (sb->s_flags & SB_POSIXACL) + seq_puts(m, ",acl"); ++#if 0 ++ if (sb->s_flags & SB_I_VERSION) ++ seq_puts(m, ",i_version"); ++#endif + + /* lock free root dinfo */ + si_noflush_read_lock(sb); @@ -29976,6 +29978,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c + + /* all timestamps always follow the ones on the branch */ + sb->s_flags |= SB_NOATIME | SB_NODIRATIME; ++ sb->s_flags |= SB_I_VERSION; /* do we really need this? */ + sb->s_op = &aufs_sop; + sb->s_d_op = &aufs_dop; + sb->s_magic = AUFS_SUPER_MAGIC; @@ -30098,7 +30101,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c +}; diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h --- /usr/share/empty/fs/aufs/super.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/super.h 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/super.h 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,626 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -30728,7 +30731,7 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h +#endif /* __AUFS_SUPER_H__ */ diff -urN /usr/share/empty/fs/aufs/sysaufs.c linux/fs/aufs/sysaufs.c --- /usr/share/empty/fs/aufs/sysaufs.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/sysaufs.c 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/sysaufs.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -30836,7 +30839,7 @@ diff -urN /usr/share/empty/fs/aufs/sysaufs.c linux/fs/aufs/sysaufs.c +} diff -urN /usr/share/empty/fs/aufs/sysaufs.h linux/fs/aufs/sysaufs.h --- /usr/share/empty/fs/aufs/sysaufs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/sysaufs.h 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/sysaufs.h 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -30941,7 +30944,7 @@ diff -urN /usr/share/empty/fs/aufs/sysaufs.h linux/fs/aufs/sysaufs.h +#endif /* __SYSAUFS_H__ */ diff -urN /usr/share/empty/fs/aufs/sysfs.c linux/fs/aufs/sysfs.c --- /usr/share/empty/fs/aufs/sysfs.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/sysfs.c 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/sysfs.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,376 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -31321,7 +31324,7 @@ diff -urN /usr/share/empty/fs/aufs/sysfs.c linux/fs/aufs/sysfs.c +} diff -urN /usr/share/empty/fs/aufs/sysrq.c linux/fs/aufs/sysrq.c --- /usr/share/empty/fs/aufs/sysrq.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/sysrq.c 2018-01-29 07:56:20.059991935 +0100 ++++ linux/fs/aufs/sysrq.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,159 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -31484,7 +31487,7 @@ diff -urN /usr/share/empty/fs/aufs/sysrq.c linux/fs/aufs/sysrq.c +} diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c --- /usr/share/empty/fs/aufs/vdir.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/vdir.c 2018-01-29 07:56:20.063325368 +0100 ++++ linux/fs/aufs/vdir.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,892 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -32143,7 +32146,7 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c + err = 0; + allocated = vdir; + } else if (may_read -+ && (inode->i_version != vdir->vd_version ++ && (!inode_eq_iversion(inode, vdir->vd_version) + || time_after(jiffies, vdir->vd_jiffy + expire))) { + do_read = 1; + err = reinit_vdir(vdir); @@ -32159,7 +32162,7 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c + err = au_do_read_vdir(&arg); + if (!err) { + /* file->f_pos = 0; */ /* todo: ctx->pos? */ -+ vdir->vd_version = inode->i_version; ++ vdir->vd_version = inode_query_iversion(inode); + vdir->vd_last.ul = 0; + vdir->vd_last.p.deblk = vdir->vd_deblk[0]; + if (allocated) @@ -32256,7 +32259,7 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c + inode = file_inode(file); + err = copy_vdir(vdir_cache, au_ivdir(inode)); + if (!err) { -+ file->f_version = inode->i_version; ++ file->f_version = inode_query_iversion(inode); + if (allocated) + au_set_fvdir_cache(file, allocated); + } else if (allocated) @@ -32329,7 +32332,7 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c + +out: + /* smp_mb(); */ -+ AuTraceErr(!valid); ++ AuDbg("valid %d\n", !valid); + return valid; +} + @@ -32380,7 +32383,7 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c +} diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c --- /usr/share/empty/fs/aufs/vfsub.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/vfsub.c 2018-01-29 07:56:20.063325368 +0100 ++++ linux/fs/aufs/vfsub.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,894 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -33278,8 +33281,8 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c +} diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h --- /usr/share/empty/fs/aufs/vfsub.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/vfsub.h 2018-01-29 07:56:20.063325368 +0100 -@@ -0,0 +1,360 @@ ++++ linux/fs/aufs/vfsub.h 2018-04-06 07:48:44.207938097 +0200 +@@ -0,0 +1,354 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * @@ -33307,6 +33310,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h +#ifdef __KERNEL__ + +#include ++#include +#include +#include +#include @@ -33336,13 +33340,6 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h +#define MtxMustLock(mtx) AuDebugOn(!mutex_is_locked(mtx)) +#define IMustLock(i) AuDebugOn(!inode_is_locked(i)) + -+/* why VFS doesn't define it? */ -+static inline -+void vfsub_inode_lock_shared_nested(struct inode *inode, unsigned int sc) -+{ -+ down_read_nested(&inode->i_rwsem, sc); -+} -+ +/* ---------------------------------------------------------------------- */ + +static inline void vfsub_drop_nlink(struct inode *inode) @@ -33642,7 +33639,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h +#endif /* __AUFS_VFSUB_H__ */ diff -urN /usr/share/empty/fs/aufs/wbr_policy.c linux/fs/aufs/wbr_policy.c --- /usr/share/empty/fs/aufs/wbr_policy.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/wbr_policy.c 2018-01-29 07:56:20.063325368 +0100 ++++ linux/fs/aufs/wbr_policy.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,830 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -34476,7 +34473,7 @@ diff -urN /usr/share/empty/fs/aufs/wbr_policy.c linux/fs/aufs/wbr_policy.c +}; diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c --- /usr/share/empty/fs/aufs/whout.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/whout.c 2018-01-29 07:56:20.063325368 +0100 ++++ linux/fs/aufs/whout.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,1061 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -35541,7 +35538,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c +} diff -urN /usr/share/empty/fs/aufs/whout.h linux/fs/aufs/whout.h --- /usr/share/empty/fs/aufs/whout.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/whout.h 2018-01-29 07:56:20.063325368 +0100 ++++ linux/fs/aufs/whout.h 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -35630,7 +35627,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.h linux/fs/aufs/whout.h +#endif /* __AUFS_WHOUT_H__ */ diff -urN /usr/share/empty/fs/aufs/wkq.c linux/fs/aufs/wkq.c --- /usr/share/empty/fs/aufs/wkq.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/wkq.c 2018-01-29 07:56:20.063325368 +0100 ++++ linux/fs/aufs/wkq.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,390 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -36024,7 +36021,7 @@ diff -urN /usr/share/empty/fs/aufs/wkq.c linux/fs/aufs/wkq.c +} diff -urN /usr/share/empty/fs/aufs/wkq.h linux/fs/aufs/wkq.h --- /usr/share/empty/fs/aufs/wkq.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/wkq.h 2018-01-29 07:56:20.063325368 +0100 ++++ linux/fs/aufs/wkq.h 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -36121,7 +36118,7 @@ diff -urN /usr/share/empty/fs/aufs/wkq.h linux/fs/aufs/wkq.h +#endif /* __AUFS_WKQ_H__ */ diff -urN /usr/share/empty/fs/aufs/xattr.c linux/fs/aufs/xattr.c --- /usr/share/empty/fs/aufs/xattr.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/xattr.c 2018-01-29 07:56:20.063325368 +0100 ++++ linux/fs/aufs/xattr.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,355 @@ +/* + * Copyright (C) 2014-2017 Junjiro R. Okajima @@ -36241,7 +36238,7 @@ diff -urN /usr/share/empty/fs/aufs/xattr.c linux/fs/aufs/xattr.c + h_isrc = d_inode(h_src); + h_idst = d_inode(h_dst); + inode_unlock(h_idst); -+ vfsub_inode_lock_shared_nested(h_isrc, AuLsc_I_CHILD); ++ inode_lock_shared_nested(h_isrc, AuLsc_I_CHILD); + inode_lock_nested(h_idst, AuLsc_I_CHILD2); + unlocked = 0; + @@ -36480,8 +36477,8 @@ diff -urN /usr/share/empty/fs/aufs/xattr.c linux/fs/aufs/xattr.c +} diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c --- /usr/share/empty/fs/aufs/xino.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/xino.c 2018-01-29 07:56:20.063325368 +0100 -@@ -0,0 +1,1418 @@ ++++ linux/fs/aufs/xino.c 2018-04-06 07:48:44.207938097 +0200 +@@ -0,0 +1,1469 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * @@ -36507,6 +36504,9 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c +#include +#include "aufs.h" + ++static ssize_t xino_fread_wkq(vfs_readf_t func, struct file *file, void *buf, ++ size_t size, loff_t *pos); ++ +/* todo: unnecessary to support mmap_sem since kernel-space? */ +ssize_t xino_fread(vfs_readf_t func, struct file *file, void *kbuf, size_t size, + loff_t *pos) @@ -36517,14 +36517,26 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c + void *k; + char __user *u; + } buf; ++ int i; ++ const int prevent_endless = 10; + ++ i = 0; + buf.k = kbuf; + oldfs = get_fs(); + set_fs(KERNEL_DS); + do { -+ /* todo: signal_pending? */ + err = func(file, buf.u, size, pos); -+ } while (err == -EAGAIN || err == -EINTR); ++ if (err == -EINTR ++ && !au_wkq_test() ++ && fatal_signal_pending(current)) { ++ set_fs(oldfs); ++ err = xino_fread_wkq(func, file, kbuf, size, pos); ++ BUG_ON(err == -EINTR); ++ oldfs = get_fs(); ++ set_fs(KERNEL_DS); ++ } ++ } while (i++ < prevent_endless ++ && (err == -EAGAIN || err == -EINTR)); + set_fs(oldfs); + +#if 0 /* reserved for future use */ @@ -36535,6 +36547,42 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c + return err; +} + ++struct xino_fread_args { ++ ssize_t *errp; ++ vfs_readf_t func; ++ struct file *file; ++ void *buf; ++ size_t size; ++ loff_t *pos; ++}; ++ ++static void call_xino_fread(void *args) ++{ ++ struct xino_fread_args *a = args; ++ *a->errp = xino_fread(a->func, a->file, a->buf, a->size, a->pos); ++} ++ ++static ssize_t xino_fread_wkq(vfs_readf_t func, struct file *file, void *buf, ++ size_t size, loff_t *pos) ++{ ++ ssize_t err; ++ int wkq_err; ++ struct xino_fread_args args = { ++ .errp = &err, ++ .func = func, ++ .file = file, ++ .buf = buf, ++ .size = size, ++ .pos = pos ++ }; ++ ++ wkq_err = au_wkq_wait(call_xino_fread, &args); ++ if (unlikely(wkq_err)) ++ err = wkq_err; ++ ++ return err; ++} ++ +/* ---------------------------------------------------------------------- */ + +static ssize_t xino_fwrite_wkq(vfs_writef_t func, struct file *file, void *buf, @@ -37902,7 +37950,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c +} diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/linux/aufs_type.h --- /usr/share/empty/include/uapi/linux/aufs_type.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/include/uapi/linux/aufs_type.h 2018-01-29 07:56:20.063325368 +0100 ++++ linux/include/uapi/linux/aufs_type.h 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,447 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -37945,7 +37993,7 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin + +#include + -+#define AUFS_VERSION "4.x-rcN-20171218" ++#define AUFS_VERSION "4.x-rcN-20180312" + +/* todo? move this to linux-2.6.19/include/magic.h */ +#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's') @@ -38355,7 +38403,7 @@ SPDX-License-Identifier: GPL-2.0 aufs4.x-rcN loopback patch diff --git a/drivers/block/loop.c b/drivers/block/loop.c -index e51a59d..b4f7d3a 100644 +index 962b2d6..d17f695 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -600,6 +600,15 @@ static inline void loop_update_dio(struct loop_device *lo) @@ -38564,10 +38612,10 @@ index 7d7bf34..ba7c188 100644 #endif /* __KERNEL__ */ diff --git a/fs/aufs/super.c b/fs/aufs/super.c -index 357bf04..c6614df 100644 +index eef60a6..e03a658 100644 --- a/fs/aufs/super.c +++ b/fs/aufs/super.c -@@ -839,7 +839,10 @@ static const struct super_operations aufs_sop = { +@@ -843,7 +843,10 @@ static const struct super_operations aufs_sop = { .statfs = aufs_statfs, .put_super = aufs_put_super, .sync_fs = aufs_sync_fs, @@ -38580,10 +38628,10 @@ index 357bf04..c6614df 100644 /* ---------------------------------------------------------------------- */ diff --git a/include/linux/fs.h b/include/linux/fs.h -index 96e05b3..ba5e627 100644 +index 383ab06..e899b15 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h -@@ -1840,6 +1840,10 @@ struct super_operations { +@@ -1849,6 +1849,10 @@ struct super_operations { struct shrink_control *); long (*free_cached_objects)(struct super_block *, struct shrink_control *);