android_kernel_motorola_sm6375/fs/overlayfs
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Miklos Szeredi d101a12595 fs: add file_dentry()
This series fixes bugs in nfs and ext4 due to 4bacc9c923 ("overlayfs:
Make f_path always point to the overlay and f_inode to the underlay").

Regular files opened on overlayfs will result in the file being opened on
the underlying filesystem, while f_path points to the overlayfs
mount/dentry.

This confuses filesystems which get the dentry from struct file and assume
it's theirs.

Add a new helper, file_dentry() [*], to get the filesystem's own dentry
from the file.  This checks file->f_path.dentry->d_flags against
DCACHE_OP_REAL, and returns file->f_path.dentry if DCACHE_OP_REAL is not
set (this is the common, non-overlayfs case).

In the uncommon case it will call into overlayfs's ->d_real() to get the
underlying dentry, matching file_inode(file).

The reason we need to check against the inode is that if the file is copied
up while being open, d_real() would return the upper dentry, while the open
file comes from the lower dentry.

[*] If possible, it's better simply to use file_inode() instead.

Signed-off-by: Miklos Szeredi <[email protected]>
Signed-off-by: Theodore Ts'o <[email protected]>
Tested-by: Goldwyn Rodrigues <[email protected]>
Reviewed-by: Trond Myklebust <[email protected]>
Cc: <[email protected]> # v4.2
Cc: David Howells <[email protected]>
Cc: Al Viro <[email protected]>
Cc: Daniel Axtens <[email protected]>
2016-03-26 16:14:37 -04:00
..
copy_up.c ovl: fixed coding style warning 2016-03-21 17:31:45 +01:00
dir.c ovl: cleanup unused var in rename2 2016-03-21 17:31:46 +01:00
inode.c ovl: copy new uid/gid into overlayfs runtime inode 2016-03-03 17:17:46 +01:00
Kconfig ovl: rename filesystem type to "overlay" 2014-11-20 16:39:59 +01:00
Makefile ovl: rename filesystem type to "overlay" 2014-11-20 16:39:59 +01:00
overlayfs.h ovl: Ensure upper filesystem supports d_type 2016-03-21 17:31:45 +01:00
readdir.c ovl: rename is_merge to is_lowest 2016-03-21 17:31:46 +01:00
super.c fs: add file_dentry() 2016-03-26 16:14:37 -04:00