[dm-devel] [PATCH] drivers/md/dm-raid1.c: Fix inconsistent mirroring after interrupted recovery

Jun'ichi Nomura j-nomura at ce.jp.nec.com
Tue Jan 10 22:20:03 UTC 2006


Hi,

dm-mirror has potential data corruption problem:
while on-disk log shows that all disk contents are in-sync,
actual contents of the disks are not synchronized.
This problem occurs if initial recovery (synching) is
interrupted and resumed.

Attached patch fixes this problem.
Please consider to apply.

Background:

rh_dec() changes the region state from RH_NOSYNC (out-of-sync)
to RH_CLEAN (in-sync), which results in the corresponding bit
of clean_bits being set.

This is harmful if on-disk log is used and the map is
removed/suspended before the initial sync is completed.
The clean_bits is written down to the on-disk log at the map
removal, and, upon resume, it's read and copied to sync_bits.
Since the recovery process refers to the sync_bits to find
a region to be recovered, the region whose state was changed
from RH_NOSYNC to RH_CLEAN is no longer recovered.

If you haven't applied dm-raid1-read-balancing.patch proposed
in dm-devel sometimes ago, the contents of the mirrored disk
just corrupt silently.
If you have, balanced read may get bogus data from out-of-sync
disks.

The patch keeps RH_NOSYNC state unchanged.
It will be changed to RH_RECOVERING when recovery starts
and get reclaimed when the recovery completes.
So it doesn't leak the region hash entry.

Thanks,
Jun'ichi "Nick" Nomura
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dm-mirror-keepnosync.patch
Type: text/x-patch
Size: 2102 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20060110/4308d8ab/attachment.bin>


More information about the dm-devel mailing list