[Devel] [vzlin-dev] [PATCH vz7] fs: avoid writeback busy-loop if redirty
Maxim Patlasov
mpatlasov at virtuozzo.com
Wed Dec 14 10:47:08 PST 2016
Thank you, Vasily, I'll resend the patch.
On 12/14/2016 01:25 AM, Vasily Averin wrote:
> Maxim,
> did you asked Alexey probably?
> Also can you replace BUG_ON on WARN_ON ?
> IMHO it's bad idea to crash kernel in any such cases.
> If it can be triggered somehow from inside container -- it will be pure security issue.
>
> Thank you,
> Vasily Averin
>
> On 12/14/2016 07:09 AM, Maxim Patlasov wrote:
>> Andrey, can you please review this one-liner below. I think it can
>> be responsible for inexplicable delays and CPU peaks in bugs like
>> https://jira.sw.ru/browse/PSBM-55919. Thanks, Maxim
>>
>> wb_writeback() bails out only if either nr_pages comes to zero or
>> "progress" (as reported by writeback_sb_inodes or __writeback_inodes_wb)
>> is zero.
>>
>> If a page is temporarily unavailable (is under fuse-writeback),
>> fuse_writepages_fill calls redirty_page_for_writepage, unlock the page
>> and returns OK. This OK results in progress=1. So wb_writeback
>> loops over writeback_sb_inodes/__writeback_inodes_wb again and again
>> until all nr_pages are exhausted.
>>
>> The patch ensures that progress=0 if fuse_writepages_fill did nothing.
>>
>> Signed-off-by: Maxim Patlasov <mpatlasov at virtuozzo.com>
>> ---
>> fs/fs-writeback.c | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
>> index 5c9a082..483bbb9 100644
>> --- a/fs/fs-writeback.c
>> +++ b/fs/fs-writeback.c
>> @@ -774,6 +774,9 @@ static long writeback_sb_inodes(struct super_block *sb,
>> if (work->nr_pages <= 0)
>> break;
>> }
>> +
>> + BUG_ON(wbc.pages_skipped > write_chunk - wbc.nr_to_write);
>> + wrote -= wbc.pages_skipped;
>> }
>> return wrote;
>> }
>>
>>
More information about the Devel
mailing list