From: Manjong Lee mj0123.lee@samsung.com
stable inclusion from linux-4.19.221 commit 505039dd0fe6493565e27b55700e46f43f20580d
--------------------------------
commit 3c376dfafbf7a8ea0dea212d095ddd83e93280bb upstream.
Initialize min_ratio if it is set during bdi unregistration. This can prevent problems that may occur a when bdi is removed without resetting min_ratio.
For example. 1) insert external sdcard 2) set external sdcard's min_ratio 70 3) remove external sdcard without setting min_ratio 0 4) insert external sdcard 5) set external sdcard's min_ratio 70 << error occur(can't set)
Because when an sdcard is removed, the present bdi_min_ratio value will remain. Currently, the only way to reset bdi_min_ratio is to reboot.
[akpm@linux-foundation.org: tweak comment and coding style]
Link: https://lkml.kernel.org/r/20211021161942.5983-1-mj0123.lee@samsung.com Signed-off-by: Manjong Lee mj0123.lee@samsung.com Acked-by: Peter Zijlstra (Intel) peterz@infradead.org Cc: Changheun Lee nanich.lee@samsung.com Cc: Jens Axboe axboe@kernel.dk Cc: Christoph Hellwig hch@infradead.org Cc: Matthew Wilcox willy@infradead.org Cc: seunghwan.hyun@samsung.com Cc: sookwan7.kim@samsung.com Cc: yt0928.kim@samsung.com Cc: junho89.kim@samsung.com Cc: jisoo2146.oh@samsung.com Cc: stable@vger.kernel.org Signed-off-by: Andrew Morton akpm@linux-foundation.org Signed-off-by: Linus Torvalds torvalds@linux-foundation.org Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org Conflicts: mm/backing-dev.c [yyl: adjust context] Signed-off-by: Yang Yingliang yangyingliang@huawei.com --- mm/backing-dev.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/mm/backing-dev.c b/mm/backing-dev.c index 75a61176f392f..f80d5c2ff420c 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c @@ -978,6 +978,13 @@ void bdi_unregister(struct backing_dev_info *bdi) wb_shutdown(&bdi->wb); cgwb_bdi_unregister(bdi);
+ /* + * If this BDI's min ratio has been set, use bdi_set_min_ratio() to + * update the global bdi_min_ratio. + */ + if (bdi->min_ratio) + bdi_set_min_ratio(bdi, 0); + if (bdi->dev) { struct rcu_device *rcu_dev = bdi->rcu_dev; bdi_debug_unregister(bdi);