linux/fs/overlayfs
Miklos Szeredi 83552eacdf ovl: fix WARN_ON nlink drop to zero
Changes to underlying layers should not cause WARN_ON(), but this repro
does:

 mkdir w l u mnt
 sudo mount -t overlay -o workdir=w,lowerdir=l,upperdir=u overlay mnt
 touch mnt/h
 ln u/h u/k
 rm -rf mnt/k
 rm -rf mnt/h
 dmesg

 ------------[ cut here ]------------
 WARNING: CPU: 1 PID: 116244 at fs/inode.c:302 drop_nlink+0x28/0x40

After upper hardlinks were added while overlay is mounted, unlinking all
overlay hardlinks drops overlay nlink to zero before all upper inodes
are unlinked.

After unlink/rename prevent i_nlink from going to zero if there are still
hashed aliases (i.e. cached hard links to the victim) remaining.

Reported-by: Phasip <phasip@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
2020-03-27 16:51:02 +01:00
..
copy_up.c ovl: ignore failure to copy up unknown xattrs 2020-03-17 15:04:22 +01:00
dir.c ovl: fix WARN_ON nlink drop to zero 2020-03-27 16:51:02 +01:00
export.c ovl: ovl_obtain_alias(): don't call d_instantiate_anon() for old 2020-03-17 15:04:23 +01:00
file.c ovl: fix lockdep warning for async write 2020-03-13 15:53:06 +01:00
inode.c ovl: fix a typo in comment 2020-03-17 15:04:23 +01:00
Kconfig ovl: fix some xino configurations 2020-03-13 15:53:06 +01:00
Makefile treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
namei.c ovl: allow remote upper 2020-03-17 15:04:22 +01:00
overlayfs.h ovl: replace zero-length array with flexible-array member 2020-03-17 15:04:23 +01:00
ovl_entry.h ovl: layer is const 2020-01-24 09:46:45 +01:00
readdir.c ovl: layer is const 2020-01-24 09:46:45 +01:00
super.c ovl: strict upper fs requirements for remote upper fs 2020-03-17 15:04:23 +01:00
util.c ovl: allow remote upper 2020-03-17 15:04:22 +01:00