Message ID | 1263234619-14522-2-git-send-email-crobinso@redhat.com |
---|---|
State | New |
Headers | show |
On Mon, Jan 11, 2010 at 01:30:19PM -0500, Cole Robinson wrote: > Current IDE floppy detection is hardcoded based on source file name. > Make this smarter by attempting a floppy specific ioctl. IDE floppys show up as /dev/hd?, these are old legacy floppies. Otherwise looks good except that I think the ioctl should have a higher match priority than the name match. Same applies to the CDROM version of the patch.
On 01/12/2010 05:16 AM, Christoph Hellwig wrote: > On Mon, Jan 11, 2010 at 01:30:19PM -0500, Cole Robinson wrote: >> Current IDE floppy detection is hardcoded based on source file name. >> Make this smarter by attempting a floppy specific ioctl. > > IDE floppys show up as /dev/hd?, these are old legacy floppies. > Ah, didn't realize there was a difference. > Otherwise looks good except that I think the ioctl should have a higher > match priority than the name match. Same applies to the CDROM version > of the patch. Will do. Thanks, Cole
diff --git a/block/raw-posix.c b/block/raw-posix.c index 3ec58d0..5d6b9fb 100644 --- a/block/raw-posix.c +++ b/block/raw-posix.c @@ -1055,9 +1055,26 @@ static int floppy_open(BlockDriverState *bs, const char *filename, int flags) static int floppy_probe_device(const char *filename) { + int fd, ret; + struct floppy_struct fdparam; + if (strstart(filename, "/dev/fd", NULL)) return 100; - return 0; + + fd = open(filename, O_RDONLY | O_NONBLOCK); + if (fd < 0) { + return 0; + } + + /* Attempt to detect via a floppy specific ioctl */ + if (ioctl(fd, FDGETPRM, &fdparam) < 0 && errno == EINVAL) { + ret = 0; + } else { + ret = 100; + } + + close(fd); + return ret; }
Current IDE floppy detection is hardcoded based on source file name. Make this smarter by attempting a floppy specific ioctl. Signed-off-by: Cole Robinson <crobinso@redhat.com> --- block/raw-posix.c | 19 ++++++++++++++++++- 1 files changed, 18 insertions(+), 1 deletions(-)