• David Chinner's avatar
    [XFS] don't block in xfs_qm_dqflush() during async writeback. · 2f8a3ce1
    David Chinner authored
    Normally dquots are written back via delayed write mechanisms. They are
    flushed to their backing buffer by xfssyncd, which is then pushed out by
    either AIL or xfsbufd flushing. The flush from the xfssyncd is supposed to
    be non-blocking, but xfs_qm_dqflush() always waits for pinned duots, which
    means that it will block for the length of time it takes to do a
    synchronous log force. This causes unnecessary extra log I/O to be issued
    whenever we try to flush a busy dquot.
    
    Avoid the log forces and blocking xfssyncd by making xfs_qm_dqflush() pay
    attention to what type of sync it is doing when it sees a pinned dquot and
    not waiting when doing non-blocking flushes.
    
    SGI-PV: 988147
    
    SGI-Modid: xfs-linux-melb:xfs-kern:32287a
    Signed-off-by: default avatarDavid Chinner <david@fromorbit.com>
    Signed-off-by: default avatarPeter Leckie <pleckie@sgi.com>
    Signed-off-by: default avatarLachlan McIlroy <lachlan@sgi.com>
    2f8a3ce1
xfs_dquot.c 40.5 KB