On Tue, Jul 15, 2025 at 03:29:08PM +0100, Lorenzo Stoakes wrote: > Nit on subject, function -> functions. > > On Mon, Jul 07, 2025 at 04:23:16PM +0200, Pankaj Raghav (Samsung) wrote: > > From: Pankaj Raghav <p.raghav@xxxxxxxxxxx> > > > > Add huge_zero_page_shrinker_init() and huge_zero_page_shrinker_exit(). > > As shrinker will not be needed when static PMD zero page is enabled, > > these two functions can be a no-op. > > > > This is a preparation patch for static PMD zero page. No functional > > changes. > > This is nitty stuff, but I think this is a little unclear, maybe something > like: > > We will soon be determining whether to use a shrinker depending on > whether a static PMD zero page is available, therefore abstract out > shrink initialisation and teardown such that we can more easily > handle both the shrinker and static PMD zero page cases. > This looks good. I will use add this to the commit message. > > > > Signed-off-by: Pankaj Raghav <p.raghav@xxxxxxxxxxx> > > Other than nits, this LGTM, so with those addressed: > > Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx> Thanks. > > #ifdef CONFIG_SYSFS > > static ssize_t enabled_show(struct kobject *kobj, > > @@ -850,33 +868,31 @@ static inline void hugepage_exit_sysfs(struct kobject *hugepage_kobj) > > > > static int __init thp_shrinker_init(void) > > { > > - huge_zero_page_shrinker = shrinker_alloc(0, "thp-zero"); > > - if (!huge_zero_page_shrinker) > > - return -ENOMEM; > > + int ret = 0; > > Kinda no point in initialising to zero, unless... > > > > > deferred_split_shrinker = shrinker_alloc(SHRINKER_NUMA_AWARE | > > SHRINKER_MEMCG_AWARE | > > SHRINKER_NONSLAB, > > "thp-deferred_split"); > > - if (!deferred_split_shrinker) { > > - shrinker_free(huge_zero_page_shrinker); > > + if (!deferred_split_shrinker) > > return -ENOMEM; > > - } > > - > > - huge_zero_page_shrinker->count_objects = shrink_huge_zero_page_count; > > - huge_zero_page_shrinker->scan_objects = shrink_huge_zero_page_scan; > > - shrinker_register(huge_zero_page_shrinker); > > > > deferred_split_shrinker->count_objects = deferred_split_count; > > deferred_split_shrinker->scan_objects = deferred_split_scan; > > shrinker_register(deferred_split_shrinker); > > > > + ret = huge_zero_page_shrinker_init(); > > + if (ret) { > > + shrinker_free(deferred_split_shrinker); > > + return ret; > > + } > > ... you change this to: > > if (ret) > shrinker_free(deferred_split_shrinker); > > return ret; > > But it's not a big deal. Maybe I'd rename ret -> err if you keep things as > they are (but don't init to 0). Sounds good. -- Pankaj