devio: d_flush of a flush incapable device is not an error
authorAlan Cox <alan@linux.intel.com>
Fri, 15 May 2015 23:31:38 +0000 (00:31 +0100)
committerAlan Cox <alan@linux.intel.com>
Fri, 15 May 2015 23:31:38 +0000 (00:31 +0100)
Fixes mount, mkdir and other odd failures

Kernel/devio.c

index 282bde3..6eed647 100644 (file)
@@ -280,9 +280,14 @@ int d_ioctl(uint16_t dev, uint16_t request, char *data)
 
 int d_flush(uint16_t dev)
 {
-       if (!validdev(dev))
-               panic("d_flush: bad device");
-       return (*dev_tab[major(dev)].dev_ioctl) (minor(dev), BLKFLSBUF, 0);
+       /* Not as clean as would be ideal : FIXME */
+       int r = d_ioctl(dev, BLKFLSBUF, 0);
+       /* Not knowing the ioctl is not an offence */
+       if (r && udata.u_error == ENOTTY) {
+               udata.u_error = 0;
+               r = 0;
+       }
+       return r;
 }
 
 /*