aha/drivers/md
Alasdair G Kergon 0e56822d30 [PATCH] device-mapper: mirror log bitset fix
The linux bitset operators (test_bit, set_bit etc) work on arrays of "unsigned
long".  dm-log uses such bitsets but treats them as arrays of uint32_t, only
allocating and zeroing a multiple of 4 bytes (as 'clean_bits' is a uint32_t).

The patch below fixes this problem.

The problem is specific to 64-bit big endian machines such as s390x or ppc-64
and can prevent pvmove terminating.

In the simplest case, if "region_count" were (say) 30, then
bitset_size (below) would be 4 and bitset_uint32_count would be 1.
Thus the memory for this butset, after allocation and zeroing would
be
   0 0 0 0 X X X X
On a bigendian 64bit machine, bit 0 for this bitset is in the 8th
byte! (and every bit that dm-log would use would be in the X area).

   0 0 0 0 X X X X
                 ^
                 here

which hasn't been cleared properly.

As the dm-raid1 code only syncs and counts regions which have a 0 in the
'sync_bits' bitset, and only finishes when it has counted high enough, a large
number of 1's among those 'X's will cause the sync to not complete.

It is worth noting that the code uses the same bitsets for in-memory and
on-disk logs.  As these bitsets are host-endian and host-sized, this means
that they cannot safely be moved between computers with

Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-11-22 09:14:31 -08:00
..
raid6test [PATCH] RAID6 Altivec fix 2005-09-17 11:49:58 -07:00
bitmap.c [PATCH] md: don't pass a NULL file* into ->prepare_write() 2005-11-18 07:49:46 -08:00
dm-bio-list.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dm-bio-record.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dm-crypt.c [PATCH] Use sg_set_buf/sg_init_one where applicable 2005-10-30 11:19:43 +11:00
dm-emc.c [PATCH] device-mapper dm-emc: Fix a memset 2005-05-05 16:36:46 -07:00
dm-exception-store.c [PATCH] vfree and kfree cleanup in drivers/ 2005-09-10 10:06:30 -07:00
dm-hw-handler.c [PATCH] device-mapper: Some missing statics 2005-05-05 16:36:46 -07:00
dm-hw-handler.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dm-io.c [PATCH] gfp flags annotations - part 1 2005-10-08 15:00:57 -07:00
dm-io.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dm-ioctl.c [PATCH] device-mapper: list_versions fix 2005-11-22 09:14:31 -08:00
dm-linear.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dm-log.c [PATCH] device-mapper: mirror log bitset fix 2005-11-22 09:14:31 -08:00
dm-log.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dm-mpath.c [PATCH] device-mapper: Fix queue_if_no_path initialisation 2005-09-28 07:46:42 -07:00
dm-mpath.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dm-path-selector.c [PATCH] device-mapper: Some missing statics 2005-05-05 16:36:46 -07:00
dm-path-selector.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dm-raid1.c [PATCH] gfp flags annotations - part 1 2005-10-08 15:00:57 -07:00
dm-round-robin.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dm-snap.c [PATCH] device-mapper snapshots: Handle origin extension 2005-07-12 16:19:11 -07:00
dm-snap.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dm-stripe.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dm-table.c [PATCH] device-mapper: fix deadlocks in core (prep) 2005-07-28 21:46:03 -07:00
dm-target.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dm-zero.c [PATCH] device-mapper: Some missing statics 2005-05-05 16:36:46 -07:00
dm.c [PATCH] kill bio->bi_set 2005-09-07 16:57:20 -07:00
dm.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
faulty.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
Kconfig Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
kcopyd.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
kcopyd.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
linear.c [BLOCK] Unify the seperate read/write io stat fields into arrays 2005-11-01 09:26:16 +01:00
Makefile [PATCH] md: optimised resync using Bitmap based intent logging 2005-06-21 19:07:43 -07:00
md.c [PATCH] md: fix is_mddev_idle calculation now that disk/sector accounting happens when request completes 2005-11-18 07:49:46 -08:00
mktables.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
multipath.c [PATCH] md: convert 'faulty' and 'in_sync' fields to bits in 'flags' field 2005-11-09 07:56:38 -08:00
raid0.c [BLOCK] Unify the seperate read/write io stat fields into arrays 2005-11-01 09:26:16 +01:00
raid1.c [PATCH] md: make manual repair work for raid1 2005-11-09 07:56:39 -08:00
raid5.c [PATCH] md: fix some locking and module refcounting issues with md's use of sysfs 2005-11-09 07:56:39 -08:00
raid6.h [PATCH] RAID6 Altivec fix 2005-09-17 11:49:58 -07:00
raid6algos.c [PATCH] RAID6 Altivec fix 2005-09-17 11:49:58 -07:00
raid6altivec.uc [PATCH] RAID6 Altivec fix 2005-09-17 11:49:58 -07:00
raid6int.uc Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
raid6main.c [PATCH] md: convert 'faulty' and 'in_sync' fields to bits in 'flags' field 2005-11-09 07:56:38 -08:00
raid6mmx.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
raid6recov.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
raid6sse1.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
raid6sse2.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
raid6x86.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
raid10.c [PATCH] md: convert 'faulty' and 'in_sync' fields to bits in 'flags' field 2005-11-09 07:56:38 -08:00
unroll.pl Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
xor.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00