md/bitmap: be more consistent when setting new bits in memory bitmap.
For each active region corresponding to a bit in the bitmap with have a 14bit counter (and some flags). This counts number of active writes + bit in the on-disk bitmap + delay-needed. The "delay-needed" is because we always want a delay before clearing a bit. So the number here is normally number of active writes plus 2. If there have been no writes for a while, we drop to 1. If still no writes we clear the bit and drop to 0. So for consistency, when setting bit from the on-disk bitmap or by request from user-space it is best to set the counter to '2' to start with. In particular we might also set the NEEDED_MASK flag at this time, and in all other cases NEEDED_MASK is only set when the counter is 2 or more. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Родитель
38059ec2bd
Коммит
915c420ddf
|
@ -1587,7 +1587,7 @@ static void bitmap_set_memory_bits(struct bitmap *bitmap, sector_t offset, int n
|
|||
}
|
||||
if (!*bmc) {
|
||||
struct page *page;
|
||||
*bmc = 1 | (needed ? NEEDED_MASK : 0);
|
||||
*bmc = 2 | (needed ? NEEDED_MASK : 0);
|
||||
bitmap_count_page(bitmap, offset, 1);
|
||||
page = filemap_get_page(bitmap, offset >> CHUNK_BLOCK_SHIFT(bitmap));
|
||||
set_page_attr(bitmap, page, BITMAP_PAGE_PENDING);
|
||||
|
|
Загрузка…
Ссылка в новой задаче