summaryrefslogtreecommitdiffstats
path: root/include/linux/vfs_compat.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/vfs_compat.h')
-rw-r--r--include/linux/vfs_compat.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/include/linux/vfs_compat.h b/include/linux/vfs_compat.h
index bcec1146a..97220c2fe 100644
--- a/include/linux/vfs_compat.h
+++ b/include/linux/vfs_compat.h
@@ -28,6 +28,7 @@
#define _ZFS_VFS_H
#include <sys/taskq.h>
+#include <sys/cred.h>
#include <linux/backing-dev.h>
/*
@@ -352,6 +353,58 @@ static inline struct inode *file_inode(const struct file *f)
}
#endif /* HAVE_FILE_INODE */
+#ifdef HAVE_KUID_HELPERS
+static inline uid_t zfs_uid_read_impl(struct inode *ip)
+{
+ return (from_kuid(kcred->user_ns, ip->i_uid));
+}
+
+static inline uid_t zfs_uid_read(struct inode *ip)
+{
+ return (zfs_uid_read_impl(ip));
+}
+
+static inline gid_t zfs_gid_read_impl(struct inode *ip)
+{
+ return (from_kgid(kcred->user_ns, ip->i_gid));
+}
+
+static inline gid_t zfs_gid_read(struct inode *ip)
+{
+ return (zfs_gid_read_impl(ip));
+}
+
+static inline void zfs_uid_write(struct inode *ip, uid_t uid)
+{
+ ip->i_uid = make_kuid(kcred->user_ns, uid);
+}
+
+static inline void zfs_gid_write(struct inode *ip, gid_t gid)
+{
+ ip->i_gid = make_kgid(kcred->user_ns, gid);
+}
+#else
+static inline uid_t zfs_uid_read(struct inode *ip)
+{
+ return (ip->i_uid);
+}
+
+static inline gid_t zfs_gid_read(struct inode *ip)
+{
+ return (ip->i_gid);
+}
+
+static inline void zfs_uid_write(struct inode *ip, uid_t uid)
+{
+ ip->i_uid = uid;
+}
+
+static inline void zfs_gid_write(struct inode *ip, gid_t gid)
+{
+ ip->i_gid = gid;
+}
+#endif
+
/*
* 2.6.38 API change
*/