mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-27 06:04:23 +08:00
fs: port ->fileattr_set() to pass mnt_idmap
Convert to struct mnt_idmap.
Last cycle we merged the necessary infrastructure in
256c8aed2b
("fs: introduce dedicated idmap type for mounts").
This is just the conversion to struct mnt_idmap.
Currently we still pass around the plain namespace that was attached to a
mount. This is in general pretty convenient but it makes it easy to
conflate namespaces that are relevant on the filesystem with namespaces
that are relevent on the mount level. Especially for non-vfs developers
without detailed knowledge in this area this can be a potential source for
bugs.
Once the conversion to struct mnt_idmap is done all helpers down to the
really low-level helpers will take a struct mnt_idmap argument instead of
two namespace arguments. This way it becomes impossible to conflate the two
eliminating the possibility of any bugs. All of the vfs and all filesystems
only operate on struct mnt_idmap.
Acked-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org>
This commit is contained in:
parent
13e83a4923
commit
8782a9aea3
@ -81,7 +81,7 @@ prototypes::
|
|||||||
umode_t create_mode);
|
umode_t create_mode);
|
||||||
int (*tmpfile) (struct mnt_idmap *, struct inode *,
|
int (*tmpfile) (struct mnt_idmap *, struct inode *,
|
||||||
struct file *, umode_t);
|
struct file *, umode_t);
|
||||||
int (*fileattr_set)(struct user_namespace *mnt_userns,
|
int (*fileattr_set)(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
int (*fileattr_get)(struct dentry *dentry, struct fileattr *fa);
|
int (*fileattr_get)(struct dentry *dentry, struct fileattr *fa);
|
||||||
struct posix_acl * (*get_acl)(struct mnt_idmap *, struct dentry *, int);
|
struct posix_acl * (*get_acl)(struct mnt_idmap *, struct dentry *, int);
|
||||||
|
@ -445,7 +445,7 @@ As of kernel 2.6.22, the following members are defined:
|
|||||||
int (*tmpfile) (struct mnt_idmap *, struct inode *, struct file *, umode_t);
|
int (*tmpfile) (struct mnt_idmap *, struct inode *, struct file *, umode_t);
|
||||||
struct posix_acl * (*get_acl)(struct mnt_idmap *, struct dentry *, int);
|
struct posix_acl * (*get_acl)(struct mnt_idmap *, struct dentry *, int);
|
||||||
int (*set_acl)(struct mnt_idmap *, struct dentry *, struct posix_acl *, int);
|
int (*set_acl)(struct mnt_idmap *, struct dentry *, struct posix_acl *, int);
|
||||||
int (*fileattr_set)(struct user_namespace *mnt_userns,
|
int (*fileattr_set)(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
int (*fileattr_get)(struct dentry *dentry, struct fileattr *fa);
|
int (*fileattr_get)(struct dentry *dentry, struct fileattr *fa);
|
||||||
};
|
};
|
||||||
|
@ -243,7 +243,7 @@ int btrfs_fileattr_get(struct dentry *dentry, struct fileattr *fa)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int btrfs_fileattr_set(struct user_namespace *mnt_userns,
|
int btrfs_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
long btrfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
|
long btrfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
|
||||||
long btrfs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
|
long btrfs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
|
||||||
int btrfs_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
int btrfs_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
||||||
int btrfs_fileattr_set(struct user_namespace *mnt_userns,
|
int btrfs_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
int btrfs_ioctl_get_supported_features(void __user *arg);
|
int btrfs_ioctl_get_supported_features(void __user *arg);
|
||||||
void btrfs_sync_inode_flags_to_i_flags(struct inode *inode);
|
void btrfs_sync_inode_flags_to_i_flags(struct inode *inode);
|
||||||
|
@ -1110,13 +1110,13 @@ static int ecryptfs_fileattr_get(struct dentry *dentry, struct fileattr *fa)
|
|||||||
return vfs_fileattr_get(ecryptfs_dentry_to_lower(dentry), fa);
|
return vfs_fileattr_get(ecryptfs_dentry_to_lower(dentry), fa);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ecryptfs_fileattr_set(struct user_namespace *mnt_userns,
|
static int ecryptfs_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry);
|
struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry);
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
rc = vfs_fileattr_set(&init_user_ns, lower_dentry, fa);
|
rc = vfs_fileattr_set(&nop_mnt_idmap, lower_dentry, fa);
|
||||||
fsstack_copy_attr_all(d_inode(dentry), d_inode(lower_dentry));
|
fsstack_copy_attr_all(d_inode(dentry), d_inode(lower_dentry));
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -163,7 +163,7 @@ efivarfs_fileattr_get(struct dentry *dentry, struct fileattr *fa)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
efivarfs_fileattr_set(struct user_namespace *mnt_userns,
|
efivarfs_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
unsigned int i_flags = 0;
|
unsigned int i_flags = 0;
|
||||||
|
@ -762,7 +762,7 @@ extern int ext2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
|
|||||||
|
|
||||||
/* ioctl.c */
|
/* ioctl.c */
|
||||||
extern int ext2_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
extern int ext2_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
||||||
extern int ext2_fileattr_set(struct user_namespace *mnt_userns,
|
extern int ext2_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
extern long ext2_ioctl(struct file *, unsigned int, unsigned long);
|
extern long ext2_ioctl(struct file *, unsigned int, unsigned long);
|
||||||
extern long ext2_compat_ioctl(struct file *, unsigned int, unsigned long);
|
extern long ext2_compat_ioctl(struct file *, unsigned int, unsigned long);
|
||||||
|
@ -27,7 +27,7 @@ int ext2_fileattr_get(struct dentry *dentry, struct fileattr *fa)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ext2_fileattr_set(struct user_namespace *mnt_userns,
|
int ext2_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
|
@ -3024,7 +3024,7 @@ extern int ext4_ind_remove_space(handle_t *handle, struct inode *inode,
|
|||||||
/* ioctl.c */
|
/* ioctl.c */
|
||||||
extern long ext4_ioctl(struct file *, unsigned int, unsigned long);
|
extern long ext4_ioctl(struct file *, unsigned int, unsigned long);
|
||||||
extern long ext4_compat_ioctl(struct file *, unsigned int, unsigned long);
|
extern long ext4_compat_ioctl(struct file *, unsigned int, unsigned long);
|
||||||
int ext4_fileattr_set(struct user_namespace *mnt_userns,
|
int ext4_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
int ext4_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
int ext4_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
||||||
extern void ext4_reset_inode_seed(struct inode *inode);
|
extern void ext4_reset_inode_seed(struct inode *inode);
|
||||||
|
@ -979,7 +979,7 @@ int ext4_fileattr_get(struct dentry *dentry, struct fileattr *fa)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ext4_fileattr_set(struct user_namespace *mnt_userns,
|
int ext4_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
|
@ -3477,7 +3477,7 @@ int f2fs_truncate_hole(struct inode *inode, pgoff_t pg_start, pgoff_t pg_end);
|
|||||||
void f2fs_truncate_data_blocks_range(struct dnode_of_data *dn, int count);
|
void f2fs_truncate_data_blocks_range(struct dnode_of_data *dn, int count);
|
||||||
int f2fs_precache_extents(struct inode *inode);
|
int f2fs_precache_extents(struct inode *inode);
|
||||||
int f2fs_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
int f2fs_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
||||||
int f2fs_fileattr_set(struct user_namespace *mnt_userns,
|
int f2fs_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
|
long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
|
||||||
long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
|
long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
|
||||||
|
@ -3092,7 +3092,7 @@ int f2fs_fileattr_get(struct dentry *dentry, struct fileattr *fa)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int f2fs_fileattr_set(struct user_namespace *mnt_userns,
|
int f2fs_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
|
@ -1309,7 +1309,7 @@ long fuse_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
|
|||||||
long fuse_file_compat_ioctl(struct file *file, unsigned int cmd,
|
long fuse_file_compat_ioctl(struct file *file, unsigned int cmd,
|
||||||
unsigned long arg);
|
unsigned long arg);
|
||||||
int fuse_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
int fuse_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
||||||
int fuse_fileattr_set(struct user_namespace *mnt_userns,
|
int fuse_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
|
|
||||||
/* file.c */
|
/* file.c */
|
||||||
|
@ -467,7 +467,7 @@ cleanup:
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int fuse_fileattr_set(struct user_namespace *mnt_userns,
|
int fuse_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
|
@ -273,7 +273,7 @@ out:
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int gfs2_fileattr_set(struct user_namespace *mnt_userns,
|
int gfs2_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
|
@ -111,7 +111,7 @@ extern const struct file_operations gfs2_file_fops_nolock;
|
|||||||
extern const struct file_operations gfs2_dir_fops_nolock;
|
extern const struct file_operations gfs2_dir_fops_nolock;
|
||||||
|
|
||||||
extern int gfs2_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
extern int gfs2_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
||||||
extern int gfs2_fileattr_set(struct user_namespace *mnt_userns,
|
extern int gfs2_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
extern void gfs2_set_inode_flags(struct inode *inode);
|
extern void gfs2_set_inode_flags(struct inode *inode);
|
||||||
|
|
||||||
|
@ -487,7 +487,7 @@ int hfsplus_getattr(struct mnt_idmap *idmap, const struct path *path,
|
|||||||
int hfsplus_file_fsync(struct file *file, loff_t start, loff_t end,
|
int hfsplus_file_fsync(struct file *file, loff_t start, loff_t end,
|
||||||
int datasync);
|
int datasync);
|
||||||
int hfsplus_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
int hfsplus_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
||||||
int hfsplus_fileattr_set(struct user_namespace *mnt_userns,
|
int hfsplus_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
|
|
||||||
/* ioctl.c */
|
/* ioctl.c */
|
||||||
|
@ -655,7 +655,7 @@ int hfsplus_fileattr_get(struct dentry *dentry, struct fileattr *fa)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hfsplus_fileattr_set(struct user_namespace *mnt_userns,
|
int hfsplus_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
|
16
fs/ioctl.c
16
fs/ioctl.c
@ -651,7 +651,7 @@ static int fileattr_set_prepare(struct inode *inode,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* vfs_fileattr_set - change miscellaneous file attributes
|
* vfs_fileattr_set - change miscellaneous file attributes
|
||||||
* @mnt_userns: user namespace of the mount
|
* @idmap: idmap of the mount
|
||||||
* @dentry: the object to change
|
* @dentry: the object to change
|
||||||
* @fa: fileattr pointer
|
* @fa: fileattr pointer
|
||||||
*
|
*
|
||||||
@ -665,7 +665,7 @@ static int fileattr_set_prepare(struct inode *inode,
|
|||||||
*
|
*
|
||||||
* Return: 0 on success, or a negative error on failure.
|
* Return: 0 on success, or a negative error on failure.
|
||||||
*/
|
*/
|
||||||
int vfs_fileattr_set(struct user_namespace *mnt_userns, struct dentry *dentry,
|
int vfs_fileattr_set(struct mnt_idmap *idmap, struct dentry *dentry,
|
||||||
struct fileattr *fa)
|
struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
@ -675,7 +675,7 @@ int vfs_fileattr_set(struct user_namespace *mnt_userns, struct dentry *dentry,
|
|||||||
if (!inode->i_op->fileattr_set)
|
if (!inode->i_op->fileattr_set)
|
||||||
return -ENOIOCTLCMD;
|
return -ENOIOCTLCMD;
|
||||||
|
|
||||||
if (!inode_owner_or_capable(mnt_userns, inode))
|
if (!inode_owner_or_capable(mnt_idmap_owner(idmap), inode))
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
||||||
inode_lock(inode);
|
inode_lock(inode);
|
||||||
@ -693,7 +693,7 @@ int vfs_fileattr_set(struct user_namespace *mnt_userns, struct dentry *dentry,
|
|||||||
}
|
}
|
||||||
err = fileattr_set_prepare(inode, &old_ma, fa);
|
err = fileattr_set_prepare(inode, &old_ma, fa);
|
||||||
if (!err)
|
if (!err)
|
||||||
err = inode->i_op->fileattr_set(mnt_userns, dentry, fa);
|
err = inode->i_op->fileattr_set(idmap, dentry, fa);
|
||||||
}
|
}
|
||||||
inode_unlock(inode);
|
inode_unlock(inode);
|
||||||
|
|
||||||
@ -714,7 +714,7 @@ static int ioctl_getflags(struct file *file, unsigned int __user *argp)
|
|||||||
|
|
||||||
static int ioctl_setflags(struct file *file, unsigned int __user *argp)
|
static int ioctl_setflags(struct file *file, unsigned int __user *argp)
|
||||||
{
|
{
|
||||||
struct user_namespace *mnt_userns = file_mnt_user_ns(file);
|
struct mnt_idmap *idmap = file_mnt_idmap(file);
|
||||||
struct dentry *dentry = file->f_path.dentry;
|
struct dentry *dentry = file->f_path.dentry;
|
||||||
struct fileattr fa;
|
struct fileattr fa;
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
@ -725,7 +725,7 @@ static int ioctl_setflags(struct file *file, unsigned int __user *argp)
|
|||||||
err = mnt_want_write_file(file);
|
err = mnt_want_write_file(file);
|
||||||
if (!err) {
|
if (!err) {
|
||||||
fileattr_fill_flags(&fa, flags);
|
fileattr_fill_flags(&fa, flags);
|
||||||
err = vfs_fileattr_set(mnt_userns, dentry, &fa);
|
err = vfs_fileattr_set(idmap, dentry, &fa);
|
||||||
mnt_drop_write_file(file);
|
mnt_drop_write_file(file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -746,7 +746,7 @@ static int ioctl_fsgetxattr(struct file *file, void __user *argp)
|
|||||||
|
|
||||||
static int ioctl_fssetxattr(struct file *file, void __user *argp)
|
static int ioctl_fssetxattr(struct file *file, void __user *argp)
|
||||||
{
|
{
|
||||||
struct user_namespace *mnt_userns = file_mnt_user_ns(file);
|
struct mnt_idmap *idmap = file_mnt_idmap(file);
|
||||||
struct dentry *dentry = file->f_path.dentry;
|
struct dentry *dentry = file->f_path.dentry;
|
||||||
struct fileattr fa;
|
struct fileattr fa;
|
||||||
int err;
|
int err;
|
||||||
@ -755,7 +755,7 @@ static int ioctl_fssetxattr(struct file *file, void __user *argp)
|
|||||||
if (!err) {
|
if (!err) {
|
||||||
err = mnt_want_write_file(file);
|
err = mnt_want_write_file(file);
|
||||||
if (!err) {
|
if (!err) {
|
||||||
err = vfs_fileattr_set(mnt_userns, dentry, &fa);
|
err = vfs_fileattr_set(idmap, dentry, &fa);
|
||||||
mnt_drop_write_file(file);
|
mnt_drop_write_file(file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@ int jfs_fileattr_get(struct dentry *dentry, struct fileattr *fa)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int jfs_fileattr_set(struct user_namespace *mnt_userns,
|
int jfs_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
|
@ -10,7 +10,7 @@ struct fid;
|
|||||||
extern struct inode *ialloc(struct inode *, umode_t);
|
extern struct inode *ialloc(struct inode *, umode_t);
|
||||||
extern int jfs_fsync(struct file *, loff_t, loff_t, int);
|
extern int jfs_fsync(struct file *, loff_t, loff_t, int);
|
||||||
extern int jfs_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
extern int jfs_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
||||||
extern int jfs_fileattr_set(struct user_namespace *mnt_userns,
|
extern int jfs_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
extern long jfs_ioctl(struct file *, unsigned int, unsigned long);
|
extern long jfs_ioctl(struct file *, unsigned int, unsigned long);
|
||||||
extern struct inode *jfs_iget(struct super_block *, unsigned long);
|
extern struct inode *jfs_iget(struct super_block *, unsigned long);
|
||||||
|
@ -128,7 +128,7 @@ int nilfs_fileattr_get(struct dentry *dentry, struct fileattr *fa)
|
|||||||
/**
|
/**
|
||||||
* nilfs_fileattr_set - ioctl to support chattr
|
* nilfs_fileattr_set - ioctl to support chattr
|
||||||
*/
|
*/
|
||||||
int nilfs_fileattr_set(struct user_namespace *mnt_userns,
|
int nilfs_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
|
@ -242,7 +242,7 @@ extern int nilfs_sync_file(struct file *, loff_t, loff_t, int);
|
|||||||
|
|
||||||
/* ioctl.c */
|
/* ioctl.c */
|
||||||
int nilfs_fileattr_get(struct dentry *dentry, struct fileattr *m);
|
int nilfs_fileattr_get(struct dentry *dentry, struct fileattr *m);
|
||||||
int nilfs_fileattr_set(struct user_namespace *mnt_userns,
|
int nilfs_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
long nilfs_ioctl(struct file *, unsigned int, unsigned long);
|
long nilfs_ioctl(struct file *, unsigned int, unsigned long);
|
||||||
long nilfs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
|
long nilfs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
|
||||||
|
@ -82,7 +82,7 @@ int ocfs2_fileattr_get(struct dentry *dentry, struct fileattr *fa)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ocfs2_fileattr_set(struct user_namespace *mnt_userns,
|
int ocfs2_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#define OCFS2_IOCTL_PROTO_H
|
#define OCFS2_IOCTL_PROTO_H
|
||||||
|
|
||||||
int ocfs2_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
int ocfs2_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
||||||
int ocfs2_fileattr_set(struct user_namespace *mnt_userns,
|
int ocfs2_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
long ocfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
|
long ocfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
|
||||||
long ocfs2_compat_ioctl(struct file *file, unsigned cmd, unsigned long arg);
|
long ocfs2_compat_ioctl(struct file *file, unsigned cmd, unsigned long arg);
|
||||||
|
@ -944,7 +944,7 @@ static int orangefs_fileattr_get(struct dentry *dentry, struct fileattr *fa)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int orangefs_fileattr_set(struct user_namespace *mnt_userns,
|
static int orangefs_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
u64 val = 0;
|
u64 val = 0;
|
||||||
|
@ -757,10 +757,10 @@ int ovl_real_fileattr_set(const struct path *realpath, struct fileattr *fa)
|
|||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
return vfs_fileattr_set(mnt_user_ns(realpath->mnt), realpath->dentry, fa);
|
return vfs_fileattr_set(mnt_idmap(realpath->mnt), realpath->dentry, fa);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ovl_fileattr_set(struct user_namespace *mnt_userns,
|
int ovl_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
|
@ -718,7 +718,7 @@ void ovl_aio_request_cache_destroy(void);
|
|||||||
int ovl_real_fileattr_get(const struct path *realpath, struct fileattr *fa);
|
int ovl_real_fileattr_get(const struct path *realpath, struct fileattr *fa);
|
||||||
int ovl_real_fileattr_set(const struct path *realpath, struct fileattr *fa);
|
int ovl_real_fileattr_set(const struct path *realpath, struct fileattr *fa);
|
||||||
int ovl_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
int ovl_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
||||||
int ovl_fileattr_set(struct user_namespace *mnt_userns,
|
int ovl_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
|
|
||||||
/* copy_up.c */
|
/* copy_up.c */
|
||||||
|
@ -24,7 +24,7 @@ int reiserfs_fileattr_get(struct dentry *dentry, struct fileattr *fa)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int reiserfs_fileattr_set(struct user_namespace *mnt_userns,
|
int reiserfs_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
|
@ -3407,7 +3407,7 @@ __u32 r5_hash(const signed char *msg, int len);
|
|||||||
|
|
||||||
/* prototypes from ioctl.c */
|
/* prototypes from ioctl.c */
|
||||||
int reiserfs_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
int reiserfs_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
||||||
int reiserfs_fileattr_set(struct user_namespace *mnt_userns,
|
int reiserfs_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
long reiserfs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
|
long reiserfs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
|
||||||
long reiserfs_compat_ioctl(struct file *filp,
|
long reiserfs_compat_ioctl(struct file *filp,
|
||||||
|
@ -144,7 +144,7 @@ int ubifs_fileattr_get(struct dentry *dentry, struct fileattr *fa)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ubifs_fileattr_set(struct user_namespace *mnt_userns,
|
int ubifs_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
|
@ -2085,7 +2085,7 @@ void ubifs_destroy_size_tree(struct ubifs_info *c);
|
|||||||
|
|
||||||
/* ioctl.c */
|
/* ioctl.c */
|
||||||
int ubifs_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
int ubifs_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
||||||
int ubifs_fileattr_set(struct user_namespace *mnt_userns,
|
int ubifs_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
long ubifs_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
|
long ubifs_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
|
||||||
void ubifs_set_inode_flags(struct inode *inode);
|
void ubifs_set_inode_flags(struct inode *inode);
|
||||||
|
@ -1297,10 +1297,11 @@ xfs_ioctl_setattr_check_projid(
|
|||||||
|
|
||||||
int
|
int
|
||||||
xfs_fileattr_set(
|
xfs_fileattr_set(
|
||||||
struct user_namespace *mnt_userns,
|
struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry,
|
struct dentry *dentry,
|
||||||
struct fileattr *fa)
|
struct fileattr *fa)
|
||||||
{
|
{
|
||||||
|
struct user_namespace *mnt_userns = mnt_idmap_owner(idmap);
|
||||||
struct xfs_inode *ip = XFS_I(d_inode(dentry));
|
struct xfs_inode *ip = XFS_I(d_inode(dentry));
|
||||||
struct xfs_mount *mp = ip->i_mount;
|
struct xfs_mount *mp = ip->i_mount;
|
||||||
struct xfs_trans *tp;
|
struct xfs_trans *tp;
|
||||||
|
@ -49,7 +49,7 @@ xfs_fileattr_get(
|
|||||||
|
|
||||||
extern int
|
extern int
|
||||||
xfs_fileattr_set(
|
xfs_fileattr_set(
|
||||||
struct user_namespace *mnt_userns,
|
struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry,
|
struct dentry *dentry,
|
||||||
struct fileattr *fa);
|
struct fileattr *fa);
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ static inline bool fileattr_has_fsx(const struct fileattr *fa)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int vfs_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
int vfs_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
||||||
int vfs_fileattr_set(struct user_namespace *mnt_userns, struct dentry *dentry,
|
int vfs_fileattr_set(struct mnt_idmap *idmap, struct dentry *dentry,
|
||||||
struct fileattr *fa);
|
struct fileattr *fa);
|
||||||
|
|
||||||
#endif /* _LINUX_FILEATTR_H */
|
#endif /* _LINUX_FILEATTR_H */
|
||||||
|
@ -2168,7 +2168,7 @@ struct inode_operations {
|
|||||||
int);
|
int);
|
||||||
int (*set_acl)(struct mnt_idmap *, struct dentry *,
|
int (*set_acl)(struct mnt_idmap *, struct dentry *,
|
||||||
struct posix_acl *, int);
|
struct posix_acl *, int);
|
||||||
int (*fileattr_set)(struct user_namespace *mnt_userns,
|
int (*fileattr_set)(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa);
|
struct dentry *dentry, struct fileattr *fa);
|
||||||
int (*fileattr_get)(struct dentry *dentry, struct fileattr *fa);
|
int (*fileattr_get)(struct dentry *dentry, struct fileattr *fa);
|
||||||
} ____cacheline_aligned;
|
} ____cacheline_aligned;
|
||||||
|
@ -3229,7 +3229,7 @@ static int shmem_fileattr_get(struct dentry *dentry, struct fileattr *fa)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int shmem_fileattr_set(struct user_namespace *mnt_userns,
|
static int shmem_fileattr_set(struct mnt_idmap *idmap,
|
||||||
struct dentry *dentry, struct fileattr *fa)
|
struct dentry *dentry, struct fileattr *fa)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
|
Loading…
Reference in New Issue
Block a user