[RFC] [PATCH] [MTD-UTILS]: flash_lock: fix length being passed

Artem Bityutskiy dedekind1 at gmail.com
Fri Dec 4 03:41:45 EST 2009


On Wed, 2009-12-02 at 19:58 +0530, Vimal Singh wrote:
> This patch fixes the 'length' calculation.
> Making it:
> +       mtdLockInfo.length = (num_sectors - 1) * mtdInfo.erasesize;
> Rather:
> -       mtdLockInfo.length = num_sectors * mtdInfo.erasesize;
> 
> Say there are 240 blocks present in the device. Then:
> offset starts from: 0x0
> and full size of device: 0x1E00000
> 
> doing: 240 * 0x20000 gives -> 0x1E00000
> But last block address should be 0x1DE0000 (which spans for 0x20000
> bytes, adding upto size of 0x1E00000)
> 
> Signed-off-by: Vimal Singh <vimalsingh at ti.com>
> ---
> 
> --- flash_lock.c.org	2009-11-24 19:33:18.000000000 +0530
> +++ flash_lock.c	2009-11-24 19:33:13.000000000 +0530
> @@ -71,7 +71,7 @@ int main(int argc, char *argv[])
>  	}
> 
>  	mtdLockInfo.start = ofs;
> -	mtdLockInfo.length = num_sectors * mtdInfo.erasesize;
> +	mtdLockInfo.length = (num_sectors - 1) * mtdInfo.erasesize;
>  	if(ioctl(fd, MEMLOCK, &mtdLockInfo))
>  	{
>  		fprintf(stderr, "Could not lock MTD device: %s\n", argv[1]);
> @@ -81,4 +81,3 @@ int main(int argc, char *argv[])

So if num_sectors is 1, mtdLockInfo.length is 0 - is it expected?

-- 
Best Regards,
Artem Bityutskiy (Артём Битюцкий)




More information about the linux-mtd mailing list