• NeilBrown's avatar
    md/bitmap: disentangle two different 'pending' flags. · bf07bb7d
    NeilBrown authored
    There are two different 'pending' concepts in the handling of the
    write intent bitmap.
    
    Firstly, a 'page' from the bitmap (which container PAGE_SIZE*8 bits)
    may have changes (bits cleared) that should be written in due course.
    There is no hurry for these and the page will transition from
    PENDING to NEEDWRITE and will then be written, though if it ever
    becomes DIRTY it will be written much sooner and PENDING will be
    cleared.
    
    Secondly, a page of counters - which contains PAGE_SIZE/2 counters, one
    for each bit, can usefully have a 'pending' flag which indicates if
    any of the counters are low (2 or 1) and ready to be processed by
    bitmap_daemon_work().  If this flag is clear we can skip the whole
    page.
    
    These two concepts are currently combined in the bitmap-file flag.
    This causes a tighter connection between the counters and the bitmap
    file than I would like - as I want to add some flexibility to the
    bitmap file.
    
    So introduce a new flag with the page-of-counters, and rewrite
    bitmap_daemon_work() so that it handles the two different 'pending'
    concepts separately.
    
    This also allows us to clear BITMAP_PAGE_PENDING when we write out
    a dirty page, which may occasionally reduce the number of times we
    write a page.
    Signed-off-by: default avatarNeilBrown <neilb@suse.de>
    bf07bb7d
bitmap.c 54.6 KB