Merge: idmapped mount support for hugetlbfs
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/merge_requests/6765 JIRA: https://issues.redhat.com/browse/RHEL-35573 ``` commit 91e78a1eb6b1c0d1a8b434d46b869941e3b3e9e2 Author: Giuseppe Scrivano <gscrivan@redhat.com> Date: Thu Feb 29 16:24:05 2024 +0100 hugetlbfs: support idmapped mounts pass down the idmapped mount information to the different helper functions. Differently, hugetlb_file_setup() will continue to not have any mapping since it is only used from contexts where idmapped mounts are not used. Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com> Link: https://lore.kernel.org/r/20240229152405.105031-1-gscrivan@redhat.com Signed-off-by: Christian Brauner <brauner@kernel.org>``` Signed-off-by: CKI Backport Bot <cki-ci-bot+cki-gitlab-backport-bot@redhat.com> --- <small>Created 2025-04-21 16:09 UTC by backporter - [KWF FAQ](https://red.ht/kernel_workflow_doc) - [Slack #team-kernel-workflow](https://redhat-internal.slack.com/archives/C04LRUPMJQ5) - [Source](https://gitlab.com/cki-project/kernel-workflow/-/blob/main/webhook/utils/backporter.py) - [Documentation](https://gitlab.com/cki-project/kernel-workflow/-/blob/main/docs/README.backporter.md) - [Report an issue](https://issues.redhat.com/secure/CreateIssueDetails!init.jspa?pid=12334433&issuetype=1&priority=4&summary=backporter+webhook+issue&components=kernel-workflow+/+backporter)</small> Approved-by: Ian Kent <ikent@redhat.com> Approved-by: Brian Foster <bfoster@redhat.com> Approved-by: CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> Merged-by: Augusto Caringi <acaringi@redhat.com>
This commit is contained in:
commit
6b5fd9d619
|
@ -923,7 +923,7 @@ static int hugetlbfs_setattr(struct mnt_idmap *idmap,
|
|||
unsigned int ia_valid = attr->ia_valid;
|
||||
struct hugetlbfs_inode_info *info = HUGETLBFS_I(inode);
|
||||
|
||||
error = setattr_prepare(&nop_mnt_idmap, dentry, attr);
|
||||
error = setattr_prepare(idmap, dentry, attr);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
|
@ -940,7 +940,7 @@ static int hugetlbfs_setattr(struct mnt_idmap *idmap,
|
|||
hugetlb_vmtruncate(inode, newsize);
|
||||
}
|
||||
|
||||
setattr_copy(&nop_mnt_idmap, inode, attr);
|
||||
setattr_copy(idmap, inode, attr);
|
||||
mark_inode_dirty(inode);
|
||||
return 0;
|
||||
}
|
||||
|
@ -975,6 +975,7 @@ static struct inode *hugetlbfs_get_root(struct super_block *sb,
|
|||
static struct lock_class_key hugetlbfs_i_mmap_rwsem_key;
|
||||
|
||||
static struct inode *hugetlbfs_get_inode(struct super_block *sb,
|
||||
struct mnt_idmap *idmap,
|
||||
struct inode *dir,
|
||||
umode_t mode, dev_t dev)
|
||||
{
|
||||
|
@ -996,7 +997,7 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb,
|
|||
struct hugetlbfs_inode_info *info = HUGETLBFS_I(inode);
|
||||
|
||||
inode->i_ino = get_next_ino();
|
||||
inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
|
||||
inode_init_owner(idmap, inode, dir, mode);
|
||||
lockdep_set_class(&inode->i_mapping->i_mmap_rwsem,
|
||||
&hugetlbfs_i_mmap_rwsem_key);
|
||||
inode->i_mapping->a_ops = &hugetlbfs_aops;
|
||||
|
@ -1040,7 +1041,7 @@ static int hugetlbfs_mknod(struct mnt_idmap *idmap, struct inode *dir,
|
|||
{
|
||||
struct inode *inode;
|
||||
|
||||
inode = hugetlbfs_get_inode(dir->i_sb, dir, mode, dev);
|
||||
inode = hugetlbfs_get_inode(dir->i_sb, idmap, dir, mode, dev);
|
||||
if (!inode)
|
||||
return -ENOSPC;
|
||||
dir->i_ctime = dir->i_mtime = current_time(dir);
|
||||
|
@ -1052,7 +1053,7 @@ static int hugetlbfs_mknod(struct mnt_idmap *idmap, struct inode *dir,
|
|||
static int hugetlbfs_mkdir(struct mnt_idmap *idmap, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
int retval = hugetlbfs_mknod(&nop_mnt_idmap, dir, dentry,
|
||||
int retval = hugetlbfs_mknod(idmap, dir, dentry,
|
||||
mode | S_IFDIR, 0);
|
||||
if (!retval)
|
||||
inc_nlink(dir);
|
||||
|
@ -1063,7 +1064,7 @@ static int hugetlbfs_create(struct mnt_idmap *idmap,
|
|||
struct inode *dir, struct dentry *dentry,
|
||||
umode_t mode, bool excl)
|
||||
{
|
||||
return hugetlbfs_mknod(&nop_mnt_idmap, dir, dentry, mode | S_IFREG, 0);
|
||||
return hugetlbfs_mknod(idmap, dir, dentry, mode | S_IFREG, 0);
|
||||
}
|
||||
|
||||
static int hugetlbfs_tmpfile(struct mnt_idmap *idmap,
|
||||
|
@ -1072,7 +1073,7 @@ static int hugetlbfs_tmpfile(struct mnt_idmap *idmap,
|
|||
{
|
||||
struct inode *inode;
|
||||
|
||||
inode = hugetlbfs_get_inode(dir->i_sb, dir, mode | S_IFREG, 0);
|
||||
inode = hugetlbfs_get_inode(dir->i_sb, idmap, dir, mode | S_IFREG, 0);
|
||||
if (!inode)
|
||||
return -ENOSPC;
|
||||
dir->i_ctime = dir->i_mtime = current_time(dir);
|
||||
|
@ -1084,10 +1085,11 @@ static int hugetlbfs_symlink(struct mnt_idmap *idmap,
|
|||
struct inode *dir, struct dentry *dentry,
|
||||
const char *symname)
|
||||
{
|
||||
const umode_t mode = S_IFLNK|S_IRWXUGO;
|
||||
struct inode *inode;
|
||||
int error = -ENOSPC;
|
||||
|
||||
inode = hugetlbfs_get_inode(dir->i_sb, dir, S_IFLNK|S_IRWXUGO, 0);
|
||||
inode = hugetlbfs_get_inode(dir->i_sb, idmap, dir, mode, 0);
|
||||
if (inode) {
|
||||
int l = strlen(symname)+1;
|
||||
error = page_symlink(inode, symname, l);
|
||||
|
@ -1554,6 +1556,7 @@ static struct file_system_type hugetlbfs_fs_type = {
|
|||
.init_fs_context = hugetlbfs_init_fs_context,
|
||||
.parameters = hugetlb_fs_parameters,
|
||||
.kill_sb = kill_litter_super,
|
||||
.fs_flags = FS_ALLOW_IDMAP,
|
||||
};
|
||||
|
||||
static struct vfsmount *hugetlbfs_vfsmount[HUGE_MAX_HSTATE];
|
||||
|
@ -1607,7 +1610,9 @@ struct file *hugetlb_file_setup(const char *name, size_t size,
|
|||
}
|
||||
|
||||
file = ERR_PTR(-ENOSPC);
|
||||
inode = hugetlbfs_get_inode(mnt->mnt_sb, NULL, S_IFREG | S_IRWXUGO, 0);
|
||||
/* hugetlbfs_vfsmount[] mounts do not use idmapped mounts. */
|
||||
inode = hugetlbfs_get_inode(mnt->mnt_sb, &nop_mnt_idmap, NULL,
|
||||
S_IFREG | S_IRWXUGO, 0);
|
||||
if (!inode)
|
||||
goto out;
|
||||
if (creat_flags == HUGETLB_SHMFS_INODE)
|
||||
|
|
Loading…
Reference in New Issue