diff --git a/kmod/src/Makefile.kernelcompat b/kmod/src/Makefile.kernelcompat index 5c1eae89..31b58708 100644 --- a/kmod/src/Makefile.kernelcompat +++ b/kmod/src/Makefile.kernelcompat @@ -362,3 +362,11 @@ endif ifneq (,$(shell grep -s '^struct __kernel_old_timeval .' include/uapi/linux/time_types.h)) ccflags-y += -DKC_KERNEL_OLD_TIMEVAL_STRUCT endif + +# +# v5.19-rc4-52-ge33c267ab70d +# +# register_shrinker now requires a name, used for debug stats etc. +ifneq (,$(shell grep 'int __printf.*register_shrinker.struct shrinker .shrinker,' include/linux/shrinker.h)) +ccflags-y += -DKC_SHRINKER_NAME +endif diff --git a/kmod/src/block.c b/kmod/src/block.c index 23a37b98..9eaba500 100644 --- a/kmod/src/block.c +++ b/kmod/src/block.c @@ -1297,7 +1297,7 @@ int scoutfs_block_setup(struct super_block *sb) init_waitqueue_head(&binf->waitq); KC_INIT_SHRINKER_FUNCS(&binf->shrinker, block_count_objects, block_scan_objects); - KC_REGISTER_SHRINKER(&binf->shrinker); + KC_REGISTER_SHRINKER(&binf->shrinker, "scoutfs-block:" SCSBF, SCSB_ARGS(sb)); INIT_WORK(&binf->free_work, block_free_work); init_llist_head(&binf->free_llist); diff --git a/kmod/src/item.c b/kmod/src/item.c index f7691e6e..44357e6d 100644 --- a/kmod/src/item.c +++ b/kmod/src/item.c @@ -2693,7 +2693,7 @@ int scoutfs_item_setup(struct super_block *sb) KC_INIT_SHRINKER_FUNCS(&cinf->shrinker, item_cache_count_objects, item_cache_scan_objects); - KC_REGISTER_SHRINKER(&cinf->shrinker); + KC_REGISTER_SHRINKER(&cinf->shrinker, "scoutfs-item:" SCSBF, SCSB_ARGS(sb)); #ifdef KC_CPU_NOTIFIER cinf->notifier.notifier_call = item_cpu_callback; register_hotcpu_notifier(&cinf->notifier); diff --git a/kmod/src/kernelcompat.h b/kmod/src/kernelcompat.h index 6e4cdc02..8c17d31e 100644 --- a/kmod/src/kernelcompat.h +++ b/kmod/src/kernelcompat.h @@ -197,7 +197,11 @@ struct timespec64 kc_current_time(struct inode *inode); } while (0) #define KC_SHRINKER_CONTAINER_OF(ptr, type) container_of(ptr, type, shrinker) -#define KC_REGISTER_SHRINKER(ptr) (register_shrinker(ptr)) +#ifdef KC_SHRINKER_NAME +#define KC_REGISTER_SHRINKER register_shrinker +#else +#define KC_REGISTER_SHRINKER(ptr, fmt, ...) (register_shrinker(ptr)) +#endif /* KC_SHRINKER_NAME */ #define KC_UNREGISTER_SHRINKER(ptr) (unregister_shrinker(ptr)) #define KC_SHRINKER_FN(ptr) (ptr) #else @@ -224,7 +228,7 @@ struct kc_shrinker_wrapper { _wrap->shrink.seeks = DEFAULT_SEEKS; \ } while (0) #define KC_SHRINKER_CONTAINER_OF(ptr, type) container_of(container_of(ptr, struct kc_shrinker_wrapper, shrink), type, shrinker) -#define KC_REGISTER_SHRINKER(ptr) (register_shrinker(ptr.shrink)) +#define KC_REGISTER_SHRINKER(ptr, fmt, ...) (register_shrinker(ptr.shrink)) #define KC_UNREGISTER_SHRINKER(ptr) (unregister_shrinker(ptr.shrink)) #define KC_SHRINKER_FN(ptr) (ptr.shrink) diff --git a/kmod/src/lock.c b/kmod/src/lock.c index a6ae9a6e..5f280054 100644 --- a/kmod/src/lock.c +++ b/kmod/src/lock.c @@ -1732,7 +1732,7 @@ int scoutfs_lock_setup(struct super_block *sb) linfo->lock_range_tree = RB_ROOT; KC_INIT_SHRINKER_FUNCS(&linfo->shrinker, lock_count_objects, lock_scan_objects); - KC_REGISTER_SHRINKER(&linfo->shrinker); + KC_REGISTER_SHRINKER(&linfo->shrinker, "scoutfs-lock:" SCSBF, SCSB_ARGS(sb)); INIT_LIST_HEAD(&linfo->lru_list); INIT_WORK(&linfo->inv_work, lock_invalidate_worker); INIT_LIST_HEAD(&linfo->inv_list); diff --git a/kmod/src/quota.c b/kmod/src/quota.c index 04ec7244..3163ee8c 100644 --- a/kmod/src/quota.c +++ b/kmod/src/quota.c @@ -1226,7 +1226,7 @@ int scoutfs_quota_setup(struct super_block *sb) init_waitqueue_head(&qtinf->waitq); KC_INIT_SHRINKER_FUNCS(&qtinf->shrinker, count_cached_checks, scan_cached_checks); - KC_REGISTER_SHRINKER(&qtinf->shrinker); + KC_REGISTER_SHRINKER(&qtinf->shrinker, "scoutfs-quota:" SCSBF, SCSB_ARGS(sb)); sbi->squota_info = qtinf; diff --git a/kmod/src/wkic.c b/kmod/src/wkic.c index ebd1b19c..44eef494 100644 --- a/kmod/src/wkic.c +++ b/kmod/src/wkic.c @@ -1113,7 +1113,7 @@ int scoutfs_wkic_setup(struct super_block *sb) winf->sb = sb; KC_INIT_SHRINKER_FUNCS(&winf->shrinker, wkic_shrink_count, wkic_shrink_scan); - KC_REGISTER_SHRINKER(&winf->shrinker); + KC_REGISTER_SHRINKER(&winf->shrinker, "scoutfs-weak_item:" SCSBF, SCSB_ARGS(sb)); sbi->wkic_info = winf; return 0;