summaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/vfs_compat.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/include/linux/vfs_compat.h b/include/linux/vfs_compat.h
index 97220c2fe..fa12ba95a 100644
--- a/include/linux/vfs_compat.h
+++ b/include/linux/vfs_compat.h
@@ -356,7 +356,11 @@ static inline struct inode *file_inode(const struct file *f)
#ifdef HAVE_KUID_HELPERS
static inline uid_t zfs_uid_read_impl(struct inode *ip)
{
+#ifdef HAVE_SUPER_USER_NS
+ return (from_kuid(ip->i_sb->s_user_ns, ip->i_uid));
+#else
return (from_kuid(kcred->user_ns, ip->i_uid));
+#endif
}
static inline uid_t zfs_uid_read(struct inode *ip)
@@ -366,7 +370,11 @@ static inline uid_t zfs_uid_read(struct inode *ip)
static inline gid_t zfs_gid_read_impl(struct inode *ip)
{
+#ifdef HAVE_SUPER_USER_NS
+ return (from_kgid(ip->i_sb->s_user_ns, ip->i_gid));
+#else
return (from_kgid(kcred->user_ns, ip->i_gid));
+#endif
}
static inline gid_t zfs_gid_read(struct inode *ip)
@@ -376,13 +384,22 @@ static inline gid_t zfs_gid_read(struct inode *ip)
static inline void zfs_uid_write(struct inode *ip, uid_t uid)
{
+#ifdef HAVE_SUPER_USER_NS
+ ip->i_uid = make_kuid(ip->i_sb->s_user_ns, uid);
+#else
ip->i_uid = make_kuid(kcred->user_ns, uid);
+#endif
}
static inline void zfs_gid_write(struct inode *ip, gid_t gid)
{
+#ifdef HAVE_SUPER_USER_NS
+ ip->i_gid = make_kgid(ip->i_sb->s_user_ns, gid);
+#else
ip->i_gid = make_kgid(kcred->user_ns, gid);
+#endif
}
+
#else
static inline uid_t zfs_uid_read(struct inode *ip)
{