kernel_optimize_test/fs/overlayfs
Amir Goldstein 6eaf011144 ovl: fix EIO from lookup of non-indexed upper
Commit fbaf94ee3c ("ovl: don't set origin on broken lower hardlink")
attempt to avoid the condition of non-indexed upper inode with lower
hardlink as origin. If this condition is found, lookup returns EIO.

The protection of commit mentioned above does not cover the case of lower
that is not a hardlink when it is copied up (with either index=off/on)
and then lower is hardlinked while overlay is offline.

Changes to lower layer while overlayfs is offline should not result in
unexpected behavior, so a permanent EIO error after creating a link in
lower layer should not be considered as correct behavior.

This fix replaces EIO error with success in cases where upper has origin
but no index is found, or index is found that does not match upper
inode. In those cases, lookup will not fail and the returned overlay inode
will be hashed by upper inode instead of by lower origin inode.

Fixes: 359f392ca5 ("ovl: lookup index entry for copy up origin")
Cc: <stable@vger.kernel.org> # v4.13
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
2017-10-24 16:06:16 +02:00
..
copy_up.c ovl: fix missing unlock_rename() in ovl_do_copy_up() 2017-10-05 15:53:18 +02:00
dir.c ovl: fix missing unlock_rename() in ovl_do_copy_up() 2017-10-05 15:53:18 +02:00
inode.c ovl: fix EIO from lookup of non-indexed upper 2017-10-24 16:06:16 +02:00
Kconfig ovl: introduce the inodes index dir feature 2017-07-04 22:03:17 +02:00
Makefile ovl: split super.c 2016-12-16 11:02:56 +01:00
namei.c ovl: fix EIO from lookup of non-indexed upper 2017-10-24 16:06:16 +02:00
overlayfs.h ovl: fix EIO from lookup of non-indexed upper 2017-10-24 16:06:16 +02:00
ovl_entry.h ovl: fix regression caused by exclusive upper/work dir protection 2017-10-05 15:53:18 +02:00
readdir.c ovl: fix dentry leak in ovl_indexdir_cleanup() 2017-10-05 15:53:18 +02:00
super.c ovl: add NULL check in ovl_alloc_inode 2017-10-19 16:19:51 +02:00
util.c ovl: fix missing unlock_rename() in ovl_do_copy_up() 2017-10-05 15:53:18 +02:00