diff options
Diffstat (limited to 'include/linux/vfs_compat.h')
-rw-r--r-- | include/linux/vfs_compat.h | 53 |
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 */ |