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<crobi...@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