[packages/kernel/LINUX_5_10] Up to 5.10.83.

arekm arekm at pld-linux.org
Fri Dec 3 15:40:34 CET 2021


commit 590de76451dee65b7ba9aa9d6267eeba1b08a24c
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Fri Dec 3 15:40:18 2021 +0100

    Up to 5.10.83.

 kernel-aufs5.patch | 841 +++++++++++++++++++++++++++--------------------------
 kernel.spec        |   4 +-
 update-source.sh   |  18 ++
 3 files changed, 446 insertions(+), 417 deletions(-)
---
diff --git a/kernel.spec b/kernel.spec
index e2791df3..72e101c6 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -73,7 +73,7 @@
 
 %define		rel		1
 %define		basever		5.10
-%define		postver		.79
+%define		postver		.83
 
 # define this to '-%{basever}' for longterm branch
 %define		versuffix	-%{basever}
@@ -127,7 +127,7 @@ Source0:	https://www.kernel.org/pub/linux/kernel/v5.x/linux-%{basever}.tar.xz
 # Source0-md5:	753adc474bf799d569dec4f165ed92c3
 %if "%{postver}" != ".0"
 Patch0:		https://www.kernel.org/pub/linux/kernel/v5.x/patch-%{version}.xz
-# Patch0-md5:	c343df36d1d060993a114fac06963707
+# Patch0-md5:	4e840f2c7b667eadeab6fbb98d00276f
 %endif
 Source1:	kernel.sysconfig
 
diff --git a/kernel-aufs5.patch b/kernel-aufs5.patch
index 6e771072..f93efda5 100644
--- a/kernel-aufs5.patch
+++ b/kernel-aufs5.patch
@@ -1,8 +1,8 @@
 SPDX-License-Identifier: GPL-2.0
-aufs5.10 kbuild patch
+aufs5.10.82 kbuild patch
 
 diff --git a/fs/Kconfig b/fs/Kconfig
-index aa4c122823018..b29bad13b2491 100644
+index da524c4d7b7e0..50ab89368c2b5 100644
 --- a/fs/Kconfig
 +++ b/fs/Kconfig
 @@ -288,6 +288,7 @@ source "fs/sysv/Kconfig"
@@ -23,10 +23,10 @@ index 999d1a23f036c..0cd76857ca764 100644
  obj-$(CONFIG_ZONEFS_FS)		+= zonefs/
 +obj-$(CONFIG_AUFS_FS)           += aufs/
 SPDX-License-Identifier: GPL-2.0
-aufs5.10 base patch
+aufs5.10.82 base patch
 
 diff --git a/MAINTAINERS b/MAINTAINERS
-index 281de213ef478..ffc3c1c539ea2 100644
+index 4fef10dd29753..e013880d69f33 100644
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
 @@ -3009,6 +3009,19 @@ F:	include/linux/audit.h
@@ -50,10 +50,10 @@ index 281de213ef478..ffc3c1c539ea2 100644
  M:	Miguel Ojeda Sandonis <miguel.ojeda.sandonis at gmail.com>
  S:	Maintained
 diff --git a/drivers/block/loop.c b/drivers/block/loop.c
-index a58084c2ed7ce..7be7ca3f54547 100644
+index ee537a9f1d1a4..d09b1ef4a2b56 100644
 --- a/drivers/block/loop.c
 +++ b/drivers/block/loop.c
-@@ -765,6 +765,24 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+@@ -752,6 +752,24 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
  	return error;
  }
  
@@ -92,7 +92,7 @@ index ea0485861d937..ddca6240e0db4 100644
  {
  	struct dentry *this_parent;
 diff --git a/fs/fcntl.c b/fs/fcntl.c
-index 19ac5baad50fd..073ca6af500f3 100644
+index 71b43538fa44c..7cd57fb4e8646 100644
 --- a/fs/fcntl.c
 +++ b/fs/fcntl.c
 @@ -32,7 +32,7 @@
@@ -113,21 +113,8 @@ index 19ac5baad50fd..073ca6af500f3 100644
  	if (error)
  		return error;
  
-diff --git a/fs/inode.c b/fs/inode.c
-index 9d78c37b00b81..e7f0c614a58f3 100644
---- a/fs/inode.c
-+++ b/fs/inode.c
-@@ -1770,7 +1770,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.
-  */
--static int update_time(struct inode *inode, struct timespec64 *time, int flags)
-+int update_time(struct inode *inode, struct timespec64 *time, int flags)
- {
- 	if (inode->i_op->update_time)
- 		return inode->i_op->update_time(inode, time, flags);
 diff --git a/fs/namespace.c b/fs/namespace.c
-index cebaa3e817940..451dee24a546a 100644
+index 046b084136c51..a256f0f9c6c09 100644
 --- a/fs/namespace.c
 +++ b/fs/namespace.c
 @@ -792,6 +792,12 @@ static inline int check_mnt(struct mount *mnt)
@@ -185,7 +172,7 @@ index 1373a610dc784..b7b5a0a0df6ff 100644
  	if (wait)
  		sync_inodes_sb(sb);
 diff --git a/include/linux/fs.h b/include/linux/fs.h
-index 8667d0cdc71e7..837dd6e727e45 100644
+index 42d246a942283..2cc1a02e444c4 100644
 --- a/include/linux/fs.h
 +++ b/include/linux/fs.h
 @@ -1332,6 +1332,7 @@ extern void fasync_free(struct fasync_struct *);
@@ -204,7 +191,7 @@ index 8667d0cdc71e7..837dd6e727e45 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);
-@@ -2328,6 +2330,7 @@ extern int current_umask(void);
+@@ -2330,6 +2332,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 timespec64 *, int);
@@ -212,7 +199,7 @@ index 8667d0cdc71e7..837dd6e727e45 100644
  
  /* /sys/fs */
  extern struct kobject *fs_kobj;
-@@ -2564,6 +2567,7 @@ static inline bool sb_is_blkdev_sb(struct super_block *sb)
+@@ -2566,6 +2569,7 @@ static inline bool sb_is_blkdev_sb(struct super_block *sb)
  }
  
  void emergency_thaw_all(void);
@@ -221,10 +208,10 @@ index 8667d0cdc71e7..837dd6e727e45 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 f5594879175a6..93bb861981675 100644
+index 20b6797babe2c..7888c04c3ffaf 100644
 --- a/include/linux/lockdep.h
 +++ b/include/linux/lockdep.h
-@@ -241,6 +241,8 @@ static inline int lockdep_match_key(struct lockdep_map *lock,
+@@ -248,6 +248,8 @@ static inline int lockdep_match_key(struct lockdep_map *lock,
  	return lock->key == key;
  }
  
@@ -233,7 +220,7 @@ index f5594879175a6..93bb861981675 100644
  /*
   * Acquire a lock.
   *
-@@ -375,6 +377,7 @@ static inline void lockdep_unregister_key(struct lock_class_key *key)
+@@ -384,6 +386,7 @@ static inline void lockdep_unregister_key(struct lock_class_key *key)
  
  #define lockdep_depth(tsk)	(0)
  
@@ -277,7 +264,7 @@ index a55179fd60fc3..8e21c53cf8831 100644
 +			 unsigned int flags);
  #endif
 diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
-index c1418b47f625a..7f006a47790cf 100644
+index 1f6a2f1226fa9..4550f7a021178 100644
 --- a/kernel/locking/lockdep.c
 +++ b/kernel/locking/lockdep.c
 @@ -188,7 +188,7 @@ static
@@ -298,10 +285,10 @@ index c1418b47f625a..7f006a47790cf 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
-aufs5.10 mmap patch
+aufs5.10.82 mmap patch
 
 diff --git a/fs/proc/base.c b/fs/proc/base.c
-index b362523a9829a..669448bb8a738 100644
+index 5d52aea8d7e7d..2fbf0ad30eaa9 100644
 --- a/fs/proc/base.c
 +++ b/fs/proc/base.c
 @@ -2184,7 +2184,7 @@ static int map_files_get_link(struct dentry *dentry, struct path *path)
@@ -330,7 +317,7 @@ index 13452b32e2bd5..38acccfef9d49 100644
  		ino = inode->i_ino;
  	}
 diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
-index ee5a235b30562..80a46dcede7be 100644
+index 3931f60e421f7..e5bf27de3f0bc 100644
 --- a/fs/proc/task_mmu.c
 +++ b/fs/proc/task_mmu.c
 @@ -280,7 +280,10 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
@@ -345,7 +332,7 @@ index ee5a235b30562..80a46dcede7be 100644
  		dev = inode->i_sb->s_dev;
  		ino = inode->i_ino;
  		pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
-@@ -1855,7 +1858,7 @@ static int show_numa_map(struct seq_file *m, void *v)
+@@ -1863,7 +1866,7 @@ static int show_numa_map(struct seq_file *m, void *v)
  	struct proc_maps_private *proc_priv = &numa_priv->proc_maps;
  	struct vm_area_struct *vma = v;
  	struct numa_maps *md = &numa_priv->md;
@@ -371,10 +358,10 @@ index a6d21fc0033c6..02c2de31196e0 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 db6ae4d3fb4ed..1a632192d9d9f 100644
+index 289c26f055cdd..63f3dca76b2eb 100644
 --- a/include/linux/mm.h
 +++ b/include/linux/mm.h
-@@ -1712,6 +1712,28 @@ static inline void unmap_shared_mapping_range(struct address_space *mapping,
+@@ -1730,6 +1730,28 @@ static inline void unmap_shared_mapping_range(struct address_space *mapping,
  	unmap_mapping_range(mapping, holebegin, holelen, 0);
  }
  
@@ -404,10 +391,10 @@ index db6ae4d3fb4ed..1a632192d9d9f 100644
  		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 5a9238f6caad9..ad387c3cb14fc 100644
+index 4eb38918da8f8..facc9741d5701 100644
 --- a/include/linux/mm_types.h
 +++ b/include/linux/mm_types.h
-@@ -280,6 +280,7 @@ struct vm_region {
+@@ -282,6 +282,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 */
@@ -415,7 +402,7 @@ index 5a9238f6caad9..ad387c3cb14fc 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
-@@ -359,6 +360,7 @@ struct vm_area_struct {
+@@ -361,6 +362,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). */
@@ -424,7 +411,7 @@ index 5a9238f6caad9..ad387c3cb14fc 100644
  
  #ifdef CONFIG_SWAP
 diff --git a/kernel/fork.c b/kernel/fork.c
-index 6d266388d3804..dd7f13c3bee7d 100644
+index e465903abed9e..d1f00eaf675af 100644
 --- a/kernel/fork.c
 +++ b/kernel/fork.c
 @@ -554,7 +554,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
@@ -450,10 +437,10 @@ index d73aed0fc99c1..93076a66ad6a5 100644
  # Give 'page_alloc' its own module-parameter namespace
  page-alloc-y := page_alloc.o
 diff --git a/mm/filemap.c b/mm/filemap.c
-index 0b2067b3c3283..3334207431c79 100644
+index 125b69f59caad..00bfb23c599fd 100644
 --- a/mm/filemap.c
 +++ b/mm/filemap.c
-@@ -2909,7 +2909,7 @@ vm_fault_t filemap_page_mkwrite(struct vm_fault *vmf)
+@@ -2913,7 +2913,7 @@ vm_fault_t filemap_page_mkwrite(struct vm_fault *vmf)
  	vm_fault_t ret = VM_FAULT_LOCKED;
  
  	sb_start_pagefault(inode->i_sb);
@@ -605,7 +592,7 @@ index 0faf39b32cdb9..78ecad7204c86 100644
  
 diff --git a/mm/prfile.c b/mm/prfile.c
 new file mode 100644
-index 0000000000000..00d51187c3250
+index 0000000000000..511543ab1b418
 --- /dev/null
 +++ b/mm/prfile.c
 @@ -0,0 +1,86 @@
@@ -617,7 +604,7 @@ index 0000000000000..00d51187c3250
 + *
 + * See Documentation/filesystems/aufs/design/06mmap.txt
 + *
-+ * Copyright (c) 2014-2020 Junjro R. Okajima
++ * Copyright (c) 2014-2021 Junjro R. Okajima
 + * Copyright (c) 2014 Ian Campbell
 + */
 +
@@ -696,7 +683,7 @@ index 0000000000000..00d51187c3250
 +}
 +#endif /* !CONFIG_MMU */
 SPDX-License-Identifier: GPL-2.0
-aufs5.10 standalone patch
+aufs5.10.82 standalone patch
 
 diff --git a/fs/dcache.c b/fs/dcache.c
 index ddca6240e0db4..30dec552278dc 100644
@@ -719,7 +706,7 @@ index ddca6240e0db4..30dec552278dc 100644
  /**
   * d_ancestor - search for an ancestor
 diff --git a/fs/exec.c b/fs/exec.c
-index 547a2390baf54..18d51d0face68 100644
+index ca89e0e3ef10f..666565bb411f6 100644
 --- a/fs/exec.c
 +++ b/fs/exec.c
 @@ -113,6 +113,7 @@ bool path_noexec(const struct path *path)
@@ -731,7 +718,7 @@ index 547a2390baf54..18d51d0face68 100644
  #ifdef CONFIG_USELIB
  /*
 diff --git a/fs/fcntl.c b/fs/fcntl.c
-index 073ca6af500f3..b18afdf81e762 100644
+index 7cd57fb4e8646..96bc0e48b7467 100644
 --- a/fs/fcntl.c
 +++ b/fs/fcntl.c
 @@ -85,6 +85,7 @@ int setfl(int fd, struct file *filp, unsigned long arg)
@@ -762,20 +749,8 @@ index 709ada3151da5..27a3e3c9f2a82 100644
  
  void __init files_init(void)
  {
-diff --git a/fs/inode.c b/fs/inode.c
-index e7f0c614a58f3..6fe0a92a4c93c 100644
---- a/fs/inode.c
-+++ b/fs/inode.c
-@@ -1776,6 +1776,7 @@ int update_time(struct inode *inode, struct timespec64 *time, int flags)
- 		return inode->i_op->update_time(inode, time, flags);
- 	return generic_update_time(inode, time, flags);
- }
-+EXPORT_SYMBOL_GPL(update_time);
- 
- /**
-  *	touch_atime	-	update the access time
 diff --git a/fs/namespace.c b/fs/namespace.c
-index 451dee24a546a..38078cbede431 100644
+index a256f0f9c6c09..5d6b3e723e913 100644
 --- a/fs/namespace.c
 +++ b/fs/namespace.c
 @@ -431,6 +431,7 @@ void __mnt_drop_write(struct vfsmount *mnt)
@@ -794,7 +769,7 @@ index 451dee24a546a..38078cbede431 100644
  
  /*
   * vfsmount lock must be held for write
-@@ -1961,6 +1963,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
+@@ -1998,6 +2000,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
  	}
  	return 0;
  }
@@ -815,7 +790,7 @@ index a4a4b1c64d32a..86dc2efb1850c 100644
  /*
   * Drop a reference to a group.  Free it if it's through.
 diff --git a/fs/open.c b/fs/open.c
-index 9af548fb841b0..2ff09b709f7bf 100644
+index 3aaaad47d9cac..60ae17e35e125 100644
 --- a/fs/open.c
 +++ b/fs/open.c
 @@ -65,6 +65,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
@@ -891,7 +866,7 @@ index cd7a563e8bcd4..7d989d57b0f0d 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 7f006a47790cf..be002c3a30833 100644
+index 4550f7a021178..efc579b9a36d9 100644
 --- a/kernel/locking/lockdep.c
 +++ b/kernel/locking/lockdep.c
 @@ -209,6 +209,7 @@ inline struct lock_class *lockdep_hlock_class(struct held_lock *hlock)
@@ -912,10 +887,10 @@ index 8d6e1217c451c..0e73637adda86 100644
  }
 +EXPORT_SYMBOL_GPL(task_work_run);
 diff --git a/security/security.c b/security/security.c
-index a28045dc9e7f6..310cf38efeec7 100644
+index a864ff824dd3b..d919d763ade5a 100644
 --- a/security/security.c
 +++ b/security/security.c
-@@ -1093,6 +1093,7 @@ int security_path_rmdir(const struct path *dir, struct dentry *dentry)
+@@ -1094,6 +1094,7 @@ int security_path_rmdir(const struct path *dir, struct dentry *dentry)
  		return 0;
  	return call_int_hook(path_rmdir, 0, dir, dentry);
  }
@@ -923,7 +898,7 @@ index a28045dc9e7f6..310cf38efeec7 100644
  
  int security_path_unlink(const struct path *dir, struct dentry *dentry)
  {
-@@ -1109,6 +1110,7 @@ int security_path_symlink(const struct path *dir, struct dentry *dentry,
+@@ -1110,6 +1111,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);
  }
@@ -931,7 +906,7 @@ index a28045dc9e7f6..310cf38efeec7 100644
  
  int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
  		       struct dentry *new_dentry)
-@@ -1117,6 +1119,7 @@ int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
+@@ -1118,6 +1120,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);
  }
@@ -939,7 +914,7 @@ index a28045dc9e7f6..310cf38efeec7 100644
  
  int security_path_rename(const struct path *old_dir, struct dentry *old_dentry,
  			 const struct path *new_dir, struct dentry *new_dentry,
-@@ -1144,6 +1147,7 @@ int security_path_truncate(const struct path *path)
+@@ -1145,6 +1148,7 @@ int security_path_truncate(const struct path *path)
  		return 0;
  	return call_int_hook(path_truncate, 0, path);
  }
@@ -947,7 +922,7 @@ index a28045dc9e7f6..310cf38efeec7 100644
  
  int security_path_chmod(const struct path *path, umode_t mode)
  {
-@@ -1151,6 +1155,7 @@ int security_path_chmod(const struct path *path, umode_t mode)
+@@ -1152,6 +1156,7 @@ int security_path_chmod(const struct path *path, umode_t mode)
  		return 0;
  	return call_int_hook(path_chmod, 0, path, mode);
  }
@@ -955,7 +930,7 @@ index a28045dc9e7f6..310cf38efeec7 100644
  
  int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
  {
-@@ -1158,6 +1163,7 @@ int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
+@@ -1159,6 +1164,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);
  }
@@ -963,7 +938,7 @@ index a28045dc9e7f6..310cf38efeec7 100644
  
  int security_path_chroot(const struct path *path)
  {
-@@ -1258,6 +1264,7 @@ int security_inode_permission(struct inode *inode, int mask)
+@@ -1259,6 +1265,7 @@ int security_inode_permission(struct inode *inode, int mask)
  		return 0;
  	return call_int_hook(inode_permission, 0, inode, mask);
  }
@@ -971,7 +946,7 @@ index a28045dc9e7f6..310cf38efeec7 100644
  
  int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
  {
-@@ -1450,6 +1457,7 @@ int security_file_permission(struct file *file, int mask)
+@@ -1451,6 +1458,7 @@ int security_file_permission(struct file *file, int mask)
  
  	return fsnotify_perm(file, mask);
  }
@@ -981,7 +956,7 @@ index a28045dc9e7f6..310cf38efeec7 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	2021-02-22 22:51:59.054745247 +0100
++++ linux/Documentation/ABI/testing/debugfs-aufs	2021-12-03 15:38:59.926647310 +0100
 @@ -0,0 +1,55 @@
 +What:		/debug/aufs/si_<id>/
 +Date:		March 2009
@@ -1013,7 +988,7 @@ diff -urN /usr/share/empty/Documentation/ABI/testing/debugfs-aufs linux/Document
 +		When the aufs mount option 'noxino' is specified, it
 +		will be empty. About XINO files, see the aufs manual.
 +
-+What:		/debug/aufs/si_<id>/xi0, xi1 ... xiN and xiN-N
++What:		/debug/aufs/si_<id>/xi<branch-index>
 +Date:		March 2009
 +Contact:	J. R. Okajima <hooanon05g at gmail.com>
 +Description:
@@ -1040,7 +1015,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	2021-02-22 22:51:59.054745247 +0100
++++ linux/Documentation/ABI/testing/sysfs-aufs	2021-12-03 15:38:59.926647310 +0100
 @@ -0,0 +1,31 @@
 +What:		/sys/fs/aufs/si_<id>/
 +Date:		March 2009
@@ -1050,14 +1025,14 @@ diff -urN /usr/share/empty/Documentation/ABI/testing/sysfs-aufs linux/Documentat
 +		per aufs mount, where <id> is a unique id generated
 +		internally.
 +
-+What:		/sys/fs/aufs/si_<id>/br0, br1 ... brN
++What:		/sys/fs/aufs/si_<id>/br<idx>
 +Date:		March 2009
 +Contact:	J. R. Okajima <hooanon05g at gmail.com>
 +Description:
 +		It shows the abolute path of a member directory (which
 +		is called branch) in aufs, and its permission.
 +
-+What:		/sys/fs/aufs/si_<id>/brid0, brid1 ... bridN
++What:		/sys/fs/aufs/si_<id>/brid<idx>
 +Date:		July 2013
 +Contact:	J. R. Okajima <hooanon05g at gmail.com>
 +Description:
@@ -1075,10 +1050,10 @@ 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	2021-02-22 22:51:59.054745247 +0100
++++ linux/Documentation/filesystems/aufs/design/01intro.txt	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,171 @@
 +
-+# Copyright (C) 2005-2020 Junjiro R. Okajima
++# Copyright (C) 2005-2021 Junjiro R. Okajima
 +# 
 +# This program is free software; you can redistribute it and/or modify
 +# it under the terms of the GNU General Public License as published by
@@ -1250,10 +1225,10 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/Documentation/filesystems/aufs/design/02struct.txt	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,258 @@
 +
-+# Copyright (C) 2005-2020 Junjiro R. Okajima
++# Copyright (C) 2005-2021 Junjiro R. Okajima
 +# 
 +# This program is free software; you can redistribute it and/or modify
 +# it under the terms of the GNU General Public License as published by
@@ -1512,10 +1487,10 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/Documentation/filesystems/aufs/design/03atomic_open.txt	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,85 @@
 +
-+# Copyright (C) 2015-2020 Junjiro R. Okajima
++# Copyright (C) 2015-2021 Junjiro R. Okajima
 +# 
 +# This program is free software; you can redistribute it and/or modify
 +# it under the terms of the GNU General Public License as published by
@@ -1601,10 +1576,10 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/Documentation/filesystems/aufs/design/03lookup.txt	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,113 @@
 +
-+# Copyright (C) 2005-2020 Junjiro R. Okajima
++# Copyright (C) 2005-2021 Junjiro R. Okajima
 +# 
 +# This program is free software; you can redistribute it and/or modify
 +# it under the terms of the GNU General Public License as published by
@@ -1718,10 +1693,10 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/Documentation/filesystems/aufs/design/04branch.txt	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,74 @@
 +
-+# Copyright (C) 2005-2020 Junjiro R. Okajima
++# Copyright (C) 2005-2021 Junjiro R. Okajima
 +# 
 +# This program is free software; you can redistribute it and/or modify
 +# it under the terms of the GNU General Public License as published by
@@ -1796,10 +1771,10 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/Documentation/filesystems/aufs/design/05wbr_policy.txt	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,64 @@
 +
-+# Copyright (C) 2005-2020 Junjiro R. Okajima
++# Copyright (C) 2005-2021 Junjiro R. Okajima
 +# 
 +# This program is free software; you can redistribute it and/or modify
 +# it under the terms of the GNU General Public License as published by
@@ -1864,7 +1839,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	2021-02-22 22:51:59.058078584 +0100
++++ linux/Documentation/filesystems/aufs/design/06dirren.dot	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,31 @@
 +
 +// to view this graph, run dot(1) command in GRAPHVIZ.
@@ -1899,10 +1874,10 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/Documentation/filesystems/aufs/design/06dirren.txt	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,102 @@
 +
-+# Copyright (C) 2017-2020 Junjiro R. Okajima
++# Copyright (C) 2017-2021 Junjiro R. Okajima
 +#
 +# This program is free software; you can redistribute it and/or modify
 +# it under the terms of the GNU General Public License as published by
@@ -2005,10 +1980,10 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/Documentation/filesystems/aufs/design/06fhsm.txt	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,120 @@
 +
-+# Copyright (C) 2011-2020 Junjiro R. Okajima
++# Copyright (C) 2011-2021 Junjiro R. Okajima
 +# 
 +# This program is free software; you can redistribute it and/or modify
 +# it under the terms of the GNU General Public License as published by
@@ -2129,10 +2104,10 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/Documentation/filesystems/aufs/design/06mmap.txt	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,72 @@
 +
-+# Copyright (C) 2005-2020 Junjiro R. Okajima
++# Copyright (C) 2005-2021 Junjiro R. Okajima
 +# 
 +# This program is free software; you can redistribute it and/or modify
 +# it under the terms of the GNU General Public License as published by
@@ -2205,10 +2180,10 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/Documentation/filesystems/aufs/design/06xattr.txt	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,96 @@
 +
-+# Copyright (C) 2014-2020 Junjiro R. Okajima
++# Copyright (C) 2014-2021 Junjiro R. Okajima
 +#
 +# This program is free software; you can redistribute it and/or modify
 +# it under the terms of the GNU General Public License as published by
@@ -2305,10 +2280,10 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/Documentation/filesystems/aufs/design/07export.txt	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,58 @@
 +
-+# Copyright (C) 2005-2020 Junjiro R. Okajima
++# Copyright (C) 2005-2021 Junjiro R. Okajima
 +# 
 +# This program is free software; you can redistribute it and/or modify
 +# it under the terms of the GNU General Public License as published by
@@ -2367,10 +2342,10 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/Documentation/filesystems/aufs/design/08shwh.txt	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,52 @@
 +
-+# Copyright (C) 2005-2020 Junjiro R. Okajima
++# Copyright (C) 2005-2021 Junjiro R. Okajima
 +# 
 +# This program is free software; you can redistribute it and/or modify
 +# it under the terms of the GNU General Public License as published by
@@ -2423,10 +2398,10 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/Documentation/filesystems/aufs/design/10dynop.txt	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,47 @@
 +
-+# Copyright (C) 2010-2020 Junjiro R. Okajima
++# Copyright (C) 2010-2021 Junjiro R. Okajima
 +#
 +# This program is free software; you can redistribute it and/or modify
 +# it under the terms of the GNU General Public License as published by
@@ -2474,8 +2449,8 @@ 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	2021-02-22 22:51:59.054745247 +0100
-@@ -0,0 +1,401 @@
++++ linux/Documentation/filesystems/aufs/README	2021-12-03 15:38:59.929980643 +0100
+@@ -0,0 +1,394 @@
 +
 +Aufs5 -- advanced multi layered unification filesystem version 5.x
 +http://aufs.sf.net
@@ -2727,13 +2702,6 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +  Supports a nested loopback mount in a branch-fs. This patch is
 +  unnecessary until aufs produces a message like "you may want to try
 +  another patch for loopback file".
-+- proc_mounts.patch
-+  When there are many mountpoints and many mount(2)/umount(2) are
-+  running, then /proc/mounts may not show the all mountpoints.  This
-+  patch makes /proc/mounts always show the full mountpoints list.
-+  If you don't want to apply this patch and meet such problem, then you
-+  need to increase the value of 'ProcMounts_Times' make-variable in
-+  aufs-util.git as a second best solution.
 +- vfs-ino.patch
 +  Modifies a system global kernel internal function get_next_ino() in
 +  order to stop assigning 0 for an inode-number. Not directly related to
@@ -2879,11 +2847,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/aufs.h	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,62 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -2945,11 +2913,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/branch.c	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,1427 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -4376,11 +4344,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/branch.h	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,364 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -4744,7 +4712,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.h linux/fs/aufs/branch.h
 +#endif /* __AUFS_BRANCH_H__ */
 diff -urN /usr/share/empty/fs/aufs/conf.mk linux/fs/aufs/conf.mk
 --- /usr/share/empty/fs/aufs/conf.mk	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/conf.mk	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/conf.mk	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,40 @@
 +# SPDX-License-Identifier: GPL-2.0
 +
@@ -4788,11 +4756,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
-@@ -0,0 +1,1445 @@
++++ linux/fs/aufs/cpup.c	2021-12-03 15:38:59.933313976 +0100
+@@ -0,0 +1,1447 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -5532,11 +5500,13 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c
 +{
 +	int err;
 +	struct dentry *dentry, *h_dentry, *h_parent, *parent;
++	struct path h_ppath;
 +	struct inode *h_dir;
 +	aufs_bindex_t bdst;
 +
 +	dentry = cpg->dentry;
 +	bdst = cpg->bdst;
++	h_ppath.mnt = au_sbr_mnt(dentry->d_sb, bdst);
 +	h_dentry = au_h_dptr(dentry, bdst);
 +	if (!au_ftest_cpup(cpg->flags, OVERWRITE)) {
 +		dget(h_dentry);
@@ -5548,9 +5518,9 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c
 +	} else {
 +		err = 0;
 +		parent = dget_parent(dentry);
-+		h_parent = au_h_dptr(parent, bdst);
++		h_ppath.dentry = au_h_dptr(parent, bdst);
 +		dput(parent);
-+		h_path->dentry = vfsub_lkup_one(&dentry->d_name, h_parent);
++		h_path->dentry = vfsub_lkup_one(&dentry->d_name, &h_ppath);
 +		if (IS_ERR(h_path->dentry))
 +			err = PTR_ERR(h_path->dentry);
 +	}
@@ -6237,11 +6207,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/cpup.h	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,100 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -6341,11 +6311,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/dbgaufs.c	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,526 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -6871,11 +6841,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/dbgaufs.h	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,53 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -6928,11 +6898,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/dcsub.c	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,225 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -7157,11 +7127,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/dcsub.h	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,137 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -7298,11 +7268,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
-@@ -0,0 +1,441 @@
++++ linux/fs/aufs/debug.c	2021-12-03 15:38:59.933313976 +0100
+@@ -0,0 +1,444 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -7685,7 +7655,10 @@ diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c
 +			AuDbgDentry(dentry);
 +			AuDbgInode(inode);
 +			au_debug_off();
-+			BUG();
++			if (au_test_fuse(h_inode->i_sb))
++				WARN_ON_ONCE(1);
++			else
++				BUG();
 +		}
 +	}
 +}
@@ -7743,11 +7716,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/debug.h	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,226 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -7973,11 +7946,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
-@@ -0,0 +1,1154 @@
++++ linux/fs/aufs/dentry.c	2021-12-03 15:38:59.933313976 +0100
+@@ -0,0 +1,1163 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -8012,6 +7985,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
 +	struct dentry *h_dentry;
 +	struct inode *h_inode;
 +	struct au_branch *br;
++	struct path h_path;
 +	int wh_found, opq;
 +	unsigned char wh_able;
 +	const unsigned char allow_neg = !!au_ftest_lkup(args->flags, ALLOW_NEG);
@@ -8020,9 +7994,11 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
 +
 +	wh_found = 0;
 +	br = au_sbr(dentry->d_sb, bindex);
++	h_path.dentry = h_parent;
++	h_path.mnt = au_br_mnt(br);
 +	wh_able = !!au_br_whable(br->br_perm);
 +	if (wh_able)
-+		wh_found = au_wh_test(h_parent, &args->whname, ignore_perm);
++		wh_found = au_wh_test(&h_path, &args->whname, ignore_perm);
 +	h_dentry = ERR_PTR(wh_found);
 +	if (!wh_found)
 +		goto real_lookup;
@@ -8037,9 +8013,9 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
 +
 +real_lookup:
 +	if (!ignore_perm)
-+		h_dentry = vfsub_lkup_one(args->name, h_parent);
++		h_dentry = vfsub_lkup_one(args->name, &h_path);
 +	else
-+		h_dentry = au_sio_lkup_one(args->name, h_parent);
++		h_dentry = au_sio_lkup_one(args->name, &h_path);
 +	if (IS_ERR(h_dentry)) {
 +		if (PTR_ERR(h_dentry) == -ENAMETOOLONG
 +		    && !allow_neg)
@@ -8073,8 +8049,9 @@ 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 */
 +
++	h_path.dentry = h_dentry;
 +	inode_lock_shared_nested(h_inode, AuLsc_I_CHILD);
-+	opq = au_diropq_test(h_dentry);
++	opq = au_diropq_test(&h_path);
 +	inode_unlock_shared(h_inode);
 +	if (opq > 0)
 +		au_set_dbdiropq(dentry, bindex);
@@ -8219,18 +8196,18 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
 +	return err;
 +}
 +
-+struct dentry *au_sio_lkup_one(struct qstr *name, struct dentry *parent)
++struct dentry *au_sio_lkup_one(struct qstr *name, struct path *ppath)
 +{
 +	struct dentry *dentry;
 +	int wkq_err;
 +
-+	if (!au_test_h_perm_sio(d_inode(parent), MAY_EXEC))
-+		dentry = vfsub_lkup_one(name, parent);
++	if (!au_test_h_perm_sio(d_inode(ppath->dentry), MAY_EXEC))
++		dentry = vfsub_lkup_one(name, ppath);
 +	else {
 +		struct vfsub_lkup_one_args args = {
 +			.errp	= &dentry,
 +			.name	= name,
-+			.parent	= parent
++			.ppath	= ppath
 +		};
 +
 +		wkq_err = au_wkq_wait(vfsub_call_lkup_one, &args);
@@ -8247,16 +8224,18 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
 +int au_lkup_neg(struct dentry *dentry, aufs_bindex_t bindex, int wh)
 +{
 +	int err;
-+	struct dentry *parent, *h_parent, *h_dentry;
++	struct dentry *parent, *h_dentry;
 +	struct au_branch *br;
++	struct path h_ppath;
 +
 +	parent = dget_parent(dentry);
-+	h_parent = au_h_dptr(parent, bindex);
 +	br = au_sbr(dentry->d_sb, bindex);
++	h_ppath.dentry = au_h_dptr(parent, bindex);
++	h_ppath.mnt = au_br_mnt(br);
 +	if (wh)
-+		h_dentry = au_whtmp_lkup(h_parent, br, &dentry->d_name);
++		h_dentry = au_whtmp_lkup(h_ppath.dentry, br, &dentry->d_name);
 +	else
-+		h_dentry = au_sio_lkup_one(&dentry->d_name, h_parent);
++		h_dentry = au_sio_lkup_one(&dentry->d_name, &h_ppath);
 +	err = PTR_ERR(h_dentry);
 +	if (IS_ERR(h_dentry))
 +		goto out;
@@ -8331,6 +8310,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
 +	struct inode *h_inode;
 +	struct dentry *h_d;
 +	struct super_block *h_sb;
++	struct path h_ppath;
 +
 +	err = 0;
 +	memset(&ia, -1, sizeof(ia));
@@ -8345,7 +8325,9 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
 +		goto out;
 +
 +	/* main purpose is namei.c:cached_lookup() and d_revalidate */
-+	h_d = vfsub_lkup_one(&h_dentry->d_name, h_parent);
++	h_ppath.dentry = h_parent;
++	h_ppath.mnt = au_br_mnt(br);
++	h_d = vfsub_lkup_one(&h_dentry->d_name, &h_ppath);
 +	err = PTR_ERR(h_d);
 +	if (IS_ERR(h_d))
 +		goto out;
@@ -9131,11 +9113,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/dentry.h	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,268 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -9208,7 +9190,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.h linux/fs/aufs/dentry.h
 +/* dentry.c */
 +extern const struct dentry_operations aufs_dop, aufs_dop_noreval;
 +struct au_branch;
-+struct dentry *au_sio_lkup_one(struct qstr *name, struct dentry *parent);
++struct dentry *au_sio_lkup_one(struct qstr *name, struct path *ppath);
 +int au_h_verify(struct dentry *h_dentry, unsigned int udba, struct inode *h_dir,
 +		struct dentry *h_parent, struct au_branch *br);
 +
@@ -9403,11 +9385,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/dinfo.c	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,554 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -9961,11 +9943,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/dir.c	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,763 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -10728,11 +10710,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/dir.h	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,134 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -10866,11 +10848,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
-@@ -0,0 +1,1316 @@
++++ linux/fs/aufs/dirren.c	2021-12-03 15:38:59.933313976 +0100
+@@ -0,0 +1,1315 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2017-2020 Junjiro R. Okajima
++ * Copyright (C) 2017-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -11133,7 +11115,8 @@ diff -urN /usr/share/empty/fs/aufs/dirren.c linux/fs/aufs/dirren.c
 +		dir = d_inode(path->dentry);
 +		inode_lock_nested(dir, AuLsc_I_CHILD);
 +	}
-+	hinopath.dentry = vfsub_lkup_one(&hinoname, path->dentry);
++	hinopath.mnt = path->mnt;
++	hinopath.dentry = vfsub_lkup_one(&hinoname, (struct path *)path);
 +	err = PTR_ERR(hinopath.dentry);
 +	if (IS_ERR(hinopath.dentry))
 +		goto out_unlock;
@@ -11167,7 +11150,6 @@ diff -urN /usr/share/empty/fs/aufs/dirren.c linux/fs/aufs/dirren.c
 +		}
 +		flags = O_WRONLY;
 +	}
-+	hinopath.mnt = path->mnt;
 +	hinofile = vfsub_dentry_open(&hinopath, flags);
 +	if (suspend)
 +		au_hn_inode_unlock(hdir);
@@ -11489,7 +11471,7 @@ diff -urN /usr/share/empty/fs/aufs/dirren.c linux/fs/aufs/dirren.c
 +	AuDebugOn(elm
 +		  && memcmp(elm, page_address(ZERO_PAGE(0)), sizeof(*elm)));
 +
-+	infopath.dentry = vfsub_lookup_one_len(w->whname, w->h_ppath.dentry,
++	infopath.dentry = vfsub_lookup_one_len(w->whname, &w->h_ppath,
 +					       w->whnamelen);
 +	AuTraceErrPtr(infopath.dentry);
 +	if (IS_ERR(infopath.dentry)) {
@@ -11873,8 +11855,7 @@ diff -urN /usr/share/empty/fs/aufs/dirren.c linux/fs/aufs/dirren.c
 +	unlocked = 0;
 +	h_dir = d_inode(h_ppath->dentry);
 +	inode_lock_shared_nested(h_dir, AuLsc_I_PARENT);
-+	infopath.dentry = vfsub_lookup_one_len(whname, h_ppath->dentry,
-+					       whnamelen);
++	infopath.dentry = vfsub_lookup_one_len(whname, h_ppath, whnamelen);
 +	if (IS_ERR(infopath.dentry)) {
 +		drinfo = (void *)infopath.dentry;
 +		goto out;
@@ -12186,11 +12167,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/dirren.h	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,140 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2017-2020 Junjiro R. Okajima
++ * Copyright (C) 2017-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -12330,11 +12311,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/dynop.c	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,368 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2010-2020 Junjiro R. Okajima
++ * Copyright (C) 2010-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -12702,11 +12683,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/dynop.h	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,77 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2010-2020 Junjiro R. Okajima
++ * Copyright (C) 2010-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -12783,11 +12764,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/export.c	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,837 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -13193,7 +13174,7 @@ diff -urN /usr/share/empty/fs/aufs/export.c linux/fs/aufs/export.c
 +
 +	/* do not call vfsub_lkup_one() */
 +	dir = d_inode(parent);
-+	dentry = vfsub_lookup_one_len_unlocked(arg.name, parent, arg.namelen);
++	dentry = vfsub_lookup_one_len_unlocked(arg.name, path, arg.namelen);
 +	AuTraceErrPtr(dentry);
 +	if (IS_ERR(dentry))
 +		goto out_name;
@@ -13624,11 +13605,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/fhsm.c	2021-12-03 15:38:59.933313976 +0100
 @@ -0,0 +1,427 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2011-2020 Junjiro R. Okajima
++ * Copyright (C) 2011-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -14055,11 +14036,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/file.c	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,863 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -14922,11 +14903,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/file.h	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,342 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -15268,11 +15249,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/finfo.c	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,149 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -15421,11 +15402,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
-@@ -0,0 +1,762 @@
++++ linux/fs/aufs/f_op.c	2021-12-03 15:38:59.933313976 +0100
+@@ -0,0 +1,771 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -15784,6 +15765,15 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 +	return err;
 +}
 +
++/*
++ * We may be able to remove aufs_splice_{read,write}() since almost all FSes
++ * don't have their own .splice_{read,write} implimentations, and they use
++ * generic_file_splice_read() and iter_file_splice_write() who can act like the
++ * simple converters to f_op->iter_read() and ->iter_write().
++ * But we keep our own implementations because some non-mainlined FSes may have
++ * their own .splice_{read,write} implimentations and aufs doesn't want to take
++ * away an opportunity to co-work with aufs from them.
++ */
 +static ssize_t aufs_splice_read(struct file *file, loff_t *ppos,
 +				struct pipe_inode_info *pipe, size_t len,
 +				unsigned int flags)
@@ -16187,11 +16177,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/fstype.h	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,401 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -16592,11 +16582,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/hbl.h	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,65 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2017-2020 Junjiro R. Okajima
++ * Copyright (C) 2017-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -16661,11 +16651,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/hfsnotify.c	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,288 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -16953,11 +16943,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/hfsplus.c	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,60 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2010-2020 Junjiro R. Okajima
++ * Copyright (C) 2010-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -17017,11 +17007,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/hnotify.c	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,715 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -17736,11 +17726,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/iinfo.c	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,286 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -18026,11 +18016,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/inode.c	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,529 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -18559,11 +18549,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/inode.h	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,698 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -19261,11 +19251,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/ioctl.c	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,220 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -19485,11 +19475,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/i_op_add.c	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,936 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -20425,11 +20415,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/i_op.c	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,1502 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -21931,11 +21921,11 @@ 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	2021-02-22 22:51:59.058078584 +0100
-@@ -0,0 +1,513 @@
++++ linux/fs/aufs/i_op_del.c	2021-12-03 15:38:59.936647310 +0100
+@@ -0,0 +1,520 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -22029,6 +22019,9 @@ diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c
 +	umode_t h_mode;
 +	struct dentry *h_dentry, *h_latest;
 +	struct inode *h_inode;
++	struct path h_ppath;
++	struct super_block *sb;
++	struct au_branch *br;
 +
 +	h_dentry = au_h_dptr(dentry, bindex);
 +	if (d_really_is_positive(dentry)) {
@@ -22066,12 +22059,16 @@ diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c
 +	 * let's try heavy test.
 +	 */
 +	err = -EACCES;
-+	if (unlikely(!au_opt_test(au_mntflags(dentry->d_sb), DIRPERM1)
++	sb = dentry->d_sb;
++	br = au_sbr(sb, bindex);
++	if (unlikely(!au_opt_test(au_mntflags(sb), DIRPERM1)
 +		     && au_test_h_perm(d_inode(h_parent),
 +				       MAY_EXEC | MAY_WRITE)))
 +		goto out;
 +
-+	h_latest = au_sio_lkup_one(&dentry->d_name, h_parent);
++	h_ppath.dentry = h_parent;
++	h_ppath.mnt = au_br_mnt(br);
++	h_latest = au_sio_lkup_one(&dentry->d_name, &h_ppath);
 +	err = -EIO;
 +	if (IS_ERR(h_latest))
 +		goto out;
@@ -22448,11 +22445,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
-@@ -0,0 +1,1250 @@
++++ linux/fs/aufs/i_op_ren.c	2021-12-03 15:38:59.936647310 +0100
+@@ -0,0 +1,1256 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -22602,9 +22599,12 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c
 +{
 +	int rerr;
 +	struct inode *delegated;
++	struct path h_ppath = {
++		.dentry	= a->src_h_parent,
++		.mnt	= a->h_path.mnt
++	};
 +
-+	a->h_path.dentry = vfsub_lkup_one(&a->src_dentry->d_name,
-+					  a->src_h_parent);
++	a->h_path.dentry = vfsub_lkup_one(&a->src_dentry->d_name, &h_ppath);
 +	rerr = PTR_ERR(a->h_path.dentry);
 +	if (IS_ERR(a->h_path.dentry)) {
 +		RevertFailure("lkup one %pd", a->src_dentry);
@@ -22631,9 +22631,12 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c
 +{
 +	int rerr;
 +	struct inode *delegated;
++	struct path h_ppath = {
++		.dentry	= a->dst_h_parent,
++		.mnt	= a->h_path.mnt
++	};
 +
-+	a->h_path.dentry = vfsub_lkup_one(&a->dst_dentry->d_name,
-+					  a->dst_h_parent);
++	a->h_path.dentry = vfsub_lkup_one(&a->dst_dentry->d_name, &h_ppath);
 +	rerr = PTR_ERR(a->h_path.dentry);
 +	if (IS_ERR(a->h_path.dentry)) {
 +		RevertFailure("lkup one %pd", a->dst_dentry);
@@ -23702,7 +23705,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c
 +}
 diff -urN /usr/share/empty/fs/aufs/Kconfig linux/fs/aufs/Kconfig
 --- /usr/share/empty/fs/aufs/Kconfig	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/Kconfig	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/Kconfig	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,199 @@
 +# SPDX-License-Identifier: GPL-2.0
 +config AUFS_FS
@@ -23905,11 +23908,11 @@ diff -urN /usr/share/empty/fs/aufs/Kconfig linux/fs/aufs/Kconfig
 +endif
 diff -urN /usr/share/empty/fs/aufs/lcnt.h linux/fs/aufs/lcnt.h
 --- /usr/share/empty/fs/aufs/lcnt.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/lcnt.h	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/lcnt.h	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,186 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2018-2020 Junjiro R. Okajima
++ * Copyright (C) 2018-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -24095,11 +24098,11 @@ diff -urN /usr/share/empty/fs/aufs/lcnt.h linux/fs/aufs/lcnt.h
 +#endif /* __AUFS_LCNT_H__ */
 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/loop.c	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,148 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -24247,11 +24250,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/loop.h	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,55 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -24306,7 +24309,7 @@ diff -urN /usr/share/empty/fs/aufs/loop.h linux/fs/aufs/loop.h
 +#endif /* __AUFS_LOOP_H__ */
 diff -urN /usr/share/empty/fs/aufs/magic.mk linux/fs/aufs/magic.mk
 --- /usr/share/empty/fs/aufs/magic.mk	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/magic.mk	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/magic.mk	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,31 @@
 +# SPDX-License-Identifier: GPL-2.0
 +
@@ -24341,7 +24344,7 @@ diff -urN /usr/share/empty/fs/aufs/magic.mk linux/fs/aufs/magic.mk
 +endif
 diff -urN /usr/share/empty/fs/aufs/Makefile linux/fs/aufs/Makefile
 --- /usr/share/empty/fs/aufs/Makefile	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/Makefile	2021-02-22 22:51:59.058078584 +0100
++++ linux/fs/aufs/Makefile	2021-12-03 15:38:59.929980643 +0100
 @@ -0,0 +1,46 @@
 +# SPDX-License-Identifier: GPL-2.0
 +
@@ -24391,11 +24394,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/module.c	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,273 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -24668,11 +24671,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/module.h	2021-12-03 15:38:59.936647310 +0100
 @@ -0,0 +1,166 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -24838,11 +24841,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/mvdown.c	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,706 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2011-2020 Junjiro R. Okajima
++ * Copyright (C) 2011-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -25548,11 +25551,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/opts.c	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,1880 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -27432,11 +27435,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/opts.h	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,225 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -27661,11 +27664,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/plink.c	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,516 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -27871,35 +27874,35 @@ diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c
 +struct au_do_plink_lkup_args {
 +	struct dentry **errp;
 +	struct qstr *tgtname;
-+	struct dentry *h_parent;
-+	struct au_branch *br;
++	struct path *h_ppath;
 +};
 +
 +static struct dentry *au_do_plink_lkup(struct qstr *tgtname,
-+				       struct dentry *h_parent,
-+				       struct au_branch *br)
++				       struct path *h_ppath)
 +{
 +	struct dentry *h_dentry;
 +	struct inode *h_inode;
 +
-+	h_inode = d_inode(h_parent);
++	h_inode = d_inode(h_ppath->dentry);
 +	inode_lock_shared_nested(h_inode, AuLsc_I_CHILD2);
-+	h_dentry = vfsub_lkup_one(tgtname, h_parent);
++	h_dentry = vfsub_lkup_one(tgtname, h_ppath);
 +	inode_unlock_shared(h_inode);
++
 +	return h_dentry;
 +}
 +
 +static void au_call_do_plink_lkup(void *args)
 +{
 +	struct au_do_plink_lkup_args *a = args;
-+	*a->errp = au_do_plink_lkup(a->tgtname, a->h_parent, a->br);
++	*a->errp = au_do_plink_lkup(a->tgtname, a->h_ppath);
 +}
 +
 +/* lookup the plink-ed @inode under the branch at @bindex */
 +struct dentry *au_plink_lkup(struct inode *inode, aufs_bindex_t bindex)
 +{
-+	struct dentry *h_dentry, *h_parent;
++	struct dentry *h_dentry;
 +	struct au_branch *br;
++	struct path h_ppath;
 +	int wkq_err;
 +	char a[PLINK_NAME_LEN];
 +	struct qstr tgtname = QSTR_INIT(a, 0);
@@ -27907,40 +27910,39 @@ diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c
 +	AuDebugOn(au_plink_maint(inode->i_sb, AuLock_NOPLM));
 +
 +	br = au_sbr(inode->i_sb, bindex);
-+	h_parent = br->br_wbr->wbr_plink;
++	h_ppath.dentry = br->br_wbr->wbr_plink;
++	h_ppath.mnt = au_br_mnt(br);
 +	tgtname.len = plink_name(a, sizeof(a), inode, bindex);
 +
 +	if (!uid_eq(current_fsuid(), GLOBAL_ROOT_UID)) {
 +		struct au_do_plink_lkup_args args = {
 +			.errp		= &h_dentry,
 +			.tgtname	= &tgtname,
-+			.h_parent	= h_parent,
-+			.br		= br
++			.h_ppath	= &h_ppath
 +		};
 +
 +		wkq_err = au_wkq_wait(au_call_do_plink_lkup, &args);
 +		if (unlikely(wkq_err))
 +			h_dentry = ERR_PTR(wkq_err);
 +	} else
-+		h_dentry = au_do_plink_lkup(&tgtname, h_parent, br);
++		h_dentry = au_do_plink_lkup(&tgtname, &h_ppath);
 +
 +	return h_dentry;
 +}
 +
 +/* create a pseudo-link */
-+static int do_whplink(struct qstr *tgt, struct dentry *h_parent,
-+		      struct dentry *h_dentry, struct au_branch *br)
++static int do_whplink(struct qstr *tgt, struct path *h_ppath,
++		      struct dentry *h_dentry)
 +{
 +	int err;
-+	struct path h_path = {
-+		.mnt = au_br_mnt(br)
-+	};
++	struct path h_path;
 +	struct inode *h_dir, *delegated;
 +
-+	h_dir = d_inode(h_parent);
++	h_dir = d_inode(h_ppath->dentry);
 +	inode_lock_nested(h_dir, AuLsc_I_CHILD2);
++	h_path.mnt = h_ppath->mnt;
 +again:
-+	h_path.dentry = vfsub_lkup_one(tgt, h_parent);
++	h_path.dentry = vfsub_lkup_one(tgt, h_ppath);
 +	err = PTR_ERR(h_path.dentry);
 +	if (IS_ERR(h_path.dentry))
 +		goto out;
@@ -27981,28 +27983,30 @@ diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c
 +struct do_whplink_args {
 +	int *errp;
 +	struct qstr *tgt;
-+	struct dentry *h_parent;
++	struct path *h_ppath;
 +	struct dentry *h_dentry;
-+	struct au_branch *br;
 +};
 +
 +static void call_do_whplink(void *args)
 +{
 +	struct do_whplink_args *a = args;
-+	*a->errp = do_whplink(a->tgt, a->h_parent, a->h_dentry, a->br);
++	*a->errp = do_whplink(a->tgt, a->h_ppath, a->h_dentry);
 +}
 +
 +static int whplink(struct dentry *h_dentry, struct inode *inode,
-+		   aufs_bindex_t bindex, struct au_branch *br)
++		   aufs_bindex_t bindex)
 +{
 +	int err, wkq_err;
++	struct au_branch *br;
 +	struct au_wbr *wbr;
-+	struct dentry *h_parent;
++	struct path h_ppath;
 +	char a[PLINK_NAME_LEN];
 +	struct qstr tgtname = QSTR_INIT(a, 0);
 +
-+	wbr = au_sbr(inode->i_sb, bindex)->br_wbr;
-+	h_parent = wbr->wbr_plink;
++	br = au_sbr(inode->i_sb, bindex);
++	wbr = br->br_wbr;
++	h_ppath.dentry = wbr->wbr_plink;
++	h_ppath.mnt = au_br_mnt(br);
 +	tgtname.len = plink_name(a, sizeof(a), inode, bindex);
 +
 +	/* always superio. */
@@ -28010,15 +28014,14 @@ diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c
 +		struct do_whplink_args args = {
 +			.errp		= &err,
 +			.tgt		= &tgtname,
-+			.h_parent	= h_parent,
-+			.h_dentry	= h_dentry,
-+			.br		= br
++			.h_ppath	= &h_ppath,
++			.h_dentry	= h_dentry
 +		};
 +		wkq_err = au_wkq_wait(call_do_whplink, &args);
 +		if (unlikely(wkq_err))
 +			err = wkq_err;
 +	} else
-+		err = do_whplink(&tgtname, h_parent, h_dentry, br);
++		err = do_whplink(&tgtname, &h_ppath, h_dentry);
 +
 +	return err;
 +}
@@ -28068,7 +28071,7 @@ diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c
 +		if (cnt > AUFS_PLINK_WARN)
 +			AuWarn1(msg ", %d\n", cnt);
 +#undef msg
-+		err = whplink(h_dentry, inode, bindex, au_sbr(sb, bindex));
++		err = whplink(h_dentry, inode, bindex);
 +		if (unlikely(err)) {
 +			pr_warn("err %d, damaged pseudo link.\n", err);
 +			au_hbl_del(&icntnr->plink, hbl);
@@ -28181,11 +28184,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/poll.c	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,51 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -28236,11 +28239,11 @@ diff -urN /usr/share/empty/fs/aufs/poll.c linux/fs/aufs/poll.c
 +}
 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/posix_acl.c	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,105 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2014-2020 Junjiro R. Okajima
++ * Copyright (C) 2014-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -28345,11 +28348,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/procfs.c	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,170 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2010-2020 Junjiro R. Okajima
++ * Copyright (C) 2010-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -28519,11 +28522,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/rdu.c	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,384 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -28907,11 +28910,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/rwsem.h	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,77 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -28988,11 +28991,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/sbinfo.c	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,314 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -29306,11 +29309,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/super.c	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,1047 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -30357,11 +30360,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/super.h	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,587 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -30948,11 +30951,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/sysaufs.c	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,93 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -31045,11 +31048,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/sysaufs.h	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,102 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -31151,11 +31154,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/sysfs.c	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,374 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -31529,11 +31532,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/sysrq.c	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,149 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -31682,11 +31685,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/vdir.c	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,896 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -32582,11 +32585,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
-@@ -0,0 +1,885 @@
++++ linux/fs/aufs/vfsub.c	2021-12-03 15:38:59.939980643 +0100
+@@ -0,0 +1,890 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -32644,6 +32647,11 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c
 +	struct kstat st;
 +	struct super_block *h_sb;
 +
++	/*
++	 * Always needs h_path->mnt for LSM or FUSE branch.
++	 */
++	AuDebugOn(!h_path->mnt);
++
 +	/* for remote fs, leave work for its getattr or d_revalidate */
 +	/* for bad i_attr fs, handle them in aufs_getattr() */
 +	/* still some fs may acquire i_mutex. we need to skip them */
@@ -32752,38 +32760,38 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c
 +}
 +
 +struct dentry *vfsub_lookup_one_len_unlocked(const char *name,
-+					     struct dentry *parent, int len)
++					     struct path *ppath, int len)
 +{
-+	struct path path = {
-+		.mnt = NULL
-+	};
++	struct path path;
 +
-+	path.dentry = lookup_one_len_unlocked(name, parent, len);
++	path.dentry = lookup_one_len_unlocked(name, ppath->dentry, len);
 +	if (IS_ERR(path.dentry))
 +		goto out;
-+	if (d_is_positive(path.dentry))
++	if (d_is_positive(path.dentry)) {
++		path.mnt = ppath->mnt;
 +		vfsub_update_h_iattr(&path, /*did*/NULL); /*ignore*/
++	}
 +
 +out:
 +	AuTraceErrPtr(path.dentry);
 +	return path.dentry;
 +}
 +
-+struct dentry *vfsub_lookup_one_len(const char *name, struct dentry *parent,
++struct dentry *vfsub_lookup_one_len(const char *name, struct path *ppath,
 +				    int len)
 +{
-+	struct path path = {
-+		.mnt = NULL
-+	};
++	struct path path;
 +
 +	/* VFS checks it too, but by WARN_ON_ONCE() */
-+	IMustLock(d_inode(parent));
++	IMustLock(d_inode(ppath->dentry));
 +
-+	path.dentry = lookup_one_len(name, parent, len);
++	path.dentry = lookup_one_len(name, ppath->dentry, len);
 +	if (IS_ERR(path.dentry))
 +		goto out;
-+	if (d_is_positive(path.dentry))
++	if (d_is_positive(path.dentry)) {
++		path.mnt = ppath->mnt;
 +		vfsub_update_h_iattr(&path, /*did*/NULL); /*ignore*/
++	}
 +
 +out:
 +	AuTraceErrPtr(path.dentry);
@@ -32793,7 +32801,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c
 +void vfsub_call_lkup_one(void *args)
 +{
 +	struct vfsub_lkup_one_args *a = args;
-+	*a->errp = vfsub_lkup_one(a->name, a->parent);
++	*a->errp = vfsub_lkup_one(a->name, a->ppath);
 +}
 +
 +/* ---------------------------------------------------------------------- */
@@ -33471,11 +33479,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/vfsub.h	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,354 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -33578,20 +33586,20 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
 +int vfsub_kern_path(const char *name, unsigned int flags, struct path *path);
 +
 +struct dentry *vfsub_lookup_one_len_unlocked(const char *name,
-+					     struct dentry *parent, int len);
-+struct dentry *vfsub_lookup_one_len(const char *name, struct dentry *parent,
++					     struct path *ppath, int len);
++struct dentry *vfsub_lookup_one_len(const char *name, struct path *ppath,
 +				    int len);
 +
 +struct vfsub_lkup_one_args {
 +	struct dentry **errp;
 +	struct qstr *name;
-+	struct dentry *parent;
++	struct path *ppath;
 +};
 +
 +static inline struct dentry *vfsub_lkup_one(struct qstr *name,
-+					    struct dentry *parent)
++					    struct path *ppath)
 +{
-+	return vfsub_lookup_one_len(name->name, parent, name->len);
++	return vfsub_lookup_one_len(name->name, ppath, name->len);
 +}
 +
 +void vfsub_call_lkup_one(void *args);
@@ -33704,7 +33712,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
 +static inline int vfsub_update_time(struct inode *h_inode,
 +				    struct timespec64 *ts, int flags)
 +{
-+	return update_time(h_inode, ts, flags);
++	return inode_update_time(h_inode, ts, flags);
 +	/* no vfsub_update_h_iattr() since we don't have struct path */
 +}
 +
@@ -33829,11 +33837,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/wbr_policy.c	2021-12-03 15:38:59.939980643 +0100
 @@ -0,0 +1,830 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -34663,11 +34671,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
-@@ -0,0 +1,1062 @@
++++ linux/fs/aufs/whout.c	2021-12-03 15:38:59.939980643 +0100
+@@ -0,0 +1,1064 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -34728,18 +34736,18 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +/* ---------------------------------------------------------------------- */
 +
 +/*
-+ * test if the @wh_name exists under @h_parent.
++ * test if the @wh_name exists under @h_ppath.
 + * @try_sio specifies the necessary of super-io.
 + */
-+int au_wh_test(struct dentry *h_parent, struct qstr *wh_name, int try_sio)
++int au_wh_test(struct path *h_ppath, struct qstr *wh_name, int try_sio)
 +{
 +	int err;
 +	struct dentry *wh_dentry;
 +
 +	if (!try_sio)
-+		wh_dentry = vfsub_lkup_one(wh_name, h_parent);
++		wh_dentry = vfsub_lkup_one(wh_name, h_ppath);
 +	else
-+		wh_dentry = au_sio_lkup_one(wh_name, h_parent);
++		wh_dentry = au_sio_lkup_one(wh_name, h_ppath);
 +	err = PTR_ERR(wh_dentry);
 +	if (IS_ERR(wh_dentry)) {
 +		if (err == -ENAMETOOLONG)
@@ -34766,15 +34774,15 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +}
 +
 +/*
-+ * test if the @h_dentry sets opaque or not.
++ * test if the @h_path->dentry sets opaque or not.
 + */
-+int au_diropq_test(struct dentry *h_dentry)
++int au_diropq_test(struct path *h_path)
 +{
 +	int err;
 +	struct inode *h_dir;
 +
-+	h_dir = d_inode(h_dentry);
-+	err = au_wh_test(h_dentry, &diropq_name,
++	h_dir = d_inode(h_path->dentry);
++	err = au_wh_test(h_path, &diropq_name,
 +			 au_test_h_perm_sio(h_dir, MAY_EXEC));
 +	return err;
 +}
@@ -34792,6 +34800,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +	/* strict atomic_t is unnecessary here */
 +	static unsigned short cnt;
 +	struct qstr qs;
++	struct path h_ppath;
 +
 +	BUILD_BUG_ON(sizeof(cnt) * 2 > AUFS_WH_TMP_LEN);
 +
@@ -34815,10 +34824,12 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +	*p++ = '.';
 +	AuDebugOn(name + qs.len + 1 - p <= AUFS_WH_TMP_LEN);
 +
++	h_ppath.dentry = h_parent;
++	h_ppath.mnt = au_br_mnt(br);
 +	qs.name = name;
 +	for (i = 0; i < 3; i++) {
 +		sprintf(p, "%.*x", AUFS_WH_TMP_LEN, cnt++);
-+		dentry = au_sio_lkup_one(&qs, h_parent);
++		dentry = au_sio_lkup_one(&qs, &h_ppath);
 +		if (IS_ERR(dentry) || d_is_negative(dentry))
 +			goto out_name;
 +		dput(dentry);
@@ -34912,21 +34923,20 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +	return err;
 +}
 +
-+static int unlink_wh_name(struct dentry *h_parent, struct qstr *wh,
-+			  struct au_branch *br)
++static int unlink_wh_name(struct path *h_ppath, struct qstr *wh)
 +{
 +	int err;
-+	struct path h_path = {
-+		.mnt = au_br_mnt(br)
-+	};
++	struct path h_path;
 +
 +	err = 0;
-+	h_path.dentry = vfsub_lkup_one(wh, h_parent);
++	h_path.dentry = vfsub_lkup_one(wh, h_ppath);
 +	if (IS_ERR(h_path.dentry))
 +		err = PTR_ERR(h_path.dentry);
 +	else {
-+		if (d_is_reg(h_path.dentry))
-+			err = do_unlink_wh(d_inode(h_parent), &h_path);
++		if (d_is_reg(h_path.dentry)) {
++			h_path.mnt = h_ppath->mnt;
++			err = do_unlink_wh(d_inode(h_ppath->dentry), &h_path);
++		}
 +		dput(h_path.dentry);
 +	}
 +
@@ -35366,15 +35376,17 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +static struct dentry *do_diropq(struct dentry *dentry, aufs_bindex_t bindex,
 +				unsigned int flags)
 +{
-+	struct dentry *opq_dentry, *h_dentry;
++	struct dentry *opq_dentry;
 +	struct super_block *sb;
 +	struct au_branch *br;
++	struct path h_path;
 +	int err;
 +
 +	sb = dentry->d_sb;
 +	br = au_sbr(sb, bindex);
-+	h_dentry = au_h_dptr(dentry, bindex);
-+	opq_dentry = vfsub_lkup_one(&diropq_name, h_dentry);
++	h_path.dentry = au_h_dptr(dentry, bindex);
++	h_path.mnt = au_br_mnt(br);
++	opq_dentry = vfsub_lkup_one(&diropq_name, &h_path);
 +	if (IS_ERR(opq_dentry))
 +		goto out;
 +
@@ -35385,11 +35397,8 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +			goto out; /* success */
 +		}
 +	} else {
-+		struct path tmp = {
-+			.dentry = opq_dentry,
-+			.mnt	= au_br_mnt(br)
-+		};
-+		err = do_unlink_wh(au_h_iptr(d_inode(dentry), bindex), &tmp);
++		h_path.dentry = opq_dentry;
++		err = do_unlink_wh(au_h_iptr(d_inode(dentry), bindex), &h_path);
 +		if (!err)
 +			au_set_dbdiropq(dentry, -1);
 +	}
@@ -35452,11 +35461,14 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +	int err;
 +	struct qstr wh_name;
 +	struct dentry *wh_dentry;
++	struct path h_path;
 +
 +	err = au_wh_name_alloc(&wh_name, base_name);
 +	wh_dentry = ERR_PTR(err);
 +	if (!err) {
-+		wh_dentry = vfsub_lkup_one(&wh_name, h_parent);
++		h_path.dentry = h_parent;
++		h_path.mnt = au_br_mnt(br);
++		wh_dentry = vfsub_lkup_one(&wh_name, &h_path);
 +		au_kfree_try_rcu(wh_name.name);
 +	}
 +	return wh_dentry;
@@ -35491,8 +35503,8 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +/* ---------------------------------------------------------------------- */
 +
 +/* Delete all whiteouts in this directory on branch bindex. */
-+static int del_wh_children(struct dentry *h_dentry, struct au_nhash *whlist,
-+			   aufs_bindex_t bindex, struct au_branch *br)
++static int del_wh_children(struct path *h_path, struct au_nhash *whlist,
++			   aufs_bindex_t bindex)
 +{
 +	int err;
 +	unsigned long ul, n;
@@ -35522,7 +35534,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +			if (str->len + AUFS_WH_PFX_LEN <= PATH_MAX) {
 +				memcpy(p, str->name, str->len);
 +				wh_name.len = AUFS_WH_PFX_LEN + str->len;
-+				err = unlink_wh_name(h_dentry, &wh_name, br);
++				err = unlink_wh_name(h_path, &wh_name);
 +				if (!err)
 +					continue;
 +				break;
@@ -35541,16 +35553,15 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +
 +struct del_wh_children_args {
 +	int *errp;
-+	struct dentry *h_dentry;
++	struct path *h_path;
 +	struct au_nhash *whlist;
 +	aufs_bindex_t bindex;
-+	struct au_branch *br;
 +};
 +
 +static void call_del_wh_children(void *args)
 +{
 +	struct del_wh_children_args *a = args;
-+	*a->errp = del_wh_children(a->h_dentry, a->whlist, a->bindex, a->br);
++	*a->errp = del_wh_children(a->h_path, a->whlist, a->bindex);
 +}
 +
 +/* ---------------------------------------------------------------------- */
@@ -35602,7 +35613,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +{
 +	int err;
 +	unsigned int h_nlink;
-+	struct path h_tmp;
++	struct path wh_path;
 +	struct inode *wh_inode, *h_dir;
 +	struct au_branch *br;
 +
@@ -35610,6 +35621,8 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +	IMustLock(h_dir);
 +
 +	br = au_sbr(dir->i_sb, bindex);
++	wh_path.dentry = wh_dentry;
++	wh_path.mnt = au_br_mnt(br);
 +	wh_inode = d_inode(wh_dentry);
 +	inode_lock_nested(wh_inode, AuLsc_I_CHILD);
 +
@@ -35618,15 +35631,14 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +	 * it means this whlist may have an obsoleted entry.
 +	 */
 +	if (!au_test_h_perm_sio(wh_inode, MAY_EXEC | MAY_WRITE))
-+		err = del_wh_children(wh_dentry, whlist, bindex, br);
++		err = del_wh_children(&wh_path, whlist, bindex);
 +	else {
 +		int wkq_err;
 +		struct del_wh_children_args args = {
 +			.errp		= &err,
-+			.h_dentry	= wh_dentry,
++			.h_path		= &wh_path,
 +			.whlist		= whlist,
-+			.bindex		= bindex,
-+			.br		= br
++			.bindex		= bindex
 +		};
 +
 +		wkq_err = au_wkq_wait(call_del_wh_children, &args);
@@ -35636,10 +35648,8 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +	inode_unlock(wh_inode);
 +
 +	if (!err) {
-+		h_tmp.dentry = wh_dentry;
-+		h_tmp.mnt = au_br_mnt(br);
 +		h_nlink = h_dir->i_nlink;
-+		err = vfsub_rmdir(h_dir, &h_tmp);
++		err = vfsub_rmdir(h_dir, &wh_path);
 +		/* some fs doesn't change the parent nlink in some cases */
 +		h_nlink -= h_dir->i_nlink;
 +	}
@@ -35729,11 +35739,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/whout.h	2021-12-03 15:38:59.943313977 +0100
 @@ -0,0 +1,86 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -35762,8 +35772,8 @@ diff -urN /usr/share/empty/fs/aufs/whout.h linux/fs/aufs/whout.h
 +
 +/* whout.c */
 +int au_wh_name_alloc(struct qstr *wh, const struct qstr *name);
-+int au_wh_test(struct dentry *h_parent, struct qstr *wh_name, int try_sio);
-+int au_diropq_test(struct dentry *h_dentry);
++int au_wh_test(struct path *h_ppath, struct qstr *wh_name, int try_sio);
++int au_diropq_test(struct path *h_path);
 +struct au_branch;
 +struct dentry *au_whtmp_lkup(struct dentry *h_parent, struct au_branch *br,
 +			     struct qstr *prefix);
@@ -35819,11 +35829,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/wkq.c	2021-12-03 15:38:59.943313977 +0100
 @@ -0,0 +1,372 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -36195,11 +36205,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/wkq.h	2021-12-03 15:38:59.943313977 +0100
 @@ -0,0 +1,89 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -36288,11 +36298,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/fs/aufs/xattr.c	2021-12-03 15:38:59.943313977 +0100
 @@ -0,0 +1,356 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2014-2020 Junjiro R. Okajima
++ * Copyright (C) 2014-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -36648,11 +36658,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
-@@ -0,0 +1,1925 @@
++++ linux/fs/aufs/xino.c	2021-12-03 15:38:59.943313977 +0100
+@@ -0,0 +1,1926 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -36887,22 +36897,23 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +			     struct file *copy_src)
 +{
 +	struct file *file;
-+	struct dentry *dentry, *parent;
++	struct dentry *dentry;
 +	struct inode *dir, *delegated;
 +	struct qstr *name;
-+	struct path path;
++	struct path ppath, path;
 +	int err, do_unlock;
 +	struct au_xino_lock_dir ldir;
 +
 +	do_unlock = 1;
 +	au_xino_lock_dir(sb, base, &ldir);
 +	dentry = base->dentry;
-+	parent = dentry->d_parent; /* dir inode is locked */
-+	dir = d_inode(parent);
++	ppath.dentry = dentry->d_parent; /* dir inode is locked */
++	ppath.mnt = base->mnt;
++	dir = d_inode(ppath.dentry);
 +	IMustLock(dir);
 +
 +	name = &dentry->d_name;
-+	path.dentry = vfsub_lookup_one_len(name->name, parent, name->len);
++	path.dentry = vfsub_lookup_one_len(name->name, &ppath, name->len);
 +	if (IS_ERR(path.dentry)) {
 +		file = (void *)path.dentry;
 +		pr_err("%pd lookup err %ld\n", dentry, PTR_ERR(path.dentry));
@@ -38577,11 +38588,11 @@ 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	2021-02-22 22:51:59.061411920 +0100
++++ linux/include/uapi/linux/aufs_type.h	2021-12-03 15:38:59.943313977 +0100
 @@ -0,0 +1,452 @@
 +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
 +/*
-+ * Copyright (C) 2005-2020 Junjiro R. Okajima
++ * Copyright (C) 2005-2021 Junjiro R. Okajima
 + *
 + * This program, aufs is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
@@ -38621,7 +38632,7 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin
 +#include <limits.h>
 +#endif /* __KERNEL__ */
 +
-+#define AUFS_VERSION	"5.10-20210215"
++#define AUFS_VERSION	"5.10.82-20211129"
 +
 +/* todo? move this to linux-2.6.19/include/magic.h */
 +#define AUFS_SUPER_MAGIC	('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
@@ -39032,13 +39043,13 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin
 +
 +#endif /* __AUFS_TYPE_H__ */
 SPDX-License-Identifier: GPL-2.0
-aufs5.10 loopback patch
+aufs5.10.82 loopback patch
 
 diff --git a/drivers/block/loop.c b/drivers/block/loop.c
-index 7be7ca3f54547..a163aeade6148 100644
+index d09b1ef4a2b56..ee27ab8e34898 100644
 --- a/drivers/block/loop.c
 +++ b/drivers/block/loop.c
-@@ -650,6 +650,15 @@ static inline void loop_update_dio(struct loop_device *lo)
+@@ -637,6 +637,15 @@ static inline void loop_update_dio(struct loop_device *lo)
  				lo->use_dio);
  }
  
@@ -39054,7 +39065,7 @@ index 7be7ca3f54547..a163aeade6148 100644
  static void loop_reread_partitions(struct loop_device *lo,
  				   struct block_device *bdev)
  {
-@@ -705,6 +714,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+@@ -692,6 +701,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
  			  unsigned int arg)
  {
  	struct file	*file = NULL, *old_file;
@@ -39062,7 +39073,7 @@ index 7be7ca3f54547..a163aeade6148 100644
  	int		error;
  	bool		partscan;
  
-@@ -724,12 +734,19 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+@@ -711,12 +721,19 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
  	file = fget(arg);
  	if (!file)
  		goto out_err;
@@ -39082,7 +39093,7 @@ index 7be7ca3f54547..a163aeade6148 100644
  
  	error = -EINVAL;
  
-@@ -741,6 +758,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+@@ -728,6 +745,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;
@@ -39090,7 +39101,7 @@ index 7be7ca3f54547..a163aeade6148 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));
-@@ -754,6 +772,8 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+@@ -741,6 +759,8 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
  	 * dependency.
  	 */
  	fput(old_file);
@@ -39099,7 +39110,7 @@ index 7be7ca3f54547..a163aeade6148 100644
  	if (partscan)
  		loop_reread_partitions(lo, bdev);
  	return 0;
-@@ -762,6 +782,8 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+@@ -749,6 +769,8 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
  	mutex_unlock(&loop_ctl_mutex);
  	if (file)
  		fput(file);
@@ -39108,7 +39119,7 @@ index 7be7ca3f54547..a163aeade6148 100644
  	return error;
  }
  
-@@ -1090,7 +1112,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
+@@ -1077,7 +1099,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
  			  struct block_device *bdev,
  			  const struct loop_config *config)
  {
@@ -39117,7 +39128,7 @@ index 7be7ca3f54547..a163aeade6148 100644
  	struct inode	*inode;
  	struct address_space *mapping;
  	struct block_device *claimed_bdev = NULL;
-@@ -1106,6 +1128,12 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
+@@ -1093,6 +1115,12 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
  	file = fget(config->fd);
  	if (!file)
  		goto out;
@@ -39130,7 +39141,7 @@ index 7be7ca3f54547..a163aeade6148 100644
  
  	/*
  	 * If we don't hold exclusive handle for the device, upgrade to it
-@@ -1161,6 +1189,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
+@@ -1148,6 +1176,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
  	lo->use_dio = lo->lo_flags & LO_FLAGS_DIRECT_IO;
  	lo->lo_device = bdev;
  	lo->lo_backing_file = file;
@@ -39138,7 +39149,7 @@ index 7be7ca3f54547..a163aeade6148 100644
  	lo->old_gfp_mask = mapping_gfp_mask(mapping);
  	mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
  
-@@ -1214,6 +1243,8 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
+@@ -1202,6 +1231,8 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
  		bd_abort_claiming(bdev, claimed_bdev, loop_configure);
  out_putf:
  	fput(file);
@@ -39147,7 +39158,7 @@ index 7be7ca3f54547..a163aeade6148 100644
  out:
  	/* This is safe: open() is still holding a reference. */
  	module_put(THIS_MODULE);
-@@ -1223,6 +1254,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
+@@ -1211,6 +1242,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
  static int __loop_clr_fd(struct loop_device *lo, bool release)
  {
  	struct file *filp = NULL;
@@ -39155,7 +39166,7 @@ index 7be7ca3f54547..a163aeade6148 100644
  	gfp_t gfp = lo->old_gfp_mask;
  	struct block_device *bdev = lo->lo_device;
  	int err = 0;
-@@ -1246,6 +1278,7 @@ static int __loop_clr_fd(struct loop_device *lo, bool release)
+@@ -1237,6 +1269,7 @@ static int __loop_clr_fd(struct loop_device *lo, bool release)
  
  	spin_lock_irq(&lo->lo_lock);
  	lo->lo_backing_file = NULL;
@@ -39163,7 +39174,7 @@ index 7be7ca3f54547..a163aeade6148 100644
  	spin_unlock_irq(&lo->lo_lock);
  
  	loop_release_xfer(lo);
-@@ -1329,6 +1362,8 @@ static int __loop_clr_fd(struct loop_device *lo, bool release)
+@@ -1320,6 +1353,8 @@ static int __loop_clr_fd(struct loop_device *lo, bool release)
  	 */
  	if (filp)
  		fput(filp);
@@ -39186,7 +39197,7 @@ index af75a5ee40944..1d847cb194ff6 100644
  	void		*key_data; 
  
 diff --git a/fs/aufs/f_op.c b/fs/aufs/f_op.c
-index 5ef279a59bb14..6447c37f98756 100644
+index 99ceca1440449..e49dfe8550329 100644
 --- a/fs/aufs/f_op.c
 +++ b/fs/aufs/f_op.c
 @@ -304,7 +304,7 @@ static ssize_t aufs_read_iter(struct kiocb *kio, struct iov_iter *iov_iter)
@@ -39199,7 +39210,7 @@ index 5ef279a59bb14..6447c37f98756 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 a8b63acc62045..9d97c3af5686a 100644
+index 74347bd75b380..5ef888a1d53f4 100644
 --- a/fs/aufs/loop.c
 +++ b/fs/aufs/loop.c
 @@ -133,3 +133,19 @@ void au_loopback_fin(void)
@@ -39223,7 +39234,7 @@ index a8b63acc62045..9d97c3af5686a 100644
 +	return f;
 +}
 diff --git a/fs/aufs/loop.h b/fs/aufs/loop.h
-index 94f4f80ae33bf..ca1194354aff4 100644
+index 7293bee427f96..3345c098d0d47 100644
 --- a/fs/aufs/loop.h
 +++ b/fs/aufs/loop.h
 @@ -26,6 +26,8 @@ void au_warn_loopback(struct super_block *h_sb);
@@ -39245,7 +39256,7 @@ index 94f4f80ae33bf..ca1194354aff4 100644
  
  #endif /* __KERNEL__ */
 diff --git a/fs/aufs/super.c b/fs/aufs/super.c
-index 589dd01220201..801e0a7faec59 100644
+index 8e2d8464dac0e..ab6e940aac7ab 100644
 --- a/fs/aufs/super.c
 +++ b/fs/aufs/super.c
 @@ -844,7 +844,10 @@ static const struct super_operations aufs_sop = {
@@ -39261,7 +39272,7 @@ index 589dd01220201..801e0a7faec59 100644
  
  /* ---------------------------------------------------------------------- */
 diff --git a/include/linux/fs.h b/include/linux/fs.h
-index 837dd6e727e45..0a05534f8582f 100644
+index 2cc1a02e444c4..e53241a43d244 100644
 --- a/include/linux/fs.h
 +++ b/include/linux/fs.h
 @@ -1967,6 +1967,10 @@ struct super_operations {
diff --git a/update-source.sh b/update-source.sh
new file mode 100755
index 00000000..8d04712b
--- /dev/null
+++ b/update-source.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+set -xe
+
+#BRANCH=aufs5.x-rcN
+BRANCH=aufs5.10.82
+
+# aufs5
+[ -d aufs5-standalone ] || git clone git://github.com/sfjro/aufs5-standalone.git
+cd aufs5-standalone
+git checkout -b ${BRANCH} origin/${BRANCH}
+git pull
+cat aufs5-kbuild.patch aufs5-base.patch aufs5-mmap.patch aufs5-standalone.patch > ../kernel-aufs5.patch
+rm -rf linux && mkdir linux
+cp -a Documentation fs include linux
+diff -urN /usr/share/empty linux | filterdiff -x linux/include/uapi/linux/Kbuild >> ../kernel-aufs5.patch
+cat aufs5-loopback.patch >> ../kernel-aufs5.patch
+
+# other
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/kernel.git/commitdiff/590de76451dee65b7ba9aa9d6267eeba1b08a24c



More information about the pld-cvs-commit mailing list