diff options
Diffstat (limited to 'include/linux/fs.h')
| -rw-r--r-- | include/linux/fs.h | 42 | 
1 files changed, 31 insertions, 11 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 25c40b9f848..c0e53372b08 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -402,6 +402,7 @@ struct inodes_stat_t {  #include <linux/atomic.h>  #include <linux/shrinker.h>  #include <linux/migrate_mode.h> +#include <linux/uidgid.h>  #include <asm/byteorder.h> @@ -469,8 +470,8 @@ typedef void (dio_iodone_t)(struct kiocb *iocb, loff_t offset,  struct iattr {  	unsigned int	ia_valid;  	umode_t		ia_mode; -	uid_t		ia_uid; -	gid_t		ia_gid; +	kuid_t		ia_uid; +	kgid_t		ia_gid;  	loff_t		ia_size;  	struct timespec	ia_atime;  	struct timespec	ia_mtime; @@ -761,8 +762,8 @@ struct posix_acl;  struct inode {  	umode_t			i_mode;  	unsigned short		i_opflags; -	uid_t			i_uid; -	gid_t			i_gid; +	kuid_t			i_uid; +	kgid_t			i_gid;  	unsigned int		i_flags;  #ifdef CONFIG_FS_POSIX_ACL @@ -927,6 +928,31 @@ static inline void i_size_write(struct inode *inode, loff_t i_size)  #endif  } +/* Helper functions so that in most cases filesystems will + * not need to deal directly with kuid_t and kgid_t and can + * instead deal with the raw numeric values that are stored + * in the filesystem. + */ +static inline uid_t i_uid_read(const struct inode *inode) +{ +	return from_kuid(&init_user_ns, inode->i_uid); +} + +static inline gid_t i_gid_read(const struct inode *inode) +{ +	return from_kgid(&init_user_ns, inode->i_gid); +} + +static inline void i_uid_write(struct inode *inode, uid_t uid) +{ +	inode->i_uid = make_kuid(&init_user_ns, uid); +} + +static inline void i_gid_write(struct inode *inode, gid_t gid) +{ +	inode->i_gid = make_kgid(&init_user_ns, gid); +} +  static inline unsigned iminor(const struct inode *inode)  {  	return MINOR(inode->i_rdev); @@ -943,7 +969,7 @@ struct fown_struct {  	rwlock_t lock;          /* protects pid, uid, euid fields */  	struct pid *pid;	/* pid or -pgrp where SIGIO should be sent */  	enum pid_type pid_type;	/* Kind of process group SIGIO should be sent to */ -	uid_t uid, euid;	/* uid/euid of process setting the owner */ +	kuid_t uid, euid;	/* uid/euid of process setting the owner */  	int signum;		/* posix.1b rt signal to be delivered on IO */  }; @@ -1527,12 +1553,6 @@ enum {  #define vfs_check_frozen(sb, level) \  	wait_event((sb)->s_wait_unfrozen, ((sb)->s_frozen < (level))) -/* - * until VFS tracks user namespaces for inodes, just make all files - * belong to init_user_ns - */ -extern struct user_namespace init_user_ns; -#define inode_userns(inode) (&init_user_ns)  extern bool inode_owner_or_capable(const struct inode *inode);  /* not quite ready to be deprecated, but... */  |