Message ID | 1263310152-4443-2-git-send-email-crobinso@redhat.com |
---|---|
State | New |
Headers | show |
Looks good, same comment applies as to the cdrom one.
On 01/12/2010 09:29 AM, Cole Robinson wrote: > Current legacy floppy detection is hardcoded based on source file > name. Make this smarter by attempting a floppy specific ioctl. > > v2: Give ioctl check higher priority than filename check, > s/IDE/legacy/ > > Signed-off-by: Cole Robinson<crobinso@redhat.com> > --- > block/raw-posix.c | 20 ++++++++++++++++++-- > 1 files changed, 18 insertions(+), 2 deletions(-) > > diff --git a/block/raw-posix.c b/block/raw-posix.c > index b7254d8..d67280e 100644 > --- a/block/raw-posix.c > +++ b/block/raw-posix.c > @@ -1055,9 +1055,25 @@ static int floppy_open(BlockDriverState *bs, const char *filename, int flags) > > static int floppy_probe_device(const char *filename) > { > + int fd, ret, prio; > + struct floppy_struct fdparam; > + > if (strstart(filename, "/dev/fd", NULL)) > - return 100; > - return 0; > + prio = 50; > + > + fd = open(filename, O_RDONLY | O_NONBLOCK); > + if (fd< 0) { > + goto out; > + } > + > + /* Attempt to detect via a floppy specific ioctl */ > + ret = ioctl(fd, FDGETPRM,&fdparam); > + if (!(ret< 0&& errno == EINVAL)) > These two patches break boot from an image file. My suspicious is that it's failing because the errno is ENOSYS. You probably want to do the opposite and check for a positive return result instead of checking for the absence of a positive result. Regards, Anthony Liguori
On 01/13/2010 06:07 PM, Anthony Liguori wrote: > On 01/12/2010 09:29 AM, Cole Robinson wrote: >> Current legacy floppy detection is hardcoded based on source file >> name. Make this smarter by attempting a floppy specific ioctl. >> >> v2: Give ioctl check higher priority than filename check, >> s/IDE/legacy/ >> >> Signed-off-by: Cole Robinson<crobinso@redhat.com> >> --- >> block/raw-posix.c | 20 ++++++++++++++++++-- >> 1 files changed, 18 insertions(+), 2 deletions(-) >> >> diff --git a/block/raw-posix.c b/block/raw-posix.c >> index b7254d8..d67280e 100644 >> --- a/block/raw-posix.c >> +++ b/block/raw-posix.c >> @@ -1055,9 +1055,25 @@ static int floppy_open(BlockDriverState *bs, >> const char *filename, int flags) >> >> static int floppy_probe_device(const char *filename) >> { >> + int fd, ret, prio; >> + struct floppy_struct fdparam; >> + >> if (strstart(filename, "/dev/fd", NULL)) >> - return 100; >> - return 0; >> + prio = 50; >> + >> + fd = open(filename, O_RDONLY | O_NONBLOCK); >> + if (fd< 0) { >> + goto out; >> + } >> + >> + /* Attempt to detect via a floppy specific ioctl */ >> + ret = ioctl(fd, FDGETPRM,&fdparam); >> + if (!(ret< 0&& errno == EINVAL)) >> > > These two patches break boot from an image file. My suspicious is that > it's failing because the errno is ENOSYS. > Ugh, sorry about that. > You probably want to do the opposite and check for a positive return > result instead of checking for the absence of a positive result. > Sounds good. Thanks, Cole
diff --git a/block/raw-posix.c b/block/raw-posix.c index b7254d8..d67280e 100644 --- a/block/raw-posix.c +++ b/block/raw-posix.c @@ -1055,9 +1055,25 @@ static int floppy_open(BlockDriverState *bs, const char *filename, int flags) static int floppy_probe_device(const char *filename) { + int fd, ret, prio; + struct floppy_struct fdparam; + if (strstart(filename, "/dev/fd", NULL)) - return 100; - return 0; + prio = 50; + + fd = open(filename, O_RDONLY | O_NONBLOCK); + if (fd < 0) { + goto out; + } + + /* Attempt to detect via a floppy specific ioctl */ + ret = ioctl(fd, FDGETPRM, &fdparam); + if (!(ret < 0 && errno == EINVAL)) + prio = 100; + + close(fd); +out: + return prio; }
Current legacy floppy detection is hardcoded based on source file name. Make this smarter by attempting a floppy specific ioctl. v2: Give ioctl check higher priority than filename check, s/IDE/legacy/ Signed-off-by: Cole Robinson <crobinso@redhat.com> --- block/raw-posix.c | 20 ++++++++++++++++++-- 1 files changed, 18 insertions(+), 2 deletions(-)