diff options
Diffstat (limited to 'fs/overlayfs/super.c')
-rw-r--r-- | fs/overlayfs/super.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 9828b7de8999..4882ffb37bae 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c | |||
@@ -891,6 +891,19 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) | |||
891 | dput(temp); | 891 | dput(temp); |
892 | else | 892 | else |
893 | pr_warn("overlayfs: upper fs does not support tmpfile.\n"); | 893 | pr_warn("overlayfs: upper fs does not support tmpfile.\n"); |
894 | |||
895 | /* | ||
896 | * Check if upper/work fs supports trusted.overlay.* | ||
897 | * xattr | ||
898 | */ | ||
899 | err = ovl_do_setxattr(ufs->workdir, OVL_XATTR_OPAQUE, | ||
900 | "0", 1, 0); | ||
901 | if (err) { | ||
902 | ufs->noxattr = true; | ||
903 | pr_warn("overlayfs: upper fs does not support xattr.\n"); | ||
904 | } else { | ||
905 | vfs_removexattr(ufs->workdir, OVL_XATTR_OPAQUE); | ||
906 | } | ||
894 | } | 907 | } |
895 | } | 908 | } |
896 | 909 | ||
@@ -961,7 +974,10 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) | |||
961 | path_put(&workpath); | 974 | path_put(&workpath); |
962 | kfree(lowertmp); | 975 | kfree(lowertmp); |
963 | 976 | ||
964 | oe->__upperdentry = upperpath.dentry; | 977 | if (upperpath.dentry) { |
978 | oe->__upperdentry = upperpath.dentry; | ||
979 | oe->impure = ovl_is_impuredir(upperpath.dentry); | ||
980 | } | ||
965 | for (i = 0; i < numlower; i++) { | 981 | for (i = 0; i < numlower; i++) { |
966 | oe->lowerstack[i].dentry = stack[i].dentry; | 982 | oe->lowerstack[i].dentry = stack[i].dentry; |
967 | oe->lowerstack[i].mnt = ufs->lower_mnt[i]; | 983 | oe->lowerstack[i].mnt = ufs->lower_mnt[i]; |