I stated my problem with the undetected Media-Change on CD-Rom's after
generic-scsi-reads a few days before, but nobody answered me.
So (to be able to continue my work until the kernel fixed) I made a
quick dirty hack, that solved all problems for me.
The exact problem is, that the kernel read-caches all block-devices
and this cache is only cleared when a media is changed. So far so good...
But I need to read from a CD-Rom with generic-scsi-calls to get the TOC
of it or check sensekeys, and this generic-read seems to disable the
kernel of being able to detect future Media-Changes on the CD-Rom.
I do now force the kernel upon closing the sg-device to invalidate
the read-cache. I know this is brute-force attack, but it works me.
This patch is missing a very important thing...The right device have
to be invalidated, so if you worked with /dev/sgd, the kernel must
find out that this corresponds to /dev/sr0 and invalidate /dev/sr0.
I hardcoded in the moment /dev/sr0....
Perhaps this patch helps the kernel-developers to track down the problem
and fix in the right way!
But the best thing for me would be an ioctl to invalidate a device-buffer...
Is there any? Any ideas how to do it another way?
*** sg.c.orig Sat Apr 27 16:05:45 1996
--- sg.c Sat Apr 27 16:33:38 1996
*** 150,161 ****
--- 150,168 ----
static void sg_close(struct inode * inode, struct file * filp)
+ /* 11,0 is /dev/sr0 */
+ kdev_t devi = MKDEV(11,0);
+ /* T.N. Dirty hack to clear any buffers connected with the sg-device */
+ /* Hardcoded /dev/sr0 at this time */