On Fri, Feb 11, 2022 at 03:40:09PM -0800, Andy Lutomirski wrote: > On 1/18/22 05:21, Chao Peng wrote: > > It maintains a memfile_notifier list in shmem_inode_info structure and > > implements memfile_pfn_ops callbacks defined by memfile_notifier. It > > then exposes them to memfile_notifier via > > shmem_get_memfile_notifier_info. > > > > We use SGP_NOALLOC in shmem_get_lock_pfn since the pages should be > > allocated by userspace for private memory. If there is no pages > > allocated at the offset then error should be returned so KVM knows that > > the memory is not private memory. > > > > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> > > Signed-off-by: Chao Peng <chao.p.peng@xxxxxxxxxxxxxxx> > > > static int memfile_get_notifier_info(struct inode *inode, > > struct memfile_notifier_list **list, > > struct memfile_pfn_ops **ops) > > { > > - return -EOPNOTSUPP; > > + int ret = -EOPNOTSUPP; > > +#ifdef CONFIG_SHMEM > > + ret = shmem_get_memfile_notifier_info(inode, list, ops); > > +#endif > > + return ret; > > } > > > +int shmem_get_memfile_notifier_info(struct inode *inode, > > + struct memfile_notifier_list **list, > > + struct memfile_pfn_ops **ops) > > +{ > > + struct shmem_inode_info *info; > > + > > + if (!shmem_mapping(inode->i_mapping)) > > + return -EINVAL; > > + > > + info = SHMEM_I(inode); > > + *list = &info->memfile_notifiers; > > + if (ops) > > + *ops = &shmem_pfn_ops; > > + > > + return 0; > > I can't wrap my head around exactly who is supposed to call these functions > and when, but there appears to be a missing check that the inode is actually > a shmem inode. > > What is this code trying to do? It's very abstract. This is to be called by memfile_(un)register_notifier in patch-03 to allow shmem to be connected to memfile_notifer. But as Mike pointed out, probably introducing a memfile_notifier_register_backing_store() sounds better so backing store (e.g. shmem) can register itself to memfile_notifier. Chao