lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <201004220408.33822.s.L-H@gmx.de>
Date:	Thu, 22 Apr 2010 04:08:30 +0200
From:	"Stefan Lippers-Hollmann" <s.L-H@....de>
To:	gregkh@...e.de
Cc:	linux-kernel@...r.kernel.org, neilb@...e.de, king.br@...il.com,
	stable@...nel.org
Subject: Re: patch md-raid5-allow-for-more-than-2-31-chunks.patch added to 2.6.33-stable tree

Hi

On Thursday 22 April 2010, gregkh@...e.de wrote:
> This is a note to let you know that we have just queued up the patch titled
> 
>     Subject: md/raid5: allow for more than 2^31 chunks.
> 
> to the 2.6.33-stable tree.  Its filename is
> 
>     md-raid5-allow-for-more-than-2-31-chunks.patch
> 
> A git repo of this tree can be found at 
>     http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
> 
> 
> From 35f2a591192d0a5d9f7fc696869c76f0b8e49c3d Mon Sep 17 00:00:00 2001
> From: NeilBrown <neilb@...e.de>
> Date: Tue, 20 Apr 2010 14:13:34 +1000
> Subject: md/raid5: allow for more than 2^31 chunks.
> 
> From: NeilBrown <neilb@...e.de>
> 
> commit 35f2a591192d0a5d9f7fc696869c76f0b8e49c3d upstream.
> 
> With many large drives and small chunk sizes it is possible
> to create a RAID5 with more than 2^31 chunks.  Make sure this
> works.
> 
> Reported-by: Brett King <king.br@...il.com>
> Signed-off-by: NeilBrown <neilb@...e.de>
> Signed-off-by: Greg Kroah-Hartman <gregkh@...e.de>

This patch, as part of the current 2.6.33 stable queue, breaks compiling
on i386 (CONFIG_LBDAF=y) for me (amd64 builds fine):

[...]
  BUILD   arch/x86/boot/bzImage
Root device is (254, 6)
Setup is 12700 bytes (padded to 12800 bytes).
System is 2415 kB
CRC db6fa5fa
Kernel: arch/x86/boot/bzImage is ready  (#1)
ERROR: "__umoddi3" [drivers/md/raid456.ko] undefined!

reverting just this patch fixes the problem for me.

Current Debian/ unstable:
ii  binutils                                            2.20.1-7                   The GNU assembler, linker and binary utilities
ii  gcc-4.4                                             4.4.3-9                    The GNU C compiler
ii  make                                                3.81-8                     An utility for Directing compilation.

Regards
	Stefan Lippers-Hollmann

-- 
> ---
>  drivers/md/raid5.c |   19 +++++++------------
>  1 file changed, 7 insertions(+), 12 deletions(-)
> 
> --- a/drivers/md/raid5.c
> +++ b/drivers/md/raid5.c
> @@ -1649,8 +1649,8 @@ static sector_t raid5_compute_sector(rai
>  				     int previous, int *dd_idx,
>  				     struct stripe_head *sh)
>  {
> -	long stripe;
> -	unsigned long chunk_number;
> +	sector_t stripe;
> +	sector_t chunk_number;
>  	unsigned int chunk_offset;
>  	int pd_idx, qd_idx;
>  	int ddf_layout = 0;
> @@ -1670,17 +1670,12 @@ static sector_t raid5_compute_sector(rai
>  	 */
>  	chunk_offset = sector_div(r_sector, sectors_per_chunk);
>  	chunk_number = r_sector;
> -	BUG_ON(r_sector != chunk_number);
>  
>  	/*
>  	 * Compute the stripe number
>  	 */
> -	stripe = chunk_number / data_disks;
> -
> -	/*
> -	 * Compute the data disk and parity disk indexes inside the stripe
> -	 */
> -	*dd_idx = chunk_number % data_disks;
> +	stripe = chunk_number;
> +	*dd_idx = sector_div(stripe, data_disks);
>  
>  	/*
>  	 * Select the parity disk based on the user selected algorithm.
> @@ -1869,14 +1864,14 @@ static sector_t compute_blocknr(struct s
>  				 : conf->algorithm;
>  	sector_t stripe;
>  	int chunk_offset;
> -	int chunk_number, dummy1, dd_idx = i;
> +	sector_t chunk_number;
> +	int dummy1, dd_idx = i;
>  	sector_t r_sector;
>  	struct stripe_head sh2;
>  
>  
>  	chunk_offset = sector_div(new_sector, sectors_per_chunk);
>  	stripe = new_sector;
> -	BUG_ON(new_sector != stripe);
>  
>  	if (i == sh->pd_idx)
>  		return 0;
> @@ -1969,7 +1964,7 @@ static sector_t compute_blocknr(struct s
>  	}
>  
>  	chunk_number = stripe * data_disks + i;
> -	r_sector = (sector_t)chunk_number * sectors_per_chunk + chunk_offset;
> +	r_sector = chunk_number * sectors_per_chunk + chunk_offset;
>  
>  	check = raid5_compute_sector(conf, r_sector,
>  				     previous, &dummy1, &sh2);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ