On Tue, Feb 6, 2018 at 5:25 PM, Jan Kara <jack@xxxxxxx> wrote: > On Fri 02-02-18 09:54:14, Tejun Heo wrote: >> If a connection gets aborted while congested, FUSE can leave >> nr_wb_congested[] stuck until reboot causing wait_iff_congested() to >> wait spuriously which can lead to severe performance degradation. >> >> The leak is caused by gating congestion state clearing with >> fc->connected test in request_end(). This was added way back in 2009 >> by 26c3679101db ("fuse: destroy bdi on umount"). While the commit >> description doesn't explain why the test was added, it most likely was >> to avoid dereferencing bdi after it got destroyed. >> >> Since then, bdi lifetime rules have changed many times and now we're >> always guaranteed to have access to the bdi while the superblock is >> alive (fc->sb). >> >> Drop fc->connected conditional to avoid leaking congestion states. >> >> Signed-off-by: Tejun Heo <tj@xxxxxxxxxx> >> Reported-by: Joshua Miller <joshmiller@xxxxxx> >> Cc: Johannes Weiner <hannes@xxxxxxxxxxx> >> Cc: Miklos Szeredi <miklos@xxxxxxxxxx> >> Cc: Jan Kara <jack@xxxxxxx> >> Cc: stable@xxxxxxxxxxxxxxx > > Yeah, this should be fine AFAICT but my knowledge of FUSE is very cursory. > Anyway: > > Acked-by: Jan Kara <jack@xxxxxxx> Can't say I fully understand how the global "is any bdi congested" state is used in direct reclaim, but the patch is an obvious improvement, so applied. Thanks, Miklos