Message ID | 20221024190603.3987969-6-shr@devkernel.io (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | mm/block: add bdi sysfs knobs | expand |
On Mon, 24 Oct 2022 12:05:54 -0700 Stefan Roesch <shr@devkernel.io> wrote: > This adds a function to return the specified value for max_bytes. It > converts the stored max_ratio of the bdi to the corresponding bytes > value. It introduces the bdi_get_bytes helper function to do the > conversion. This is an approximation as it is based on the value that is > returned by global_dirty_limits(), which can change. The helper function > will also be used by the min_bytes bdi knob. > > --- a/include/linux/backing-dev.h > +++ b/include/linux/backing-dev.h > @@ -105,6 +105,7 @@ static inline unsigned long wb_stat_error(void) > /* BDI ratio is expressed as part per 1000 for finer granularity. */ > #define BDI_RATIO_SCALE 10 > > +unsigned long long bdi_get_max_bytes(struct backing_dev_info *bdi); We don't use unsigned long long much. If you want a 64-bit unsigned, use u64? > +EXPORT_SYMBOL_GPL(bdi_get_max_bytes); Is this symbol to be used by modules?
Andrew Morton <akpm@linux-foundation.org> writes: > On Mon, 24 Oct 2022 12:05:54 -0700 Stefan Roesch <shr@devkernel.io> wrote: > >> This adds a function to return the specified value for max_bytes. It >> converts the stored max_ratio of the bdi to the corresponding bytes >> value. It introduces the bdi_get_bytes helper function to do the >> conversion. This is an approximation as it is based on the value that is >> returned by global_dirty_limits(), which can change. The helper function >> will also be used by the min_bytes bdi knob. >> >> --- a/include/linux/backing-dev.h >> +++ b/include/linux/backing-dev.h >> @@ -105,6 +105,7 @@ static inline unsigned long wb_stat_error(void) >> /* BDI ratio is expressed as part per 1000 for finer granularity. */ >> #define BDI_RATIO_SCALE 10 >> >> +unsigned long long bdi_get_max_bytes(struct backing_dev_info *bdi); > > We don't use unsigned long long much. If you want a 64-bit unsigned, > use u64? > The next version will use u64. >> +EXPORT_SYMBOL_GPL(bdi_get_max_bytes); > > Is this symbol to be used by modules? The next version will remove the export.
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index 19fe0e605ed8..cb0e66564d4d 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h @@ -105,6 +105,7 @@ static inline unsigned long wb_stat_error(void) /* BDI ratio is expressed as part per 1000 for finer granularity. */ #define BDI_RATIO_SCALE 10 +unsigned long long bdi_get_max_bytes(struct backing_dev_info *bdi); int bdi_set_min_ratio(struct backing_dev_info *bdi, unsigned int min_ratio); int bdi_set_max_ratio(struct backing_dev_info *bdi, unsigned int max_ratio); int bdi_set_strict_limit(struct backing_dev_info *bdi, unsigned int strict_limit); diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 4d5383d4da45..0b9dcf5afda2 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -650,6 +650,18 @@ void wb_domain_exit(struct wb_domain *dom) */ static unsigned int bdi_min_ratio; +static unsigned long long bdi_get_bytes(unsigned int ratio) +{ + unsigned long background_thresh; + unsigned long dirty_thresh; + unsigned long long bytes; + + global_dirty_limits(&background_thresh, &dirty_thresh); + bytes = (dirty_thresh * PAGE_SIZE * ratio) / BDI_RATIO_SCALE / 100; + + return bytes; +} + int bdi_set_min_ratio(struct backing_dev_info *bdi, unsigned int min_ratio) { unsigned int delta; @@ -701,6 +713,12 @@ int bdi_set_max_ratio(struct backing_dev_info *bdi, unsigned max_ratio) } EXPORT_SYMBOL(bdi_set_max_ratio); +unsigned long long bdi_get_max_bytes(struct backing_dev_info *bdi) +{ + return bdi_get_bytes(bdi->max_ratio); +} +EXPORT_SYMBOL_GPL(bdi_get_max_bytes); + int bdi_set_strict_limit(struct backing_dev_info *bdi, unsigned int strict_limit) { if (strict_limit > 1)
This adds a function to return the specified value for max_bytes. It converts the stored max_ratio of the bdi to the corresponding bytes value. It introduces the bdi_get_bytes helper function to do the conversion. This is an approximation as it is based on the value that is returned by global_dirty_limits(), which can change. The helper function will also be used by the min_bytes bdi knob. Signed-off-by: Stefan Roesch <shr@devkernel.io> --- include/linux/backing-dev.h | 1 + mm/page-writeback.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+)