For 32-bit systems, damos_stat now uses unsigned long long for byte statistics data to avoid integer overflow risks inherent in the previous design. Signed-off-by: Quanmin Yan --- include/linux/damon.h | 6 +++--- mm/damon/modules-common.h | 4 ++-- mm/damon/sysfs-schemes.c | 12 ++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/include/linux/damon.h b/include/linux/damon.h index aa045dcb5b5d..d85850cf06c5 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -333,10 +333,10 @@ struct damos_watermarks { */ struct damos_stat { unsigned long nr_tried; - unsigned long sz_tried; + unsigned long long sz_tried; unsigned long nr_applied; - unsigned long sz_applied; - unsigned long sz_ops_filter_passed; + unsigned long long sz_applied; + unsigned long long sz_ops_filter_passed; unsigned long qt_exceeds; }; diff --git a/mm/damon/modules-common.h b/mm/damon/modules-common.h index c7048a449321..ae45d0eb960e 100644 --- a/mm/damon/modules-common.h +++ b/mm/damon/modules-common.h @@ -36,11 +36,11 @@ #define DEFINE_DAMON_MODULES_DAMOS_STATS_PARAMS(stat, try_name, \ succ_name, qt_exceed_name) \ module_param_named(nr_##try_name, stat.nr_tried, ulong, 0400); \ - module_param_named(bytes_##try_name, stat.sz_tried, ulong, \ + module_param_named(bytes_##try_name, stat.sz_tried, ullong, \ 0400); \ module_param_named(nr_##succ_name, stat.nr_applied, ulong, \ 0400); \ - module_param_named(bytes_##succ_name, stat.sz_applied, ulong, \ + module_param_named(bytes_##succ_name, stat.sz_applied, ullong, \ 0400); \ module_param_named(nr_##qt_exceed_name, stat.qt_exceeds, ulong, \ 0400); diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 74056bcd6a2c..3c4882549a28 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -199,10 +199,10 @@ static const struct kobj_type damon_sysfs_scheme_regions_ktype = { struct damon_sysfs_stats { struct kobject kobj; unsigned long nr_tried; - unsigned long sz_tried; + unsigned long long sz_tried; unsigned long nr_applied; - unsigned long sz_applied; - unsigned long sz_ops_filter_passed; + unsigned long long sz_applied; + unsigned long long sz_ops_filter_passed; unsigned long qt_exceeds; }; @@ -226,7 +226,7 @@ static ssize_t sz_tried_show(struct kobject *kobj, struct kobj_attribute *attr, struct damon_sysfs_stats *stats = container_of(kobj, struct damon_sysfs_stats, kobj); - return sysfs_emit(buf, "%lu\n", stats->sz_tried); + return sysfs_emit(buf, "%llu\n", stats->sz_tried); } static ssize_t nr_applied_show(struct kobject *kobj, @@ -244,7 +244,7 @@ static ssize_t sz_applied_show(struct kobject *kobj, struct damon_sysfs_stats *stats = container_of(kobj, struct damon_sysfs_stats, kobj); - return sysfs_emit(buf, "%lu\n", stats->sz_applied); + return sysfs_emit(buf, "%llu\n", stats->sz_applied); } static ssize_t sz_ops_filter_passed_show(struct kobject *kobj, @@ -253,7 +253,7 @@ static ssize_t sz_ops_filter_passed_show(struct kobject *kobj, struct damon_sysfs_stats *stats = container_of(kobj, struct damon_sysfs_stats, kobj); - return sysfs_emit(buf, "%lu\n", stats->sz_ops_filter_passed); + return sysfs_emit(buf, "%llu\n", stats->sz_ops_filter_passed); } static ssize_t qt_exceeds_show(struct kobject *kobj, -- 2.34.1