[PATCH-V2] Bug in m25p80.c during whole-chip erase

Steven A. Falco sfalco at harris.com
Wed May 27 09:53:39 EDT 2009


I sent the following patch about a month ago.  There seemed to
be some interest, but I never saw anyone say they would/could
merge it.

So, is there any interest in merging this?

	Steve

> There is a logic error in "whole chip erase" for the m25p80 family.  If
> the whole device is successfully erased, erase_chip() will return 0, and
> the code will fall through to the "else" clause, and do sector-by-sector
> erase in addition to the whole-chip erase.  This patch corrects that.
> 
> Signed-off-by: Steven A. Falco <sfalco at harris.com>
> ---
> 
> diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c
> index 6659b22..3a2fed8 100644
> --- a/drivers/mtd/devices/m25p80.c
> +++ b/drivers/mtd/devices/m25p80.c
> @@ -251,10 +251,12 @@ static int m25p80_erase(struct mtd_info *mtd, struct erase_info *instr)
>  	mutex_lock(&flash->lock);
>  
>  	/* whole-chip erase? */
> -	if (len == flash->mtd.size && erase_chip(flash)) {
> -		instr->state = MTD_ERASE_FAILED;
> -		mutex_unlock(&flash->lock);
> -		return -EIO;
> +	if (len == flash->mtd.size) {
> +		if (erase_chip(flash)) {
> +			instr->state = MTD_ERASE_FAILED;
> +			mutex_unlock(&flash->lock);
> +			return -EIO;
> +		}
>  
>  	/* REVISIT in some cases we could speed up erasing large regions
>  	 * by using OPCODE_SE instead of OPCODE_BE_4K.  We may have set up
> 




More information about the linux-mtd mailing list