提交 031da73f 编写于 作者: N NeilBrown 提交者: Artem Bityutskiy

mtd: block2mtd: throttle writes by calling balance_dirty_pages_ratelimited.

If you create a block2mtd device that is larger than main memory,
and write to all of it, then lots of pages will be dirtied but
they will never be flushed out as nothing calls any variant of
balance_dirty_pages.

It would be nice to call set_page_dirty_balance(), but that isn't exported,
so just call balance_dirty_pages_ratelimited() directly.
Signed-off-by: NNeilBrown <neilb@suse.de>
Signed-off-by: NArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
上级 6f2a6a52
...@@ -62,6 +62,7 @@ static int _block2mtd_erase(struct block2mtd_dev *dev, loff_t to, size_t len) ...@@ -62,6 +62,7 @@ static int _block2mtd_erase(struct block2mtd_dev *dev, loff_t to, size_t len)
memset(page_address(page), 0xff, PAGE_SIZE); memset(page_address(page), 0xff, PAGE_SIZE);
set_page_dirty(page); set_page_dirty(page);
unlock_page(page); unlock_page(page);
balance_dirty_pages_ratelimited(mapping);
break; break;
} }
...@@ -152,6 +153,7 @@ static int _block2mtd_write(struct block2mtd_dev *dev, const u_char *buf, ...@@ -152,6 +153,7 @@ static int _block2mtd_write(struct block2mtd_dev *dev, const u_char *buf,
memcpy(page_address(page) + offset, buf, cpylen); memcpy(page_address(page) + offset, buf, cpylen);
set_page_dirty(page); set_page_dirty(page);
unlock_page(page); unlock_page(page);
balance_dirty_pages_ratelimited(mapping);
} }
page_cache_release(page); page_cache_release(page);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册