Re: VFS regression ? Re: disfunctional floppy driver in kernels 4.5, 4.6 and 4.7
On Sat, Jun 11, 2016 at 02:15:01PM +0100, One Thousand Gnomes wrote: > > open(/dev/fd0, O_ACCMODE) = -1 > If you do > > touch foo > > then compile and run the following program does it error on the newer > kernel ? > > #include > #include > > int main(int argc, char *argv[]) > { > if (open("foo", 3) == -1) > perror("foo"); > return 0; > } No errors get printed for kernel 4.4 to 4.7 . Regards, Wim. - w...@djo.tudelft.nl -
Re: VFS regression ? Re: disfunctional floppy driver in kernels 4.5, 4.6 and 4.7
On Sat, Jun 11, 2016 at 02:15:01PM +0100, One Thousand Gnomes wrote: > > open(/dev/fd0, O_ACCMODE) = -1 > If you do > > touch foo > > then compile and run the following program does it error on the newer > kernel ? > > #include > #include > > int main(int argc, char *argv[]) > { > if (open("foo", 3) == -1) > perror("foo"); > return 0; > } No errors get printed for kernel 4.4 to 4.7 . Regards, Wim. - w...@djo.tudelft.nl -
VFS regression ? Re: disfunctional floppy driver in kernels 4.5, 4.6 and 4.7
On Sat, 11 Jun 2016 01:02:55 +0200 Wim Osterholtwrote: > L.S. > > up to vanilla kernel 4.4.13 floppy functionality performs like it should. > (On an x86 PC that is. With a 1.44MB diskette drive.) > >From kernel 4.5* and up it changed to barely usable. > > After a virgin start (cold or warm boot) with an empty diskette drive and > then loaded with a standard 720K diskette you may run 'mdir' (from mtools) > and it shows the directory fine. > The first time you load a standard 1.44MB diskette (wether it is a virgin > start or after a 720K disktette) and you run mdir, it says literally: > > plain_io: Input/output error > init A: could not read boot sector > Cannot initialize 'A:' > > After this, all subsequent runs of mdir will do fine on both floppies. > However, most of my floppies are in a different format. (1.6MB) > I rely on 'setfdprm' (from fdutils) to set the correct parameters. > > setfdprm /dev/fd0 1600/1440 > /dev/fd0: Invalid argument > > Strace shows me: > ... > open(/dev/fd0, O_ACCMODE) = -1 > > So this actually means that 'invalid argument' refers to O_ACCMODE. That looks like a bug introduced in the VFS layer rather than in the floppy driver. A couple of Linux drivers have a weird un-Unixy hack where you open them with a mode value of 3 to mean "control only" and /dev/fd is the main user of this If you do touch foo then compile and run the following program does it error on the newer kernel ? #include #include int main(int argc, char *argv[]) { if (open("foo", 3) == -1) perror("foo"); return 0; } Alan
VFS regression ? Re: disfunctional floppy driver in kernels 4.5, 4.6 and 4.7
On Sat, 11 Jun 2016 01:02:55 +0200 Wim Osterholt wrote: > L.S. > > up to vanilla kernel 4.4.13 floppy functionality performs like it should. > (On an x86 PC that is. With a 1.44MB diskette drive.) > >From kernel 4.5* and up it changed to barely usable. > > After a virgin start (cold or warm boot) with an empty diskette drive and > then loaded with a standard 720K diskette you may run 'mdir' (from mtools) > and it shows the directory fine. > The first time you load a standard 1.44MB diskette (wether it is a virgin > start or after a 720K disktette) and you run mdir, it says literally: > > plain_io: Input/output error > init A: could not read boot sector > Cannot initialize 'A:' > > After this, all subsequent runs of mdir will do fine on both floppies. > However, most of my floppies are in a different format. (1.6MB) > I rely on 'setfdprm' (from fdutils) to set the correct parameters. > > setfdprm /dev/fd0 1600/1440 > /dev/fd0: Invalid argument > > Strace shows me: > ... > open(/dev/fd0, O_ACCMODE) = -1 > > So this actually means that 'invalid argument' refers to O_ACCMODE. That looks like a bug introduced in the VFS layer rather than in the floppy driver. A couple of Linux drivers have a weird un-Unixy hack where you open them with a mode value of 3 to mean "control only" and /dev/fd is the main user of this If you do touch foo then compile and run the following program does it error on the newer kernel ? #include #include int main(int argc, char *argv[]) { if (open("foo", 3) == -1) perror("foo"); return 0; } Alan