• Andrew Morton's avatar
    [PATCH] msync(): perform dirty page levelling · 9c50823e
    Andrew Morton authored
    It seems sensible to perform dirty page throttling in msync: as the application
    dirties pages we can kick off pdflush early, or even force the msync() caller
    to perform writeout, or even throttle the msync() caller.
    
    The main effect of this is to start disk writeback earlier if we've just
    discovered that a large amount of pagecache has been dirtied.  (Otherwise it
    wouldn't happen for up to five seconds, next time pdflush wakes up).
    
    It also will cause the page-dirtying process to get panalised for dirtying
    those pages rather than whacking someone else with the problem.
    
    We should do this for munmap() and possibly even exit(), too.
    
    We drop the mmap_sem while performing the dirty page balancing.  It doesn't
    seem right to hold mmap_sem for that long.
    
    Note that this patch only affects MS_ASYNC.  MS_SYNC will be syncing all the
    dirty pages anyway.
    
    We note that msync(MS_SYNC) does a full-file-sync inside mmap_sem, and always
    has.  We can fix that up...
    
    The patch also tightens up the mmap_sem coverage in sys_msync(): no point in
    taking it while we perform the incoming arg checking.
    
    Cc: Hugh Dickins <hugh@veritas.com>
    Cc: Nick Piggin <nickpiggin@yahoo.com.au>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    9c50823e
msync.c 5.85 KB