This patch fixes the incomplete data return problem of /proc/ide/via and
addresses Bug #374 of Bugzilla.
When the number of consecutive read bytes are smaller than the total data
in via_get_info(), the second read() returns 0.
--- linux-2.5.62-vanilla/drivers/ide/pci/via82cxxx.c Thu Feb 20 18:51:52 2003
+++ linux-2.5.62/drivers/ide/pci/via82cxxx.c Thu Feb 20 23:09:23 2003
@@ -145,6 +145,7 @@
uen[4], udma[4], umul[4], active8b[4], recover8b[4];
struct pci_dev *dev = bmide_dev;
unsigned int v, u, i;
+ int len;
u16 c, w;
u8 t, x;
char *p = buffer;
@@ -274,7 +275,10 @@
speed[i] / 1000, speed[i] / 100 % 10);
/* hoping it is less than 4K... */
- return p - buffer;
+ len = (p - buffer) - offset;
+ *addr = buffer + offset;
+
+ return len > count ? count : len;
}
#endif /* DISPLAY_VIA_TIMINGS && CONFIG_PROC_FS */
>
> Isn't there another problem ? As I can see the amd74xx.c has also the same
> return in amd74xx_get_info(..) :
>
> return p - buffer;
>
> I don't have such hardware to test but there might be the same error ?
Yes, there are other drivers that have the same problem. I was planning to
send patches for them, as well.
So, if this patch fixes your problem, could you please change the bug status
to RESOLVED. Thanks.
> Isn't there another problem ? As I can see the amd74xx.c has also the same
> return in amd74xx_get_info(..) :
>
> return p - buffer;
>
> I don't have such hardware to test but there might be the same error ?
Ah, sorry for replying you in public, I didn't notice that you did not cc'ed
to the list. Please, cc your replies to lkml, as well. Thanks.
On Thu, Feb 20, 2003 at 11:55:19PM +0200, Faik Uygur wrote:
>
> This patch fixes the incomplete data return problem of /proc/ide/via and
> addresses Bug #374 of Bugzilla.
>
> When the number of consecutive read bytes are smaller than the total data
> in via_get_info(), the second read() returns 0.
>
> --- linux-2.5.62-vanilla/drivers/ide/pci/via82cxxx.c Thu Feb 20 18:51:52 2003
> +++ linux-2.5.62/drivers/ide/pci/via82cxxx.c Thu Feb 20 23:09:23 2003
> @@ -145,6 +145,7 @@
> uen[4], udma[4], umul[4], active8b[4], recover8b[4];
> struct pci_dev *dev = bmide_dev;
> unsigned int v, u, i;
> + int len;
> u16 c, w;
> u8 t, x;
> char *p = buffer;
> @@ -274,7 +275,10 @@
> speed[i] / 1000, speed[i] / 100 % 10);
>
> /* hoping it is less than 4K... */
> - return p - buffer;
> + len = (p - buffer) - offset;
> + *addr = buffer + offset;
> +
> + return len > count ? count : len;
> }
>
> #endif /* DISPLAY_VIA_TIMINGS && CONFIG_PROC_FS */
Thanks; applied.
--
Vojtech Pavlik
SuSE Labs