chiark / gitweb /
ata_id: skip ATA commands if we find an optical drive
authorKay Sievers <kay.sievers@vrfy.org>
Fri, 20 Nov 2009 02:03:27 +0000 (03:03 +0100)
committerKay Sievers <kay.sievers@vrfy.org>
Fri, 20 Nov 2009 02:03:27 +0000 (03:03 +0100)
Some drives are reported to erase CD-RW media with the ATA
commands we send.

Thanks to Christoph Stritt <phoenix@jobob.com> for his debugging.

Original bug is here:
  http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=556635

extras/ata_id/ata_id.c

index 66b9f42332858d717e30fd3c1baead3f792231d5..cbd3b5b8d2a58517bef3c8c85921cbd6568fa5f6 100644 (file)
@@ -38,6 +38,7 @@
 #include <linux/types.h>
 #include <linux/hdreg.h>
 #include <linux/fs.h>
+#include <linux/cdrom.h>
 #include <arpa/inet.h>
 
 #include "libudev.h"
@@ -210,6 +211,16 @@ static int disk_identify (struct udev *udev,
                goto fail;
        }
 
+       /*
+        * do not confuse optical drive firmware with ATA commands
+        * some drives are reported to blank CD-RWs
+        */
+       if (ioctl(fd, CDROM_GET_CAPABILITY, NULL) >= 0) {
+               errno = EIO;
+               ret = -1;
+               goto fail;
+       }
+
        /* So, it's a block device. Let's make sure the ioctls work */
        if ((ret = ioctl(fd, BLKGETSIZE64, &size)) < 0)
                goto fail;