X-Git-Url: https://git.pld-linux.org/?a=blobdiff_plain;f=kernel-aufs4.patch;h=0d0604488b326b240909fa949a8f08a57979468a;hb=1d092b397bb7a9cfd8ed6c529fca521532d03469;hp=d11a0aa1ef2b36440edbfb55a3f8a7bc1eaf4f1f;hpb=8b6a494719f4150ce54b9e4d30810ece069c1c73;p=packages%2Fkernel.git diff --git a/kernel-aufs4.patch b/kernel-aufs4.patch index d11a0aa1..0d060448 100644 --- a/kernel-aufs4.patch +++ b/kernel-aufs4.patch @@ -1,10 +1,11 @@ +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" @@ -13,7 +14,7 @@ index 7aee6d6..ec92031 100644 endif # MISC_FILESYSTEMS diff --git a/fs/Makefile b/fs/Makefile -index 7bbaca9..a026491 100644 +index add789e..26100d6 100644 --- a/fs/Makefile +++ b/fs/Makefile @@ -128,3 +128,4 @@ obj-y += exofs/ # Multiple modules @@ -21,13 +22,14 @@ index 7bbaca9..a026491 100644 obj-$(CONFIG_PSTORE) += pstore/ obj-$(CONFIG_EFIVAR_FS) += efivarfs/ +obj-$(CONFIG_AUFS_FS) += aufs/ +SPDX-License-Identifier: GPL-2.0 aufs4.x-rcN base patch diff --git a/MAINTAINERS b/MAINTAINERS -index af0cb69..d360d2e 100644 +index 4623caf..7617c0e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -2465,6 +2465,19 @@ F: include/linux/audit.h +@@ -2484,6 +2484,19 @@ F: include/linux/audit.h F: include/uapi/linux/audit.h F: kernel/audit* @@ -48,10 +50,10 @@ index af0cb69..d360d2e 100644 M: Miguel Ojeda Sandonis W: http://miguelojeda.es/auxdisplay.htm diff --git a/drivers/block/loop.c b/drivers/block/loop.c -index 85de673..d44de9d 100644 +index 87855b5..962b2d6 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c -@@ -686,6 +686,24 @@ static inline int is_loop_device(struct file *file) +@@ -691,6 +691,24 @@ static inline int is_loop_device(struct file *file) return i && S_ISBLK(i->i_mode) && MAJOR(i->i_rdev) == LOOP_MAJOR; } @@ -77,10 +79,10 @@ index 85de673..d44de9d 100644 static ssize_t loop_attr_show(struct device *dev, char *page, diff --git a/fs/dcache.c b/fs/dcache.c -index f901413..e3719a5 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. */ @@ -90,10 +92,10 @@ index f901413..e3719a5 100644 void (*finish)(void *)) { diff --git a/fs/fcntl.c b/fs/fcntl.c -index 448a111..f51c2cf 100644 +index 1e97f1f..8cd01f7 100644 --- a/fs/fcntl.c +++ b/fs/fcntl.c -@@ -31,7 +31,7 @@ +@@ -32,7 +32,7 @@ #define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME) @@ -102,7 +104,7 @@ index 448a111..f51c2cf 100644 { struct inode * inode = file_inode(filp); int error = 0; -@@ -62,6 +62,8 @@ static int setfl(int fd, struct file * filp, unsigned long arg) +@@ -63,6 +63,8 @@ static int setfl(int fd, struct file * filp, unsigned long arg) if (filp->f_op->check_flags) error = filp->f_op->check_flags(arg); @@ -112,10 +114,10 @@ index 448a111..f51c2cf 100644 return error; diff --git a/fs/inode.c b/fs/inode.c -index d1e35b5..f7800d6 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. */ @@ -125,7 +127,7 @@ index d1e35b5..f7800d6 100644 int (*update_time)(struct inode *, struct timespec *, int); diff --git a/fs/namespace.c b/fs/namespace.c -index d18deb4..e5a4a7f 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) @@ -142,10 +144,10 @@ index d18deb4..e5a4a7f 100644 * vfsmount lock must be held for write */ diff --git a/fs/read_write.c b/fs/read_write.c -index f0d4b16..6aa8c7a 100644 +index f8547b8..0a5c47b 100644 --- a/fs/read_write.c +++ b/fs/read_write.c -@@ -483,6 +483,28 @@ ssize_t __vfs_write(struct file *file, const char __user *p, size_t count, +@@ -484,6 +484,28 @@ ssize_t __vfs_write(struct file *file, const char __user *p, size_t count, return -EINVAL; } @@ -175,7 +177,7 @@ index f0d4b16..6aa8c7a 100644 { mm_segment_t old_fs; diff --git a/fs/splice.c b/fs/splice.c -index f3084cc..eb888c6 100644 +index 39e2dc0..c5fb195 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -837,8 +837,8 @@ EXPORT_SYMBOL(generic_splice_sendpage); @@ -203,10 +205,10 @@ index f3084cc..eb888c6 100644 ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int); diff --git a/fs/sync.c b/fs/sync.c -index a576aa2..eb61780 100644 +index 6e0a2cb..a6891ee 100644 --- a/fs/sync.c +++ b/fs/sync.c -@@ -27,7 +27,7 @@ +@@ -28,7 +28,7 @@ * wait == 1 case since in that case write_inode() functions do * sync_dirty_buffer() and thus effectively write one block at a time. */ @@ -216,10 +218,10 @@ index a576aa2..eb61780 100644 if (wait) sync_inodes_sb(sb); diff --git a/include/linux/file.h b/include/linux/file.h -index 61eb82c..e700888 100644 +index 279720d..76e38ea 100644 --- a/include/linux/file.h +++ b/include/linux/file.h -@@ -19,6 +19,7 @@ struct dentry; +@@ -20,6 +20,7 @@ struct dentry; struct path; extern struct file *alloc_file(const struct path *, fmode_t mode, const struct file_operations *fop); @@ -228,10 +230,10 @@ index 61eb82c..e700888 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 13dab19..8ab6566 100644 +index 79c41398..383ab06 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h -@@ -1264,6 +1264,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); @@ -239,7 +241,7 @@ index 13dab19..8ab6566 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); -@@ -1710,6 +1711,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); @@ -247,7 +249,7 @@ index 13dab19..8ab6566 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); -@@ -1780,6 +1782,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); @@ -260,7 +262,7 @@ index 13dab19..8ab6566 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 *); -@@ -2182,6 +2190,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); @@ -268,7 +270,7 @@ index 13dab19..8ab6566 100644 /* /sys/fs */ extern struct kobject *fs_kobj; -@@ -2462,6 +2471,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 @@ -277,10 +279,10 @@ index 13dab19..8ab6566 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 bfa8e0b..728d810 100644 +index 6fc77d4..27e76f0 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h -@@ -405,6 +405,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; } @@ -289,7 +291,7 @@ index bfa8e0b..728d810 100644 /* * Acquire a lock. * -@@ -529,6 +531,7 @@ struct lock_class_key { }; +@@ -439,6 +441,7 @@ struct lockdep_map { }; #define lockdep_depth(tsk) (0) @@ -298,10 +300,10 @@ index bfa8e0b..728d810 100644 #define lockdep_assert_held(l) do { (void)(l); } while (0) diff --git a/include/linux/mnt_namespace.h b/include/linux/mnt_namespace.h -index 12b2ab5..8b810d1 100644 +index 3594208..24f5fd1 100644 --- a/include/linux/mnt_namespace.h +++ b/include/linux/mnt_namespace.h -@@ -5,11 +5,14 @@ +@@ -6,11 +6,14 @@ struct mnt_namespace; struct fs_struct; struct user_namespace; @@ -317,10 +319,10 @@ index 12b2ab5..8b810d1 100644 extern const struct file_operations proc_mountinfo_operations; extern const struct file_operations proc_mountstats_operations; diff --git a/include/linux/splice.h b/include/linux/splice.h -index db42746..12f3a5a 100644 +index 74b4911..19789fb 100644 --- a/include/linux/splice.h +++ b/include/linux/splice.h -@@ -86,4 +86,10 @@ extern void splice_shrink_spd(struct splice_pipe_desc *); +@@ -87,4 +87,10 @@ extern void splice_shrink_spd(struct splice_pipe_desc *); extern const struct pipe_buf_operations page_cache_pipe_buf_ops; extern const struct pipe_buf_operations default_pipe_buf_ops; @@ -332,10 +334,10 @@ index db42746..12f3a5a 100644 + unsigned int flags); #endif diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c -index e36e652..bc97a97 100644 +index 89b5f83..0dca42f 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c -@@ -144,7 +144,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]; @@ -344,7 +346,7 @@ index e36e652..bc97a97 100644 { if (!hlock->class_idx) { /* -@@ -155,6 +155,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; } @@ -352,13 +354,14 @@ index e36e652..bc97a97 100644 #ifdef CONFIG_LOCK_STAT static DEFINE_PER_CPU(struct lock_class_stats[MAX_LOCKDEP_KEYS], cpu_lock_stats); +SPDX-License-Identifier: GPL-2.0 aufs4.x-rcN mmap patch diff --git a/fs/proc/base.c b/fs/proc/base.c -index ad3b076..ad4a50d 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) { @@ -384,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 5589b4b..f60aea2 100644 +index ec6d298..34c7193 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c -@@ -309,7 +309,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) { @@ -399,7 +402,7 @@ index 5589b4b..f60aea2 100644 dev = inode->i_sb->s_dev; ino = inode->i_ino; pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT; -@@ -1734,7 +1737,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; @@ -409,10 +412,10 @@ index 5589b4b..f60aea2 100644 struct mm_walk walk = { .hugetlb_entry = gather_hugetlb_stats, diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c -index b00b7660..93e8a86 100644 +index 5b62f57..dfb4a3b 100644 --- a/fs/proc/task_nommu.c +++ b/fs/proc/task_nommu.c -@@ -155,7 +155,10 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma, +@@ -156,7 +156,10 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma, file = vma->vm_file; if (file) { @@ -425,12 +428,12 @@ index b00b7660..93e8a86 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 065d99d..04486c3 100644 +index ad06d42..75e5d37 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h -@@ -1348,6 +1348,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[], @@ -454,14 +457,14 @@ index 065d99d..04486c3 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 1861ea8..d85a914 100644 +index fd1af6b..89ec438 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h -@@ -260,6 +260,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 */ @@ -469,7 +472,7 @@ index 1861ea8..d85a914 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 -@@ -334,6 +335,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). */ @@ -478,10 +481,10 @@ index 1861ea8..d85a914 100644 atomic_long_t swap_readahead_info; diff --git a/kernel/fork.c b/kernel/fork.c -index 07cc743..b1d2b43 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; @@ -491,7 +494,7 @@ index 07cc743..b1d2b43 100644 atomic_dec(&inode->i_writecount); i_mmap_lock_write(mapping); diff --git a/mm/Makefile b/mm/Makefile -index e3ac3ae..745b26c 100644 +index e669f02..9c36567 100644 --- a/mm/Makefile +++ b/mm/Makefile @@ -39,7 +39,7 @@ obj-y := filemap.o mempool.o oom_kill.o \ @@ -504,10 +507,10 @@ index e3ac3ae..745b26c 100644 obj-y += init-mm.o diff --git a/mm/filemap.c b/mm/filemap.c -index 594d73f..7183aef 100644 +index 693f622..ea46048 100644 --- a/mm/filemap.c +++ b/mm/filemap.c -@@ -2590,7 +2590,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); @@ -517,7 +520,7 @@ index 594d73f..7183aef 100644 if (page->mapping != inode->i_mapping) { unlock_page(page); diff --git a/mm/mmap.c b/mm/mmap.c -index 680506f..081406a 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) @@ -538,7 +541,7 @@ index 680506f..081406a 100644 } if (next->anon_vma) anon_vma_merge(vma, next); -@@ -1746,8 +1746,8 @@ unsigned long mmap_region(struct file *file, unsigned long addr, +@@ -1761,8 +1761,8 @@ unsigned long mmap_region(struct file *file, unsigned long addr, return addr; unmap_and_free_vma: @@ -548,7 +551,7 @@ index 680506f..081406a 100644 /* Undo any partial mapping done by a device driver. */ unmap_region(mm, vma, prev, vma->vm_start, vma->vm_end); -@@ -2569,7 +2569,7 @@ int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2586,7 +2586,7 @@ int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, goto out_free_mpol; if (new->vm_file) @@ -557,7 +560,7 @@ index 680506f..081406a 100644 if (new->vm_ops && new->vm_ops->open) new->vm_ops->open(new); -@@ -2588,7 +2588,7 @@ int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2605,7 +2605,7 @@ int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, if (new->vm_ops && new->vm_ops->close) new->vm_ops->close(new); if (new->vm_file) @@ -566,7 +569,7 @@ index 680506f..081406a 100644 unlink_anon_vmas(new); out_free_mpol: mpol_put(vma_policy(new)); -@@ -2750,7 +2750,7 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, +@@ -2767,7 +2767,7 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, struct vm_area_struct *vma; unsigned long populate = 0; unsigned long ret = -EINVAL; @@ -575,7 +578,7 @@ index 680506f..081406a 100644 pr_warn_once("%s (%d) uses deprecated remap_file_pages() syscall. See Documentation/vm/remap_file_pages.txt.\n", current->comm, current->pid); -@@ -2825,10 +2825,27 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, +@@ -2842,10 +2842,27 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, } } @@ -604,7 +607,7 @@ index 680506f..081406a 100644 out: up_write(&mm->mmap_sem); if (populate) -@@ -3136,7 +3153,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, +@@ -3153,7 +3170,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, if (anon_vma_clone(new_vma, vma)) goto out_free_mempol; if (new_vma->vm_file) @@ -614,7 +617,7 @@ index 680506f..081406a 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) @@ -659,11 +662,12 @@ index 17c00d9..4bcdf94 100644 diff --git a/mm/prfile.c b/mm/prfile.c new file mode 100644 -index 0000000..1ef053b +index 0000000..3f56669 --- /dev/null +++ b/mm/prfile.c -@@ -0,0 +1,85 @@ +@@ -0,0 +1,86 @@ +/* ++ * SPDX-License-Identifier: GPL-2.0 + * Mainly for aufs which mmap(2) different file and wants to print different + * path in /proc/PID/maps. + * Call these functions via macros defined in linux/mm.h. @@ -748,13 +752,14 @@ index 0000000..1ef053b + fput(pr); +} +#endif /* !CONFIG_MMU */ +SPDX-License-Identifier: GPL-2.0 aufs4.x-rcN standalone patch diff --git a/fs/dcache.c b/fs/dcache.c -index e3719a5..3203470 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; } @@ -762,7 +767,7 @@ index e3719a5..3203470 100644 struct check_mount { struct vfsmount *mnt; -@@ -2894,6 +2895,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); } @@ -771,7 +776,7 @@ index e3719a5..3203470 100644 /** * d_ancestor - search for an ancestor diff --git a/fs/exec.c b/fs/exec.c -index 3e14ba2..6818b01 100644 +index 7eb8d21..56d7985 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -109,6 +109,7 @@ bool path_noexec(const struct path *path) @@ -783,10 +788,10 @@ index 3e14ba2..6818b01 100644 #ifdef CONFIG_USELIB /* diff --git a/fs/fcntl.c b/fs/fcntl.c -index f51c2cf..58bf222 100644 +index 8cd01f7..bdd1c6c 100644 --- a/fs/fcntl.c +++ b/fs/fcntl.c -@@ -84,6 +84,7 @@ int setfl(int fd, struct file * filp, unsigned long arg) +@@ -85,6 +85,7 @@ int setfl(int fd, struct file * filp, unsigned long arg) out: return error; } @@ -795,10 +800,10 @@ index f51c2cf..58bf222 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 61517f5..c6bab39c 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); } @@ -806,7 +811,7 @@ index 61517f5..c6bab39c 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); } @@ -814,7 +819,7 @@ index 61517f5..c6bab39c 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); @@ -822,7 +827,7 @@ index 61517f5..c6bab39c 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); } } @@ -831,10 +836,10 @@ index 61517f5..c6bab39c 100644 void __init files_init(void) { diff --git a/fs/inode.c b/fs/inode.c -index f7800d6..f31a6c7 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); } @@ -843,7 +848,7 @@ index f7800d6..f31a6c7 100644 /** * touch_atime - update the access time diff --git a/fs/namespace.c b/fs/namespace.c -index e5a4a7f..6d0c376 100644 +index 26ef600..a4b9707 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -517,6 +517,7 @@ void __mnt_drop_write(struct vfsmount *mnt) @@ -871,7 +876,7 @@ index e5a4a7f..6d0c376 100644 static void cleanup_group_ids(struct mount *mnt, struct mount *end) { diff --git a/fs/notify/group.c b/fs/notify/group.c -index 3235753..14a2d48 100644 +index b7a4b6a..5a69d60 100644 --- a/fs/notify/group.c +++ b/fs/notify/group.c @@ -22,6 +22,7 @@ @@ -884,14 +889,14 @@ index 3235753..14a2d48 100644 #include "fsnotify.h" @@ -109,6 +110,7 @@ void fsnotify_get_group(struct fsnotify_group *group) { - atomic_inc(&group->refcnt); + refcount_inc(&group->refcnt); } +EXPORT_SYMBOL_GPL(fsnotify_get_group); /* * Drop a reference to a group. Free it if it's through. @@ -118,6 +120,7 @@ void fsnotify_put_group(struct fsnotify_group *group) - if (atomic_dec_and_test(&group->refcnt)) + if (refcount_dec_and_test(&group->refcnt)) fsnotify_final_destroy_group(group); } +EXPORT_SYMBOL_GPL(fsnotify_put_group); @@ -907,18 +912,18 @@ index 3235753..14a2d48 100644 int fsnotify_fasync(int fd, struct file *file, int on) { diff --git a/fs/notify/mark.c b/fs/notify/mark.c -index 9991f88..117042c 100644 +index e9191b4..1f8ccfa 100644 --- a/fs/notify/mark.c +++ b/fs/notify/mark.c -@@ -118,6 +118,7 @@ static bool fsnotify_get_mark_safe(struct fsnotify_mark *mark) - { - return atomic_inc_not_zero(&mark->refcnt); +@@ -108,6 +108,7 @@ void fsnotify_get_mark(struct fsnotify_mark *mark) + WARN_ON_ONCE(!refcount_read(&mark->refcnt)); + refcount_inc(&mark->refcnt); } +EXPORT_SYMBOL_GPL(fsnotify_put_mark); static void __fsnotify_recalc_mask(struct fsnotify_mark_connector *conn) { -@@ -395,6 +396,7 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark, +@@ -392,6 +393,7 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark, mutex_unlock(&group->mark_mutex); fsnotify_free_mark(mark); } @@ -926,7 +931,7 @@ index 9991f88..117042c 100644 /* * Sorting function for lists of fsnotify marks. -@@ -607,6 +609,7 @@ int fsnotify_add_mark_locked(struct fsnotify_mark *mark, struct inode *inode, +@@ -606,6 +608,7 @@ int fsnotify_add_mark_locked(struct fsnotify_mark *mark, struct inode *inode, fsnotify_put_mark(mark); return ret; } @@ -934,7 +939,7 @@ index 9991f88..117042c 100644 int fsnotify_add_mark(struct fsnotify_mark *mark, struct inode *inode, struct vfsmount *mnt, int allow_dups) -@@ -742,6 +745,7 @@ void fsnotify_init_mark(struct fsnotify_mark *mark, +@@ -741,6 +744,7 @@ void fsnotify_init_mark(struct fsnotify_mark *mark, fsnotify_get_group(group); mark->group = group; } @@ -963,10 +968,10 @@ index 7ea1184..6e2e241 100644 static int do_dentry_open(struct file *f, struct inode *inode, diff --git a/fs/read_write.c b/fs/read_write.c -index 6aa8c7a..b5d392e 100644 +index 0a5c47b..d423a5f 100644 --- a/fs/read_write.c +++ b/fs/read_write.c -@@ -453,6 +453,7 @@ ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos) +@@ -454,6 +454,7 @@ ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos) return ret; } @@ -974,7 +979,7 @@ index 6aa8c7a..b5d392e 100644 static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos) { -@@ -493,6 +494,7 @@ vfs_readf_t vfs_readf(struct file *file) +@@ -494,6 +495,7 @@ vfs_readf_t vfs_readf(struct file *file) return new_sync_read; return ERR_PTR(-ENOSYS); } @@ -982,7 +987,7 @@ index 6aa8c7a..b5d392e 100644 vfs_writef_t vfs_writef(struct file *file) { -@@ -504,6 +506,7 @@ vfs_writef_t vfs_writef(struct file *file) +@@ -505,6 +507,7 @@ vfs_writef_t vfs_writef(struct file *file) return new_sync_write; return ERR_PTR(-ENOSYS); } @@ -990,7 +995,7 @@ index 6aa8c7a..b5d392e 100644 ssize_t __kernel_write(struct file *file, const void *buf, size_t count, loff_t *pos) { -@@ -573,6 +576,7 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_ +@@ -574,6 +577,7 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_ return ret; } @@ -999,7 +1004,7 @@ index 6aa8c7a..b5d392e 100644 static inline loff_t file_pos_read(struct file *file) { diff --git a/fs/splice.c b/fs/splice.c -index eb888c6..7ab89d2 100644 +index c5fb195..ce01a74 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -850,6 +850,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out, @@ -1019,10 +1024,10 @@ index eb888c6..7ab89d2 100644 /** * splice_direct_to_actor - splices data directly between two non-pipes diff --git a/fs/sync.c b/fs/sync.c -index eb61780..32c5a05 100644 +index a6891ee..47a78bd 100644 --- a/fs/sync.c +++ b/fs/sync.c -@@ -38,6 +38,7 @@ int __sync_filesystem(struct super_block *sb, int wait) +@@ -39,6 +39,7 @@ int __sync_filesystem(struct super_block *sb, int wait) sb->s_op->sync_fs(sb, wait); return __sync_blockdev(sb->s_bdev, wait); } @@ -1043,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 bc97a97..895a1ba 100644 +index 0dca42f..7bb20c5 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c -@@ -155,6 +155,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; } @@ -1055,19 +1060,19 @@ index bc97a97..895a1ba 100644 #ifdef CONFIG_LOCK_STAT diff --git a/kernel/task_work.c b/kernel/task_work.c -index 836a72a..aa00d49 100644 +index 0fef395..83fb1ec 100644 --- a/kernel/task_work.c +++ b/kernel/task_work.c -@@ -115,3 +115,4 @@ void task_work_run(void) +@@ -116,3 +116,4 @@ void task_work_run(void) } while (work); } } +EXPORT_SYMBOL_GPL(task_work_run); diff --git a/security/commoncap.c b/security/commoncap.c -index fc46f5b..90543ef 100644 +index 48620c9..4981104 100644 --- a/security/commoncap.c +++ b/security/commoncap.c -@@ -1270,12 +1270,14 @@ int cap_mmap_addr(unsigned long addr) +@@ -1330,12 +1330,14 @@ int cap_mmap_addr(unsigned long addr) } return ret; } @@ -1083,10 +1088,10 @@ index fc46f5b..90543ef 100644 #ifdef CONFIG_SECURITY diff --git a/security/device_cgroup.c b/security/device_cgroup.c -index 03c1652..f88c84b 100644 +index c65b39b..e363d22 100644 --- a/security/device_cgroup.c +++ b/security/device_cgroup.c -@@ -7,6 +7,7 @@ +@@ -8,6 +8,7 @@ #include #include #include @@ -1094,19 +1099,16 @@ index 03c1652..f88c84b 100644 #include #include #include -@@ -849,6 +850,7 @@ int __devcgroup_inode_permission(struct inode *inode, int mask) - return __devcgroup_check_permission(type, imajor(inode), iminor(inode), - access); - } -+EXPORT_SYMBOL_GPL(__devcgroup_inode_permission); +@@ -824,3 +825,4 @@ int __devcgroup_check_permission(short type, u32 major, u32 minor, - int devcgroup_inode_mknod(int mode, dev_t dev) - { + return 0; + } ++EXPORT_SYMBOL_GPL(__devcgroup_check_permission); diff --git a/security/security.c b/security/security.c -index 4bf0f57..b30d1e1 100644 +index 1cd8526..f2e4736 100644 --- a/security/security.c +++ b/security/security.c -@@ -530,6 +530,7 @@ int security_path_rmdir(const struct path *dir, struct dentry *dentry) +@@ -531,6 +531,7 @@ int security_path_rmdir(const struct path *dir, struct dentry *dentry) return 0; return call_int_hook(path_rmdir, 0, dir, dentry); } @@ -1114,7 +1116,7 @@ index 4bf0f57..b30d1e1 100644 int security_path_unlink(const struct path *dir, struct dentry *dentry) { -@@ -546,6 +547,7 @@ int security_path_symlink(const struct path *dir, struct dentry *dentry, +@@ -547,6 +548,7 @@ int security_path_symlink(const struct path *dir, struct dentry *dentry, return 0; return call_int_hook(path_symlink, 0, dir, dentry, old_name); } @@ -1122,7 +1124,7 @@ index 4bf0f57..b30d1e1 100644 int security_path_link(struct dentry *old_dentry, const struct path *new_dir, struct dentry *new_dentry) -@@ -554,6 +556,7 @@ int security_path_link(struct dentry *old_dentry, const struct path *new_dir, +@@ -555,6 +557,7 @@ int security_path_link(struct dentry *old_dentry, const struct path *new_dir, return 0; return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry); } @@ -1130,7 +1132,7 @@ index 4bf0f57..b30d1e1 100644 int security_path_rename(const struct path *old_dir, struct dentry *old_dentry, const struct path *new_dir, struct dentry *new_dentry, -@@ -581,6 +584,7 @@ int security_path_truncate(const struct path *path) +@@ -582,6 +585,7 @@ int security_path_truncate(const struct path *path) return 0; return call_int_hook(path_truncate, 0, path); } @@ -1138,7 +1140,7 @@ index 4bf0f57..b30d1e1 100644 int security_path_chmod(const struct path *path, umode_t mode) { -@@ -588,6 +592,7 @@ int security_path_chmod(const struct path *path, umode_t mode) +@@ -589,6 +593,7 @@ int security_path_chmod(const struct path *path, umode_t mode) return 0; return call_int_hook(path_chmod, 0, path, mode); } @@ -1146,7 +1148,7 @@ index 4bf0f57..b30d1e1 100644 int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid) { -@@ -595,6 +600,7 @@ int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid) +@@ -596,6 +601,7 @@ int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid) return 0; return call_int_hook(path_chown, 0, path, uid, gid); } @@ -1154,7 +1156,7 @@ index 4bf0f57..b30d1e1 100644 int security_path_chroot(const struct path *path) { -@@ -680,6 +686,7 @@ int security_inode_readlink(struct dentry *dentry) +@@ -681,6 +687,7 @@ int security_inode_readlink(struct dentry *dentry) return 0; return call_int_hook(inode_readlink, 0, dentry); } @@ -1162,7 +1164,7 @@ index 4bf0f57..b30d1e1 100644 int security_inode_follow_link(struct dentry *dentry, struct inode *inode, bool rcu) -@@ -695,6 +702,7 @@ int security_inode_permission(struct inode *inode, int mask) +@@ -696,6 +703,7 @@ int security_inode_permission(struct inode *inode, int mask) return 0; return call_int_hook(inode_permission, 0, inode, mask); } @@ -1170,7 +1172,7 @@ index 4bf0f57..b30d1e1 100644 int security_inode_setattr(struct dentry *dentry, struct iattr *attr) { -@@ -866,6 +874,7 @@ int security_file_permission(struct file *file, int mask) +@@ -867,6 +875,7 @@ int security_file_permission(struct file *file, int mask) return fsnotify_perm(file, mask); } @@ -1178,7 +1180,7 @@ index 4bf0f57..b30d1e1 100644 int security_file_alloc(struct file *file) { -@@ -925,6 +934,7 @@ int security_mmap_file(struct file *file, unsigned long prot, +@@ -926,6 +935,7 @@ int security_mmap_file(struct file *file, unsigned long prot, return ret; return ima_file_mmap(file, prot); } @@ -1188,7 +1190,7 @@ index 4bf0f57..b30d1e1 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 2017-07-29 12:14:25.893041746 +0200 ++++ 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 @@ -1242,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 2017-07-29 12:14:25.893041746 +0200 ++++ 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 @@ -1277,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 2017-11-12 22:24:42.257509799 +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 @@ -1452,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 2017-07-29 12:14:25.893041746 +0200 ++++ 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 @@ -1714,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 2017-07-29 12:14:25.893041746 +0200 ++++ 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 @@ -1803,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 2017-07-29 12:14:25.893041746 +0200 ++++ 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 @@ -1920,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 2017-07-29 12:14:25.893041746 +0200 ++++ 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 @@ -1998,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 2017-07-29 12:14:25.893041746 +0200 ++++ 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 @@ -2066,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 2017-11-12 22:24:44.694244127 +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. @@ -2101,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 2017-11-12 22:24:44.694244127 +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 @@ -2207,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 2017-07-29 12:14:25.896375188 +0200 ++++ 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 @@ -2331,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 2017-07-29 12:14:25.896375188 +0200 ++++ 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 @@ -2407,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 2017-07-29 12:14:25.896375188 +0200 ++++ 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 @@ -2507,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 2017-07-29 12:14:25.896375188 +0200 ++++ 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 @@ -2569,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 2017-07-29 12:14:25.896375188 +0200 ++++ 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 @@ -2625,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 2017-07-29 12:14:25.896375188 +0200 ++++ 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 @@ -2676,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 2017-07-29 12:14:25.893041746 +0200 ++++ 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 @@ -3073,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 2017-11-12 22:24:44.697577553 +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 @@ -3137,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 2017-11-12 22:24:44.697577553 +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 @@ -4573,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 2017-11-12 22:24:44.697577553 +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 @@ -4910,8 +4912,9 @@ 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 2017-11-12 22:24:44.704244405 +0100 -@@ -0,0 +1,39 @@ ++++ linux/fs/aufs/conf.mk 2018-04-06 07:48:44.204604724 +0200 +@@ -0,0 +1,40 @@ ++# SPDX-License-Identifier: GPL-2.0 + +AuConfStr = CONFIG_AUFS_FS=${CONFIG_AUFS_FS} + @@ -4953,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 2017-11-12 22:24:44.704244405 +0100 -@@ -0,0 +1,1443 @@ ++++ linux/fs/aufs/cpup.c 2018-04-06 07:48:44.204604724 +0200 +@@ -0,0 +1,1441 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * @@ -5337,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; @@ -5360,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 */ @@ -5430,8 +5433,7 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + if (tsk->flags & PF_KTHREAD) + __fput_sync(file[DST].file); + else { -+ WARN(1, "%pD\nPlease report this warning to aufs-users ML", -+ file[DST].file); ++ /* it happend actually */ + fput(file[DST].file); + /* + * too bad. @@ -5465,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); @@ -5476,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); @@ -6400,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 2017-11-12 22:24:44.704244405 +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 @@ -6503,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 2017-11-12 22:24:44.704244405 +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 @@ -6944,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 2017-07-29 12:14:25.899708630 +0200 ++++ linux/fs/aufs/dbgaufs.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -6996,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 2017-11-12 22:24:42.267510077 +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 @@ -7225,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 2017-07-29 12:14:25.899708630 +0200 ++++ linux/fs/aufs/dcsub.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -7365,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 2017-11-12 22:24:42.267510077 +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 @@ -7464,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++) { @@ -7501,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; @@ -7809,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 2017-07-29 12:14:25.899708630 +0200 ++++ linux/fs/aufs/debug.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,225 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -8038,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 2017-11-12 22:24:44.704244405 +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 @@ -8136,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) @@ -8221,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); @@ -8364,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; @@ -8378,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 @@ -9194,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 2017-11-12 22:24:44.704244405 +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 @@ -9464,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 2017-11-12 22:24:42.267510077 +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 @@ -10021,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 2017-11-12 22:24:44.704244405 +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 @@ -10283,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); @@ -10662,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) @@ -10784,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 2017-11-12 22:24:42.267510077 +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 @@ -10866,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; @@ -10919,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 2017-11-12 22:24:44.704244405 +0100 ++++ linux/fs/aufs/dirren.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,1315 @@ +/* + * Copyright (C) 2017 Junjiro R. Okajima @@ -11924,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)) { @@ -12238,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 2017-11-12 22:24:44.704244405 +0100 ++++ linux/fs/aufs/dirren.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2017 Junjiro R. Okajima @@ -12381,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 2017-11-12 22:24:44.704244405 +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 @@ -12754,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 2017-11-12 22:24:44.704244405 +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 @@ -12832,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 2017-11-12 22:24:42.267510077 +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 @@ -13672,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 2017-07-29 12:14:25.903042072 +0200 -@@ -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 + * @@ -13845,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; + @@ -13857,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; +} + @@ -14102,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 2017-11-12 22:24:44.704244405 +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 @@ -14962,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 2017-11-12 22:24:44.704244405 +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 @@ -15058,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 @@ -15306,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 2017-11-12 22:24:42.270843503 +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 @@ -15458,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 2017-11-12 22:24:44.704244405 +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 @@ -16279,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 2017-07-29 12:14:25.903042072 +0200 ++++ linux/fs/aufs/fstype.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,400 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -16670,7 +16670,7 @@ diff -urN /usr/share/empty/fs/aufs/fstype.h linux/fs/aufs/fstype.h + +/* + * test if the @inode is nfs with 'noacl' option -+ * NFS always sets MS_POSIXACL regardless its mount option 'noacl.' ++ * NFS always sets SB_POSIXACL regardless its mount option 'noacl.' + */ +static inline int au_test_nfs_noacl(struct inode *inode) +{ @@ -16683,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 2017-11-12 22:24:44.707577830 +0100 ++++ linux/fs/aufs/hbl.h 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2017 Junjiro R. Okajima @@ -16751,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 2017-11-12 22:24:44.707577830 +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 @@ -17044,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 2017-07-29 12:14:25.903042072 +0200 ++++ linux/fs/aufs/hfsplus.c 2018-04-06 07:48:44.204604724 +0200 @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2010-2017 Junjiro R. Okajima @@ -17104,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 2017-11-12 22:24:44.707577830 +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 @@ -17430,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 */ @@ -17456,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 */ @@ -17827,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 2017-11-12 22:24:42.270843503 +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 @@ -18116,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 2017-11-12 22:24:42.270843503 +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 @@ -18155,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) @@ -18647,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 2017-11-12 22:24:44.707577830 +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 @@ -19331,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 @@ -19346,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 2017-07-29 12:14:25.903042072 +0200 ++++ linux/fs/aufs/ioctl.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,219 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -19569,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 2017-11-12 22:24:42.270843503 +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 @@ -19631,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 */ + } @@ -20344,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)); @@ -20493,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 2017-11-12 22:24:44.707577830 +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 @@ -20543,7 +20543,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c + * - skip the lower fs test in the case of write to ro branch. + * - nfs dir permission write check is optimized, but a policy for + * link/rename requires a real check. -+ * - nfs always sets MS_POSIXACL regardless its mount option 'noacl.' ++ * - nfs always sets SB_POSIXACL regardless its mount option 'noacl.' + * in this case, generic_permission() returns -EOPNOTSUPP. + */ + if ((write_mask && !au_br_writable(brperm)) @@ -20929,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); @@ -21316,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); @@ -21956,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 2017-11-12 22:24:42.270843503 +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 @@ -22229,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); +} + +/* @@ -22471,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 2017-11-12 22:24:44.707577830 +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 @@ -23226,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); @@ -23236,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); @@ -23249,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); @@ -23721,8 +23721,9 @@ 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 2017-11-12 22:24:44.697577553 +0100 -@@ -0,0 +1,198 @@ ++++ 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 + tristate "Aufs (Advanced multi layered unification filesystem) support" + help @@ -23923,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 2017-11-12 22:24:42.270843503 +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 @@ -24074,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 2017-07-29 12:14:25.903042072 +0200 ++++ linux/fs/aufs/loop.h 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -24130,8 +24131,9 @@ 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 2017-07-29 12:14:25.903042072 +0200 -@@ -0,0 +1,30 @@ ++++ linux/fs/aufs/magic.mk 2018-04-06 07:48:44.207938097 +0200 +@@ -0,0 +1,31 @@ ++# SPDX-License-Identifier: GPL-2.0 + +# defined in ${srctree}/fs/fuse/inode.c +# tristate @@ -24164,8 +24166,9 @@ 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 2017-11-12 22:24:44.697577553 +0100 -@@ -0,0 +1,45 @@ ++++ linux/fs/aufs/Makefile 2018-04-06 07:48:44.201271351 +0200 +@@ -0,0 +1,46 @@ ++# SPDX-License-Identifier: GPL-2.0 + +include ${src}/magic.mk +ifeq (${CONFIG_AUFS_FS},m) @@ -24213,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 2017-11-12 22:24:44.707577830 +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 @@ -24483,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 2017-11-12 22:24:42.270843503 +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 @@ -24588,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 2017-11-12 22:24:44.707577830 +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 @@ -25296,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 2017-11-12 22:24:44.707577830 +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 @@ -26101,7 +26104,7 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c + add->perm = AuBrPerm_RO; + if (au_test_fs_rr(add->path.dentry->d_sb)) + add->perm = AuBrPerm_RR; -+ else if (!bindex && !(sb_flags & MS_RDONLY)) ++ else if (!bindex && !(sb_flags & SB_RDONLY)) + add->perm = AuBrPerm_RW; + } + opt->type = Opt_add; @@ -26777,10 +26780,10 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c + break; + + case Opt_acl: -+ sb->s_flags |= MS_POSIXACL; ++ sb->s_flags |= SB_POSIXACL; + break; + case Opt_noacl: -+ sb->s_flags &= ~MS_POSIXACL; ++ sb->s_flags &= ~SB_POSIXACL; + break; + + default: @@ -26907,7 +26910,7 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c + sbinfo = au_sbi(sb); + AuDebugOn(!(sbinfo->si_mntflags & AuOptMask_UDBA)); + -+ if (!(sb_flags & MS_RDONLY)) { ++ if (!(sb_flags & SB_RDONLY)) { + if (unlikely(!au_br_writable(au_sbr_perm(sb, 0)))) + pr_warn("first branch should be rw\n"); + if (unlikely(au_opt_test(sbinfo->si_mntflags, SHWH))) @@ -26940,7 +26943,7 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c + br->br_perm &= ~AuBrAttr_ICEX; +#if 0 + if ((br->br_perm & AuBrAttr_ICEX_SEC) -+ && (au_br_sb(br)->s_flags & MS_NOSEC)) ++ && (au_br_sb(br)->s_flags & SB_NOSEC)) + br->br_perm &= ~AuBrAttr_ICEX_SEC; +#endif + @@ -27191,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 2017-11-12 22:24:44.707577830 +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 @@ -27419,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 2017-11-12 22:24:44.707577830 +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 @@ -27640,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; @@ -27938,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 2017-11-12 22:24:42.274176929 +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 @@ -27964,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); + @@ -27989,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 2017-11-12 22:24:42.274176929 +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 @@ -28032,7 +28035,7 @@ diff -urN /usr/share/empty/fs/aufs/posix_acl.c linux/fs/aufs/posix_acl.c + sb = inode->i_sb; + si_read_lock(sb, AuLock_FLUSH); + ii_read_lock_child(inode); -+ if (!(sb->s_flags & MS_POSIXACL)) ++ if (!(sb->s_flags & SB_POSIXACL)) + goto out; + + bindex = au_ibtop(inode); @@ -28100,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 2017-11-12 22:24:44.707577830 +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 @@ -28274,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 2017-11-12 22:24:42.274176929 +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 @@ -28659,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 2017-11-12 22:24:44.707577830 +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 @@ -28735,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 2017-11-12 22:24:44.707577830 +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 @@ -28899,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; +} + @@ -29043,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 2017-11-12 22:24:44.707577830 +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 + * @@ -29082,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; + } @@ -29120,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); @@ -29290,8 +29293,12 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c +} while (0) + + sb = dentry->d_sb; -+ if (sb->s_flags & MS_POSIXACL) ++ 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); @@ -29970,7 +29977,8 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c + sbinfo = au_sbi(sb); + + /* all timestamps always follow the ones on the branch */ -+ sb->s_flags |= MS_NOATIME | MS_NODIRATIME; ++ 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; @@ -30093,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 2017-11-12 22:24:44.707577830 +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 @@ -30723,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 2017-07-29 12:14:25.906375514 +0200 ++++ linux/fs/aufs/sysaufs.c 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -30831,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 2017-07-29 12:14:25.906375514 +0200 ++++ linux/fs/aufs/sysaufs.h 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -30936,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 2017-11-12 22:24:42.274176929 +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 @@ -31316,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 2017-11-12 22:24:44.707577830 +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 @@ -31479,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 2017-11-12 22:24:42.274176929 +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 @@ -32138,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); @@ -32154,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) @@ -32251,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) @@ -32324,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; +} + @@ -32375,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 2017-11-12 22:24:44.707577830 +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 @@ -33273,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 2017-11-12 22:24:44.707577830 +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 + * @@ -33302,6 +33310,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h +#ifdef __KERNEL__ + +#include ++#include +#include +#include +#include @@ -33331,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) @@ -33637,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 2017-11-12 22:24:42.274176929 +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 @@ -34471,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 2017-11-12 22:24:42.274176929 +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 @@ -35536,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 2017-09-05 10:42:11.058755349 +0200 ++++ linux/fs/aufs/whout.h 2018-04-06 07:48:44.207938097 +0200 @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima @@ -35625,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 2017-11-12 22:24:44.707577830 +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 @@ -36019,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 2017-11-12 22:24:44.707577830 +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 @@ -36116,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 2017-11-12 22:24:44.707577830 +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 @@ -36236,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; + @@ -36475,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 2017-11-12 22:24:44.710911257 +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 + * @@ -36502,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) @@ -36512,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 */ @@ -36530,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, @@ -37897,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 2017-11-12 22:24:44.710911257 +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 @@ -37940,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-20171106" ++#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') @@ -38346,13 +38399,14 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin +#define AUFS_CTL_FHSM_FD _IOW(AuCtlType, AuCtl_FHSM_FD, int) + +#endif /* __AUFS_TYPE_H__ */ +SPDX-License-Identifier: GPL-2.0 aufs4.x-rcN loopback patch diff --git a/drivers/block/loop.c b/drivers/block/loop.c -index d44de9d..095672b 100644 +index 962b2d6..d17f695 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c -@@ -595,6 +595,15 @@ static inline void loop_update_dio(struct loop_device *lo) +@@ -600,6 +600,15 @@ static inline void loop_update_dio(struct loop_device *lo) lo->use_dio); } @@ -38368,7 +38422,7 @@ index d44de9d..095672b 100644 static void loop_reread_partitions(struct loop_device *lo, struct block_device *bdev) { -@@ -629,6 +638,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev, +@@ -634,6 +643,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev, unsigned int arg) { struct file *file, *old_file; @@ -38376,7 +38430,7 @@ index d44de9d..095672b 100644 struct inode *inode; int error; -@@ -645,9 +655,16 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev, +@@ -650,9 +660,16 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev, file = fget(arg); if (!file) goto out; @@ -38393,7 +38447,7 @@ index d44de9d..095672b 100644 error = -EINVAL; -@@ -662,6 +679,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev, +@@ -667,6 +684,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev, blk_mq_freeze_queue(lo->lo_queue); mapping_set_gfp_mask(old_file->f_mapping, lo->old_gfp_mask); lo->lo_backing_file = file; @@ -38401,7 +38455,7 @@ index d44de9d..095672b 100644 lo->old_gfp_mask = mapping_gfp_mask(file->f_mapping); mapping_set_gfp_mask(file->f_mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS)); -@@ -669,12 +687,16 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev, +@@ -674,12 +692,16 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev, blk_mq_unfreeze_queue(lo->lo_queue); fput(old_file); @@ -38418,7 +38472,7 @@ index d44de9d..095672b 100644 out: return error; } -@@ -868,7 +890,7 @@ static int loop_prepare_queue(struct loop_device *lo) +@@ -873,7 +895,7 @@ static int loop_prepare_queue(struct loop_device *lo) static int loop_set_fd(struct loop_device *lo, fmode_t mode, struct block_device *bdev, unsigned int arg) { @@ -38427,7 +38481,7 @@ index d44de9d..095672b 100644 struct inode *inode; struct address_space *mapping; int lo_flags = 0; -@@ -882,6 +904,12 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode, +@@ -887,6 +909,12 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode, file = fget(arg); if (!file) goto out; @@ -38440,7 +38494,7 @@ index d44de9d..095672b 100644 error = -EBUSY; if (lo->lo_state != Lo_unbound) -@@ -930,6 +958,7 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode, +@@ -935,6 +963,7 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode, lo->lo_device = bdev; lo->lo_flags = lo_flags; lo->lo_backing_file = file; @@ -38448,7 +38502,7 @@ index d44de9d..095672b 100644 lo->transfer = NULL; lo->ioctl = NULL; lo->lo_sizelimit = 0; -@@ -963,6 +992,8 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode, +@@ -968,6 +997,8 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode, out_putf: fput(file); @@ -38457,7 +38511,7 @@ index d44de9d..095672b 100644 out: /* This is safe: open() is still holding a reference. */ module_put(THIS_MODULE); -@@ -1009,6 +1040,7 @@ loop_init_xfer(struct loop_device *lo, struct loop_func_table *xfer, +@@ -1014,6 +1045,7 @@ loop_init_xfer(struct loop_device *lo, struct loop_func_table *xfer, static int loop_clr_fd(struct loop_device *lo) { struct file *filp = lo->lo_backing_file; @@ -38465,7 +38519,7 @@ index d44de9d..095672b 100644 gfp_t gfp = lo->old_gfp_mask; struct block_device *bdev = lo->lo_device; -@@ -1040,6 +1072,7 @@ static int loop_clr_fd(struct loop_device *lo) +@@ -1045,6 +1077,7 @@ static int loop_clr_fd(struct loop_device *lo) spin_lock_irq(&lo->lo_lock); lo->lo_state = Lo_rundown; lo->lo_backing_file = NULL; @@ -38473,7 +38527,7 @@ index d44de9d..095672b 100644 spin_unlock_irq(&lo->lo_lock); loop_release_xfer(lo); -@@ -1087,6 +1120,8 @@ static int loop_clr_fd(struct loop_device *lo) +@@ -1092,6 +1125,8 @@ static int loop_clr_fd(struct loop_device *lo) * bd_mutex which is usually taken before lo_ctl_mutex. */ fput(filp); @@ -38483,7 +38537,7 @@ index d44de9d..095672b 100644 } diff --git a/drivers/block/loop.h b/drivers/block/loop.h -index 1f39567..128b137 100644 +index 0f45416..101f193 100644 --- a/drivers/block/loop.h +++ b/drivers/block/loop.h @@ -46,7 +46,7 @@ struct loop_device { @@ -38496,10 +38550,10 @@ index 1f39567..128b137 100644 void *key_data; diff --git a/fs/aufs/f_op.c b/fs/aufs/f_op.c -index 8aff060..e853272 100644 +index 0d4ea929..af293c2 100644 --- a/fs/aufs/f_op.c +++ b/fs/aufs/f_op.c -@@ -357,7 +357,7 @@ static ssize_t aufs_read_iter(struct kiocb *kio, struct iov_iter *iov_iter) +@@ -358,7 +358,7 @@ static ssize_t aufs_read_iter(struct kiocb *kio, struct iov_iter *iov_iter) if (IS_ERR(h_file)) goto out; @@ -38509,10 +38563,10 @@ index 8aff060..e853272 100644 if (file->f_mapping != h_file->f_mapping) { file->f_mapping = h_file->f_mapping; diff --git a/fs/aufs/loop.c b/fs/aufs/loop.c -index e35f015..b37f1ae 100644 +index 3b217c2..0f5ab22 100644 --- a/fs/aufs/loop.c +++ b/fs/aufs/loop.c -@@ -132,3 +132,19 @@ void au_loopback_fin(void) +@@ -133,3 +133,19 @@ void au_loopback_fin(void) symbol_put(loop_backing_file); kfree(au_warn_loopback_array); } @@ -38533,10 +38587,10 @@ index e35f015..b37f1ae 100644 + return f; +} diff --git a/fs/aufs/loop.h b/fs/aufs/loop.h -index e2df495..36e5052 100644 +index 7d7bf34..ba7c188 100644 --- a/fs/aufs/loop.h +++ b/fs/aufs/loop.h -@@ -25,7 +25,11 @@ void au_warn_loopback(struct super_block *h_sb); +@@ -26,7 +26,11 @@ void au_warn_loopback(struct super_block *h_sb); int au_loopback_init(void); void au_loopback_fin(void); @@ -38548,7 +38602,7 @@ index e2df495..36e5052 100644 AuStubInt0(au_test_loopback_overlap, struct super_block *sb, struct dentry *h_adding) AuStubInt0(au_test_loopback_kthread, void) -@@ -33,6 +37,8 @@ AuStubVoid(au_warn_loopback, struct super_block *h_sb) +@@ -34,6 +38,8 @@ AuStubVoid(au_warn_loopback, struct super_block *h_sb) AuStubInt0(au_loopback_init, void) AuStubVoid(au_loopback_fin, void) @@ -38558,10 +38612,10 @@ index e2df495..36e5052 100644 #endif /* __KERNEL__ */ diff --git a/fs/aufs/super.c b/fs/aufs/super.c -index 3c300125..128d790 100644 +index eef60a6..e03a658 100644 --- a/fs/aufs/super.c +++ b/fs/aufs/super.c -@@ -838,7 +838,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, @@ -38574,10 +38628,10 @@ index 3c300125..128d790 100644 /* ---------------------------------------------------------------------- */ diff --git a/include/linux/fs.h b/include/linux/fs.h -index 8ab6566..8dbaa52 100644 +index 383ab06..e899b15 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h -@@ -1838,6 +1838,10 @@ struct super_operations { +@@ -1849,6 +1849,10 @@ struct super_operations { struct shrink_control *); long (*free_cached_objects)(struct super_block *, struct shrink_control *);