diff options
author | NeilBrown <neilb@suse.de> | 2012-05-22 05:55:08 +0200 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2012-05-22 05:55:08 +0200 |
commit | ef99bf480de9bde9d3b2afdf05324670fab4e571 (patch) | |
tree | 49afa5fd6e7e8060f3601c04bb25b96e14d14a39 /drivers/md/md.c | |
parent | md/bitmap: add new 'space' attribute for bitmaps. (diff) | |
download | linux-ef99bf480de9bde9d3b2afdf05324670fab4e571.tar.xz linux-ef99bf480de9bde9d3b2afdf05324670fab4e571.zip |
md/bitmap: allow a bitmap with no backing storage.
An md bitmap comprises two parts
- internal counting of active writes per 'chunk'.
- external storage of whether there are any active writes on
each chunk
The second requires the first, but the first doesn't require the
second.
Not having backing storage means that the bitmap cannot expedite
resync after a crash, but it still allows us to expedite the recovery
of a recently-removed device.
So: allow a bitmap to exist even if there is no backing device.
In that case we default to 128M chunks.
A particular value of this is that we can remove and re-add a bitmap
(possibly of a different granularity) on a degraded array, and not
lose the information needed to fast-recover the missing device.
We don't actually activate these bitmaps yet - that will come
in a later patch.
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r-- | drivers/md/md.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 9a677f2078a7..607771bb7e92 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -5139,7 +5139,8 @@ int md_run(struct mddev *mddev) err = -EINVAL; mddev->pers->stop(mddev); } - if (err == 0 && mddev->pers->sync_request) { + if (err == 0 && mddev->pers->sync_request && + (mddev->bitmap_info.file || mddev->bitmap_info.offset)) { err = bitmap_create(mddev); if (err) { printk(KERN_ERR "%s: failed to create bitmap (%d)\n", @@ -7847,7 +7848,7 @@ void md_check_recovery(struct mddev *mddev) goto unlock; if (mddev->pers->sync_request) { - if (spares && mddev->bitmap && ! mddev->bitmap->file) { + if (spares) { /* We are adding a device or devices to an array * which has the bitmap stored on all devices. * So make sure all bitmap pages get written |