Re: [PATCH] 2.5.8 IDE 36

Martin Dalecki
2002-04-16T09:23:51Z

Norbert Kiesel wrote:
> Hi,
>
> while trying to understand recent kernel changes I stumbled over
> the following patch to
>
> diff -urN linux-2.5.8/drivers/ide/ide.c linux/drivers/ide/ide.c
> --- linux-2.5.8/drivers/ide/ide.c Tue Apr 16 06:01:07 2002
> +++ linux/drivers/ide/ide.c Tue Apr 16 05:38:37 2002
>
> ...
> while (i > 0) {
> - u32 buffer[16];
> - unsigned int wcount = (i > 16) ? 16 : i;
> - i -= wcount;
> - ata_input_data (drive, buffer, wcount);
> + u32 buffer[SECTOR_WORDS];
> + unsigned int count = (i > 1) ? 1 : i;
> +
> + ata_read(drive, buffer, count * SECTOR_WORDS);
> + i -= count;
> }
> }
> ...
>
> While the old code called ata_input_read() with [0:16] as last param,
> the new code calls the (renamed) ata_read() with either 0 or 16. Also,
> the new code loops "i" times while the old code looped "i/16+1" times.
> Was this intended or should the patch better read like:
>
> ...
> while (i > 0) {
> - u32 buffer[16];
> - unsigned int wcount = (i > 16) ? 16 : i;
> - i -= wcount;
> - ata_input_data (drive, buffer, wcount);
> + u32 buffer[SECTOR_WORDS];
> + unsigned int count = max(i, SECTOR_WORDS);
> +
> + ata_read(drive, buffer, count);
> + i -= count;
> }
> }
> ...
>
> so long

It's fine as it is I think. Please look up at the initialization of i.
I have just divded the SECTROT_WORDS (== 16) factor out
of all the places above ata_read.