* [PATCH v2] mm: huge_memory: move file_thp_enabled() into huge_memory.c @ 2024-10-17 14:14 Kefeng Wang 2024-10-17 14:14 ` [PATCH v2] mm: shmem: remove __shmem_huge_global_enabled() Kefeng Wang 0 siblings, 1 reply; 5+ messages in thread From: Kefeng Wang @ 2024-10-17 14:14 UTC (permalink / raw) To: Andrew Morton, Hugh Dickins Cc: David Hildenbrand, Barry Song, Ryan Roberts, Baolin Wang, Matthew Wilcox, linux-mm, Kefeng Wang The file_thp_enabled() only used in __thp_vma_allowable_orders(), so move it into huge_memory.c, also check READ_ONLY_THP_FOR_FS ahead to avoid unnecessary code if config disabled. Acked-by: David Hildenbrand <david@redhat.com> Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> --- v2: - Add ACK/RB and send separately include/linux/huge_mm.h | 13 ------------- mm/huge_memory.c | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index d5f824d5e1c5..c59e5aa9b081 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -253,19 +253,6 @@ static inline unsigned long thp_vma_suitable_orders(struct vm_area_struct *vma, return orders; } -static inline bool file_thp_enabled(struct vm_area_struct *vma) -{ - struct inode *inode; - - if (!vma->vm_file) - return false; - - inode = vma->vm_file->f_inode; - - return (IS_ENABLED(CONFIG_READ_ONLY_THP_FOR_FS)) && - !inode_is_open_for_write(inode) && S_ISREG(inode->i_mode); -} - unsigned long __thp_vma_allowable_orders(struct vm_area_struct *vma, unsigned long vm_flags, unsigned long tva_flags, diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 589876d14bb8..830d6aa5bf97 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -83,6 +83,21 @@ unsigned long huge_anon_orders_madvise __read_mostly; unsigned long huge_anon_orders_inherit __read_mostly; static bool anon_orders_configured __initdata; +static inline bool file_thp_enabled(struct vm_area_struct *vma) +{ + struct inode *inode; + + if (!IS_ENABLED(CONFIG_READ_ONLY_THP_FOR_FS)) + return false; + + if (!vma->vm_file) + return false; + + inode = file_inode(vma->vm_file); + + return !inode_is_open_for_write(inode) && S_ISREG(inode->i_mode); +} + unsigned long __thp_vma_allowable_orders(struct vm_area_struct *vma, unsigned long vm_flags, unsigned long tva_flags, -- 2.27.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2] mm: shmem: remove __shmem_huge_global_enabled() 2024-10-17 14:14 [PATCH v2] mm: huge_memory: move file_thp_enabled() into huge_memory.c Kefeng Wang @ 2024-10-17 14:14 ` Kefeng Wang 2024-10-30 13:09 ` David Hildenbrand 0 siblings, 1 reply; 5+ messages in thread From: Kefeng Wang @ 2024-10-17 14:14 UTC (permalink / raw) To: Andrew Morton, Hugh Dickins Cc: David Hildenbrand, Barry Song, Ryan Roberts, Baolin Wang, Matthew Wilcox, linux-mm, Kefeng Wang Remove __shmem_huge_global_enabled() since only one caller, and remove repeated check of VM_NOHUGEPAGE/MMF_DISABLE_THP as they are checked in shmem_allowable_huge_orders(), also remove unnecessary vma parameter. Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> --- v2: - Add RB and send separately mm/shmem.c | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index 247c0403af83..e933327d8dac 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -548,17 +548,15 @@ static bool shmem_confirm_swap(struct address_space *mapping, static int shmem_huge __read_mostly = SHMEM_HUGE_NEVER; -static bool __shmem_huge_global_enabled(struct inode *inode, pgoff_t index, - loff_t write_end, bool shmem_huge_force, - struct vm_area_struct *vma, - unsigned long vm_flags) +static bool shmem_huge_global_enabled(struct inode *inode, pgoff_t index, + loff_t write_end, bool shmem_huge_force, + unsigned long vm_flags) { - struct mm_struct *mm = vma ? vma->vm_mm : NULL; loff_t i_size; - if (!S_ISREG(inode->i_mode)) + if (HPAGE_PMD_ORDER > MAX_PAGECACHE_ORDER) return false; - if (mm && ((vm_flags & VM_NOHUGEPAGE) || test_bit(MMF_DISABLE_THP, &mm->flags))) + if (!S_ISREG(inode->i_mode)) return false; if (shmem_huge == SHMEM_HUGE_DENY) return false; @@ -576,7 +574,7 @@ static bool __shmem_huge_global_enabled(struct inode *inode, pgoff_t index, return true; fallthrough; case SHMEM_HUGE_ADVISE: - if (mm && (vm_flags & VM_HUGEPAGE)) + if (vm_flags & VM_HUGEPAGE) return true; fallthrough; default: @@ -584,17 +582,6 @@ static bool __shmem_huge_global_enabled(struct inode *inode, pgoff_t index, } } -static bool shmem_huge_global_enabled(struct inode *inode, pgoff_t index, - loff_t write_end, bool shmem_huge_force, - struct vm_area_struct *vma, unsigned long vm_flags) -{ - if (HPAGE_PMD_ORDER > MAX_PAGECACHE_ORDER) - return false; - - return __shmem_huge_global_enabled(inode, index, write_end, - shmem_huge_force, vma, vm_flags); -} - #if defined(CONFIG_SYSFS) static int shmem_parse_huge(const char *str) { @@ -772,8 +759,8 @@ static unsigned long shmem_unused_huge_shrink(struct shmem_sb_info *sbinfo, } static bool shmem_huge_global_enabled(struct inode *inode, pgoff_t index, - loff_t write_end, bool shmem_huge_force, - struct vm_area_struct *vma, unsigned long vm_flags) + loff_t write_end, bool shmem_huge_force, + unsigned long vm_flags) { return false; } @@ -1170,7 +1157,7 @@ static int shmem_getattr(struct mnt_idmap *idmap, generic_fillattr(idmap, request_mask, inode, stat); inode_unlock_shared(inode); - if (shmem_huge_global_enabled(inode, 0, 0, false, NULL, 0)) + if (shmem_huge_global_enabled(inode, 0, 0, false, 0)) stat->blksize = HPAGE_PMD_SIZE; if (request_mask & STATX_BTIME) { @@ -1686,7 +1673,7 @@ unsigned long shmem_allowable_huge_orders(struct inode *inode, return 0; global_huge = shmem_huge_global_enabled(inode, index, write_end, - shmem_huge_force, vma, vm_flags); + shmem_huge_force, vm_flags); if (!vma || !vma_is_anon_shmem(vma)) { /* * For tmpfs, we now only support PMD sized THP if huge page -- 2.27.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] mm: shmem: remove __shmem_huge_global_enabled() 2024-10-17 14:14 ` [PATCH v2] mm: shmem: remove __shmem_huge_global_enabled() Kefeng Wang @ 2024-10-30 13:09 ` David Hildenbrand 2024-11-01 1:07 ` Kefeng Wang 0 siblings, 1 reply; 5+ messages in thread From: David Hildenbrand @ 2024-10-30 13:09 UTC (permalink / raw) To: Kefeng Wang, Andrew Morton, Hugh Dickins Cc: Barry Song, Ryan Roberts, Baolin Wang, Matthew Wilcox, linux-mm On 17.10.24 16:14, Kefeng Wang wrote: > Remove __shmem_huge_global_enabled() since only one caller, > and remove repeated check of VM_NOHUGEPAGE/MMF_DISABLE_THP > as they are checked in shmem_allowable_huge_orders(), also > remove unnecessary vma parameter. > > Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com> > Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> > --- > v2: > - Add RB and send separately > > mm/shmem.c | 33 ++++++++++----------------------- > 1 file changed, 10 insertions(+), 23 deletions(-) > > diff --git a/mm/shmem.c b/mm/shmem.c > index 247c0403af83..e933327d8dac 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -548,17 +548,15 @@ static bool shmem_confirm_swap(struct address_space *mapping, > > static int shmem_huge __read_mostly = SHMEM_HUGE_NEVER; > > -static bool __shmem_huge_global_enabled(struct inode *inode, pgoff_t index, > - loff_t write_end, bool shmem_huge_force, > - struct vm_area_struct *vma, > - unsigned long vm_flags) > +static bool shmem_huge_global_enabled(struct inode *inode, pgoff_t index, > + loff_t write_end, bool shmem_huge_force, > + unsigned long vm_flags) Please use double tabs on the second+ parameter list. > { > - struct mm_struct *mm = vma ? vma->vm_mm : NULL; > loff_t i_size; > > - if (!S_ISREG(inode->i_mode)) > + if (HPAGE_PMD_ORDER > MAX_PAGECACHE_ORDER) > return false; > - if (mm && ((vm_flags & VM_NOHUGEPAGE) || test_bit(MMF_DISABLE_THP, &mm->flags))) But where is this check for shmem_getattr()? -- Cheers, David / dhildenb ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] mm: shmem: remove __shmem_huge_global_enabled() 2024-10-30 13:09 ` David Hildenbrand @ 2024-11-01 1:07 ` Kefeng Wang 2024-11-04 20:53 ` David Hildenbrand 0 siblings, 1 reply; 5+ messages in thread From: Kefeng Wang @ 2024-11-01 1:07 UTC (permalink / raw) To: David Hildenbrand, Andrew Morton, Hugh Dickins Cc: Barry Song, Ryan Roberts, Baolin Wang, Matthew Wilcox, linux-mm On 2024/10/30 21:09, David Hildenbrand wrote: > On 17.10.24 16:14, Kefeng Wang wrote: >> Remove __shmem_huge_global_enabled() since only one caller, >> and remove repeated check of VM_NOHUGEPAGE/MMF_DISABLE_THP >> as they are checked in shmem_allowable_huge_orders(), also >> remove unnecessary vma parameter. >> >> Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com> >> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> >> --- >> v2: >> - Add RB and send separately >> >> mm/shmem.c | 33 ++++++++++----------------------- >> 1 file changed, 10 insertions(+), 23 deletions(-) >> >> diff --git a/mm/shmem.c b/mm/shmem.c >> index 247c0403af83..e933327d8dac 100644 >> --- a/mm/shmem.c >> +++ b/mm/shmem.c >> @@ -548,17 +548,15 @@ static bool shmem_confirm_swap(struct >> address_space *mapping, >> static int shmem_huge __read_mostly = SHMEM_HUGE_NEVER; >> -static bool __shmem_huge_global_enabled(struct inode *inode, pgoff_t >> index, >> - loff_t write_end, bool shmem_huge_force, >> - struct vm_area_struct *vma, >> - unsigned long vm_flags) >> +static bool shmem_huge_global_enabled(struct inode *inode, pgoff_t >> index, >> + loff_t write_end, bool shmem_huge_force, >> + unsigned long vm_flags) > > Please use double tabs on the second+ parameter list. Ok, I will send a tab fix patch. > >> { >> - struct mm_struct *mm = vma ? vma->vm_mm : NULL; >> loff_t i_size; >> - if (!S_ISREG(inode->i_mode)) >> + if (HPAGE_PMD_ORDER > MAX_PAGECACHE_ORDER) >> return false; >> - if (mm && ((vm_flags & VM_NOHUGEPAGE) || >> test_bit(MMF_DISABLE_THP, &mm->flags))) > > But where is this check for shmem_getattr()? In shmem_getattr(), the vma=NULL/vm_flags=0, so only vm_flags check is enough. - if (shmem_huge_global_enabled(inode, 0, 0, false, NULL, 0)) + if (shmem_huge_global_enabled(inode, 0, 0, false, 0)) ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] mm: shmem: remove __shmem_huge_global_enabled() 2024-11-01 1:07 ` Kefeng Wang @ 2024-11-04 20:53 ` David Hildenbrand 0 siblings, 0 replies; 5+ messages in thread From: David Hildenbrand @ 2024-11-04 20:53 UTC (permalink / raw) To: Kefeng Wang, Andrew Morton, Hugh Dickins Cc: Barry Song, Ryan Roberts, Baolin Wang, Matthew Wilcox, linux-mm On 01.11.24 02:07, Kefeng Wang wrote: > > > On 2024/10/30 21:09, David Hildenbrand wrote: >> On 17.10.24 16:14, Kefeng Wang wrote: >>> Remove __shmem_huge_global_enabled() since only one caller, >>> and remove repeated check of VM_NOHUGEPAGE/MMF_DISABLE_THP >>> as they are checked in shmem_allowable_huge_orders(), also >>> remove unnecessary vma parameter. >>> >>> Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com> >>> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> >>> --- >>> v2: >>> - Add RB and send separately >>> >>> mm/shmem.c | 33 ++++++++++----------------------- >>> 1 file changed, 10 insertions(+), 23 deletions(-) >>> >>> diff --git a/mm/shmem.c b/mm/shmem.c >>> index 247c0403af83..e933327d8dac 100644 >>> --- a/mm/shmem.c >>> +++ b/mm/shmem.c >>> @@ -548,17 +548,15 @@ static bool shmem_confirm_swap(struct >>> address_space *mapping, >>> static int shmem_huge __read_mostly = SHMEM_HUGE_NEVER; >>> -static bool __shmem_huge_global_enabled(struct inode *inode, pgoff_t >>> index, >>> - loff_t write_end, bool shmem_huge_force, >>> - struct vm_area_struct *vma, >>> - unsigned long vm_flags) >>> +static bool shmem_huge_global_enabled(struct inode *inode, pgoff_t >>> index, >>> + loff_t write_end, bool shmem_huge_force, >>> + unsigned long vm_flags) >> >> Please use double tabs on the second+ parameter list. > > Ok, I will send a tab fix patch. > >> >>> { >>> - struct mm_struct *mm = vma ? vma->vm_mm : NULL; >>> loff_t i_size; >>> - if (!S_ISREG(inode->i_mode)) >>> + if (HPAGE_PMD_ORDER > MAX_PAGECACHE_ORDER) >>> return false; >>> - if (mm && ((vm_flags & VM_NOHUGEPAGE) || >>> test_bit(MMF_DISABLE_THP, &mm->flags))) >> >> But where is this check for shmem_getattr()? > > > In shmem_getattr(), the vma=NULL/vm_flags=0, so only vm_flags check is > enough. > > - if (shmem_huge_global_enabled(inode, 0, 0, false, NULL, 0)) > + if (shmem_huge_global_enabled(inode, 0, 0, false, 0)) > Ah, missed that, makes perfect sense! Acked-by: David Hildenbrand <david@redhat.com> -- Cheers, David / dhildenb ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-11-04 20:54 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-10-17 14:14 [PATCH v2] mm: huge_memory: move file_thp_enabled() into huge_memory.c Kefeng Wang 2024-10-17 14:14 ` [PATCH v2] mm: shmem: remove __shmem_huge_global_enabled() Kefeng Wang 2024-10-30 13:09 ` David Hildenbrand 2024-11-01 1:07 ` Kefeng Wang 2024-11-04 20:53 ` David Hildenbrand
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox