mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-27 12:57:53 +00:00
ovl: fix wrong WARN_ON() in ovl_cache_update_ino()
commit4c37e71b71
upstream. The WARN_ON() that child entry is always on overlay st_dev became wrong when we allowed this function to update d_ino in non-samefs setup with xino enabled. It is not true in case of xino bits overflow on a non-dir inode. Leave the WARN_ON() only for directories, where assertion is still true. Fixes:adbf4f7ea8
("ovl: consistent d_ino for non-samefs with xino") Cc: <stable@vger.kernel.org> # v4.17+ Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
03572189d6
commit
809e16a6ee
1 changed files with 7 additions and 1 deletions
|
@ -504,7 +504,13 @@ static int ovl_cache_update_ino(struct path *path, struct ovl_cache_entry *p)
|
|||
if (err)
|
||||
goto fail;
|
||||
|
||||
WARN_ON_ONCE(dir->d_sb->s_dev != stat.dev);
|
||||
/*
|
||||
* Directory inode is always on overlay st_dev.
|
||||
* Non-dir with ovl_same_dev() could be on pseudo st_dev in case
|
||||
* of xino bits overflow.
|
||||
*/
|
||||
WARN_ON_ONCE(S_ISDIR(stat.mode) &&
|
||||
dir->d_sb->s_dev != stat.dev);
|
||||
ino = stat.ino;
|
||||
} else if (xinobits && !OVL_TYPE_UPPER(type)) {
|
||||
ino = ovl_remap_lower_ino(ino, xinobits,
|
||||
|
|
Loading…
Reference in a new issue