linux/drivers
Darrick J. Wong ac81b2ee45 [PATCH] make dm-mirror not issue invalid resync requests
I've been attempting to set up a (Host)RAID mirror with dm_mirror on
2.6.14.3, and I've been having a strange little problem.  The configuration
in question is a set of 9GB SCSI disks that have 17942584 sectors.  I set
up the dm_mirror table as such:

0 17942528 mirror core 2 2048 nosync 2 8:48 0 8:64 0

If I'm not mistaken, this sets up a 9GB RAID1 mriror with 1MB stripes
across both SCSI disks.  The sector count of the dm device is less than the
size of the disks, so we shouldn't fall off the end.  However, I always get
the messages like this in dmesg when I set up the dm table:

attempt to access beyond end of device
sdd: rw=0, want=17958656, limit=17942584

Clearly, something is trying to read sectors past the end of the drive.  I
traced it down to the __rh_recovery_prepare function in dm-raid1.c, which
gets called when we're putting the mirror set together.  This function
calls the dirty region log's get_resync_work function to see if there's any
resync that needs to be done, and queues up any areas that are out of sync.
 The log's get_resync_work function is actually a pointer to the
core_get_resync_work function in dm-log.c.

The core_get_resync_work function queries a bitset lc->sync_bits to find
out if there are any regions that are out of date (i.e.  the bit is 0),
which is where the problem occurs.  If every bit in lc->sync_bits is 1
(which is the case when we've just configured a new RAID1 with the nosync
option), the find_next_zero_bit does NOT return the size parameter
(lc->region_count in this case), it returns the size parameter rounded up
to the nearest multiple of 32!  I don't know if this is intentional, but
i386 and x86_64 both exhibit this behavior.

In any case, the statement "if (*region == lc->region_count)" looks like
it's supposed to catch the case where are no regions to resync and
return 0.  Since find_next_zero_bit apparently has a habit of returning
a value that's larger than lc->region_count, the enclosed patch changes
the equality test to a greater-than test so that we don't try to resync
areas outside of the RAID1 region.  Seeing as the HostRAID metadata
lives just past the end of the RAID1 data, mucking around in that area
is not a good idea.

I suppose another way to fix this would be to amend find_next_zero_bit so
that it doesn't return values larger than "size", but I don't know if
there's a reason for the current behavior.

Signed-Off-By: Darrick J. Wong <djwong@us.ibm.com>
Acked-by: Alasdair G Kergon <agk@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-01-06 08:34:01 -08:00
..
acorn
acpi [PATCH] driver core: replace "hotplug" by "uevent" 2006-01-04 16:18:08 -08:00
atm [PATCH] drivers/atm/adummy.c NULL noise removal 2005-12-15 10:04:31 -08:00
base [PATCH] memhotplug: register_memory should be global 2006-01-06 08:33:22 -08:00
block [PATCH] parport: Kconfig dependency fixes 2006-01-06 08:33:57 -08:00
bluetooth [PATCH] pcmcia: add some IDs for ide-cs and dtl1_cs 2006-01-06 00:31:07 +01:00
cdrom
char [PATCH] fix remaining list_for_each_safe_rcu in -mm (take 2) 2006-01-06 08:33:58 -08:00
connector [PATCH] Add timestamp field to process events 2005-12-12 08:57:42 -08:00
cpufreq [CPUFREQ] CPU frequency display in /proc/cpuinfo 2005-12-06 19:35:11 -08:00
crypto
dio
eisa
fc4 [SPARC]: introduce a SPARC Kconfig symbol 2005-12-22 23:09:54 -08:00
firmware [PATCH] dell_rbu: NULL noise removal 2005-12-15 10:04:30 -08:00
hwmon [PATCH] hwmon: w83792d fix unused fan pins 2005-11-29 21:39:22 -08:00
i2c [PATCH] i2c: Fix i2c-mv64xxx compilation error 2005-12-16 11:25:25 -08:00
ide [PATCH] pcmcia: add some IDs for ide-cs and dtl1_cs 2006-01-06 00:31:07 +01:00
ieee1394 [PATCH] don't freeze firewire on suspend. 2006-01-06 08:33:43 -08:00
infiniband Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6 2006-01-04 18:44:12 -08:00
input [PATCH] s390: cleanup Kconfig 2006-01-06 08:33:53 -08:00
isdn [PATCH] pcmcia: unify attach, EVENT_CARD_INSERTION handlers into one probe callback 2006-01-06 00:03:24 +01:00
macintosh [PATCH] therm_adt746x: Quiet fan speed change messages 2006-01-06 08:33:32 -08:00
mca
md [PATCH] make dm-mirror not issue invalid resync requests 2006-01-06 08:34:01 -08:00
media [PATCH] parport: phase fixes 2006-01-06 08:33:56 -08:00
message [PATCH] I2O: Lindent run 2006-01-06 08:33:54 -08:00
mfd [PATCH] input: fix ucb1x00-ts breakage after conversion to dynamic input_dev allocation 2005-12-12 08:57:45 -08:00
misc Merge master.kernel.org:/home/rmk/linux-2.6-drvmodel 2005-11-11 09:24:26 -08:00
mmc [PATCH] driver core: replace "hotplug" by "uevent" 2006-01-04 16:18:08 -08:00
mtd [PATCH] pcmcia: unify attach, EVENT_CARD_INSERTION handlers into one probe callback 2006-01-06 00:03:24 +01:00
net [PATCH] parport: include fixes 2006-01-06 08:33:58 -08:00
nubus
oprofile
parisc [PARISC] Make superio.c initialize before any driver needs it 2005-11-17 16:44:57 -05:00
parport [PATCH] simplify PARPORT_PC_PCMCIA dependencies 2006-01-06 08:33:58 -08:00
pci Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6 2006-01-04 18:44:12 -08:00
pcmcia [PATCH] pcmcia: cleanup cs.c, reduce size 2006-01-06 00:28:15 +01:00
pnp [PATCH] x86: Fixed pnp bios limits 2006-01-06 08:33:35 -08:00
rapidio
s390 [PATCH] s390: cleanup Kconfig 2006-01-06 08:33:53 -08:00
sbus [PATCH] sbus/char/uctrl: missing prototypes and NULL noise removal 2005-12-15 10:01:28 -08:00
scsi [PATCH] parport: Kconfig dependency fixes 2006-01-06 08:33:57 -08:00
serial [PATCH] ppc32/serial: Change mpc52xx_uart.c to use the Low Density Serial port major 2006-01-06 08:33:30 -08:00
sh
sn
tc [MIPS] zs.c: Resurrect the deceased zs.c for now. 2005-11-17 16:23:39 +00:00
telephony [PATCH] pcmcia: unify attach, EVENT_CARD_INSERTION handlers into one probe callback 2006-01-06 00:03:24 +01:00
usb [PATCH] pcmcia: unify attach, EVENT_CARD_INSERTION handlers into one probe callback 2006-01-06 00:03:24 +01:00
video [ATYFB]: Fix onboard video on SPARC Blade 100 for 2.6.{13,14,15} 2006-01-05 13:12:41 -08:00
w1 Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6 2006-01-04 18:44:12 -08:00
zorro
Kconfig
Makefile Link USB drivers later in the kernel 2005-12-03 20:50:51 -08:00