|
@@ -922,6 +922,7 @@ struct bm_aio_ctx {
|
|
|
unsigned flags;
|
|
|
#define BM_AIO_COPY_PAGES 1
|
|
|
#define BM_AIO_WRITE_HINTED 2
|
|
|
+#define BM_WRITE_ALL_PAGES 4
|
|
|
int error;
|
|
|
struct kref kref;
|
|
|
};
|
|
@@ -1096,7 +1097,9 @@ static int bm_rw(struct drbd_conf *mdev, int rw, unsigned flags, unsigned lazy_w
|
|
|
!test_and_clear_bit(BM_PAGE_HINT_WRITEOUT,
|
|
|
&page_private(b->bm_pages[i])))
|
|
|
continue;
|
|
|
- if (bm_test_page_unchanged(b->bm_pages[i])) {
|
|
|
+
|
|
|
+ if (!(flags & BM_WRITE_ALL_PAGES) &&
|
|
|
+ bm_test_page_unchanged(b->bm_pages[i])) {
|
|
|
dynamic_dev_dbg(DEV, "skipped bm write for idx %u\n", i);
|
|
|
continue;
|
|
|
}
|
|
@@ -1180,6 +1183,17 @@ int drbd_bm_write(struct drbd_conf *mdev) __must_hold(local)
|
|
|
return bm_rw(mdev, WRITE, 0, 0);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * drbd_bm_write_all() - Write the whole bitmap to its on disk location.
|
|
|
+ * @mdev: DRBD device.
|
|
|
+ *
|
|
|
+ * Will write all pages.
|
|
|
+ */
|
|
|
+int drbd_bm_write_all(struct drbd_conf *mdev) __must_hold(local)
|
|
|
+{
|
|
|
+ return bm_rw(mdev, WRITE, BM_WRITE_ALL_PAGES, 0);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* drbd_bm_lazy_write_out() - Write bitmap pages 0 to @upper_idx-1, if they have changed.
|
|
|
* @mdev: DRBD device.
|