Why upstream udisks authors refuse integrating theses important patches?
Without them, udisks never works with some devices.
When you open a decice with O_EXECL and it's mounted, you'll get EBUSY error.
So when we get EBUSY, we check if it's mounted. If it is, we open it without O_EXECL.
Otherwise, that means other programs, such as cd burner, are using the device and we shouldn't touch it.
That's basically why is_mounted() is called here.
Personally, I think the correct way to integrate these two patches is like this:
In the original patch, you can find this:
} else if (errno == EBUSY && device->is_ide_cdrom) { // TODO: check if media is mounted // in that case mounting with O_EXCL should be safe fd = open (device->dev_path, O_RDONLY | O_NONBLOCK); if (fd != -1) { poller_check_ide_cdrom (fd, device); close (fd); }
}
change it to:
} else if (errno == EBUSY) { // no need to check for ide_cd here
+ /* From hal/hald/linux/addons/addon-storage.c: */
+ /* this means the disc is mounted or some other app,
+ * like a cd burner, has already opened O_EXCL */
+
+ /* HOWEVER, when starting hald, a disc may be
+ * mounted; so check /etc/mtab to see if it
+ * actually is mounted. If it is we retry to open
+ * without O_EXCL
+ */
+ if (is_mounted (device->dev_path))
+ {
+ fd = open (device->dev_path, O_RDONLY | O_NONBLOCK);
+ } if (fd != -1 && device->is_ide_cdrom) { // only IDE cd needs this. poller_check_ide_cdrom (fd, device); close (fd); }
}
Why upstream udisks authors refuse integrating theses important patches?
Without them, udisks never works with some devices.
When you open a decice with O_EXECL and it's mounted, you'll get EBUSY error.
So when we get EBUSY, we check if it's mounted. If it is, we open it without O_EXECL.
Otherwise, that means other programs, such as cd burner, are using the device and we shouldn't touch it.
That's basically why is_mounted() is called here.
Personally, I think the correct way to integrate these two patches is like this:
In the original patch, you can find this:
} else if (errno == EBUSY && device- >is_ide_ cdrom) {
// TODO: check if media is mounted
// in that case mounting with O_EXCL should be safe
fd = open (device->dev_path, O_RDONLY | O_NONBLOCK);
if (fd != -1) {
poller_ check_ide_ cdrom (fd, device);
close (fd);
}
}
change it to:
} else if (errno == EBUSY) { // no need to check for ide_cd here linux/addons/ addon-storage. c: */
if (fd != -1 && device- >is_ide_ cdrom) { // only IDE cd needs this.
poller_ check_ide_ cdrom (fd, device);
close (fd);
}
+ /* From hal/hald/
+ /* this means the disc is mounted or some other app,
+ * like a cd burner, has already opened O_EXCL */
+
+ /* HOWEVER, when starting hald, a disc may be
+ * mounted; so check /etc/mtab to see if it
+ * actually is mounted. If it is we retry to open
+ * without O_EXCL
+ */
+ if (is_mounted (device->dev_path))
+ {
+ fd = open (device->dev_path, O_RDONLY | O_NONBLOCK);
+ }
}