On Thu 21-01-21 14:27:18, Mike Rapoport wrote: > +static struct file *secretmem_file_create(unsigned long flags) > +{ > + struct file *file = ERR_PTR(-ENOMEM); > + struct secretmem_ctx *ctx; > + struct inode *inode; > + > + inode = alloc_anon_inode(secretmem_mnt->mnt_sb); > + if (IS_ERR(inode)) > + return ERR_CAST(inode); > + > + ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); > + if (!ctx) > + goto err_free_inode; > + > + file = alloc_file_pseudo(inode, secretmem_mnt, "secretmem", > + O_RDWR, &secretmem_fops); > + if (IS_ERR(file)) > + goto err_free_ctx; > + > + mapping_set_unevictable(inode->i_mapping); Btw. you need also mapping_set_gfp_mask(mapping, GFP_HIGHUSER) because the default is GFP_HIGHUSER_MOVABLE and you do not support migration so no pages from movable zones should be allowed. -- Michal Hocko SUSE Labs