mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-02 10:43:57 +08:00
md-cluster/bitmap: unplug bitmap to sync dirty pages to disk
This patch is doing two distinct but related things. 1. It adds bitmap_unplug() for the main bitmap (mddev->bitmap). As bit have been set, BITMAP_PAGE_DIRTY is set so bitmap_deamon_work() will not write those pages out in its regular scans, only bitmap_unplug() will. If there are no writes to the array, bitmap_unplug() won't be called, so we need to call it explicitly here. 2. bitmap_write_all() is a bit of a confusing interface as it doesn't actually write anything. The current code for writing "bitmap" works but this change makes it a bit clearer. Reviewed-by: NeilBrown <neilb@suse.com> Signed-off-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: Shaohua Li <shli@fb.com>
This commit is contained in:
parent
23cea66a37
commit
c84400c89f
@ -1924,14 +1924,14 @@ int bitmap_copy_from_slot(struct mddev *mddev, int slot,
|
|||||||
|
|
||||||
if (clear_bits) {
|
if (clear_bits) {
|
||||||
bitmap_update_sb(bitmap);
|
bitmap_update_sb(bitmap);
|
||||||
/* Setting this for the ev_page should be enough.
|
/* BITMAP_PAGE_PENDING is set, but bitmap_unplug needs
|
||||||
* And we do not require both write_all and PAGE_DIRT either
|
* BITMAP_PAGE_DIRTY or _NEEDWRITE to write ... */
|
||||||
*/
|
|
||||||
for (i = 0; i < bitmap->storage.file_pages; i++)
|
for (i = 0; i < bitmap->storage.file_pages; i++)
|
||||||
set_page_attr(bitmap, i, BITMAP_PAGE_DIRTY);
|
if (test_page_attr(bitmap, i, BITMAP_PAGE_PENDING))
|
||||||
bitmap_write_all(bitmap);
|
set_page_attr(bitmap, i, BITMAP_PAGE_NEEDWRITE);
|
||||||
bitmap_unplug(bitmap);
|
bitmap_unplug(bitmap);
|
||||||
}
|
}
|
||||||
|
bitmap_unplug(mddev->bitmap);
|
||||||
*low = lo;
|
*low = lo;
|
||||||
*high = hi;
|
*high = hi;
|
||||||
err:
|
err:
|
||||||
|
Loading…
Reference in New Issue
Block a user