Pavel Emelyanov <xemul@xxxxxxxxxxxxx> writes: > Make balance_dirty_pages start the throttling when the WRITEBACK_TEMP > counter is hight ehough. This prevents us from having too many dirty > pages on fuse, thus giving the userspace part of it a chance to write > stuff properly. > > Note, that the existing balance logic is per-bdi, i.e. if the fuse > user task gets stuck in the function this means, that it either > writes to the mountpoint it serves (but it can deadlock even without > the writeback) or it is wrting to some _other_ dirty bdi and in the > latter case someone else will free the memory for it. This is not just about deadlocking. Unprivileged fuse filesystems should not impact the operation of other filesystems. I.e. a fuse filesystem which is not making progress writing out pages shouln't cause a write on an unrelated filesystem to block. I believe this patch breaks that promise. Thanks, Miklos > > Signed-off-by: Pavel Emelyanov <xemul@xxxxxxxxxx> > --- > mm/page-writeback.c | 3 ++- > 1 files changed, 2 insertions(+), 1 deletions(-) > > diff --git a/mm/page-writeback.c b/mm/page-writeback.c > index 93d8d2f..7cb54db 100644 > --- a/mm/page-writeback.c > +++ b/mm/page-writeback.c > @@ -1192,7 +1192,8 @@ static void balance_dirty_pages(struct address_space *mapping, > */ > nr_reclaimable = global_page_state(NR_FILE_DIRTY) + > global_page_state(NR_UNSTABLE_NFS); > - nr_dirty = nr_reclaimable + global_page_state(NR_WRITEBACK); > + nr_dirty = nr_reclaimable + global_page_state(NR_WRITEBACK) + > + global_page_state(NR_WRITEBACK_TEMP); > > global_dirty_limits(&background_thresh, &dirty_thresh); -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html