| From: Stefan Roesch <shr@devkernel.io> |
| Subject: mm: add knob /sys/class/bdi/<bdi>/max_bytes |
| Date: Fri, 18 Nov 2022 16:52:03 -0800 |
| |
| This adds the new knob max_bytes to specify a dirty memory limit for the |
| corresponding bdi. The specified bytes value is converted to a ratio. |
| |
| Link: https://lkml.kernel.org/r/20221119005215.3052436-9-shr@devkernel.io |
| Signed-off-by: Stefan Roesch <shr@devkernel.io> |
| Cc: Chris Mason <clm@meta.com> |
| Cc: Jens Axboe <axboe@kernel.dk> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| mm/backing-dev.c | 29 +++++++++++++++++++++++++++++ |
| 1 file changed, 29 insertions(+) |
| |
| --- a/mm/backing-dev.c~mm-add-knob-sys-class-bdi-bdi-max_bytes |
| +++ a/mm/backing-dev.c |
| @@ -199,6 +199,34 @@ static ssize_t max_ratio_store(struct de |
| } |
| BDI_SHOW(max_ratio, bdi->max_ratio / BDI_RATIO_SCALE) |
| |
| +static ssize_t max_bytes_show(struct device *dev, |
| + struct device_attribute *attr, |
| + char *buf) |
| +{ |
| + struct backing_dev_info *bdi = dev_get_drvdata(dev); |
| + |
| + return sysfs_emit(buf, "%llu\n", bdi_get_max_bytes(bdi)); |
| +} |
| + |
| +static ssize_t max_bytes_store(struct device *dev, |
| + struct device_attribute *attr, const char *buf, size_t count) |
| +{ |
| + struct backing_dev_info *bdi = dev_get_drvdata(dev); |
| + u64 bytes; |
| + ssize_t ret; |
| + |
| + ret = kstrtoull(buf, 10, &bytes); |
| + if (ret < 0) |
| + return ret; |
| + |
| + ret = bdi_set_max_bytes(bdi, bytes); |
| + if (!ret) |
| + ret = count; |
| + |
| + return ret; |
| +} |
| +DEVICE_ATTR_RW(max_bytes); |
| + |
| static ssize_t stable_pages_required_show(struct device *dev, |
| struct device_attribute *attr, |
| char *buf) |
| @@ -241,6 +269,7 @@ static struct attribute *bdi_dev_attrs[] |
| &dev_attr_read_ahead_kb.attr, |
| &dev_attr_min_ratio.attr, |
| &dev_attr_max_ratio.attr, |
| + &dev_attr_max_bytes.attr, |
| &dev_attr_stable_pages_required.attr, |
| &dev_attr_strict_limit.attr, |
| NULL, |
| _ |