From: Sergey Vlasov <vsu@altlinux.ru>
To: Mathieu Fluhr <mfluhr@nero.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: 'False' IO error when copying from cdrom drive
Date: Thu, 23 Nov 2006 23:18:25 +0300 [thread overview]
Message-ID: <20061123231825.342a3237.vsu@altlinux.ru> (raw)
In-Reply-To: <1164311305.3013.25.camel@de-c-l-110.nero-de.internal>
[-- Attachment #1: Type: text/plain, Size: 1976 bytes --]
On Thu, 23 Nov 2006 20:48:25 +0100 Mathieu Fluhr wrote:
> I explain: First take this really simple program:
> ----8<------------------------------------------------------------------
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <fcntl.h>
>
>
> int main(int argc, char **argv)
> {
> if(argc < 2)
> return 0;
>
> int iFD = open(argv[1], O_RDONLY | O_NONBLOCK);
> if(iFD == -1)
> perror("open");
>
> while(1)
> sleep(1);
>
> return 0;
> }
> ----8<-----------------------------------------------------------------
[..]
> Ok. Now take a full DVD (I tested DVD+R, +RW and -R), with more than
> 4 300 000 000 bytes (very important :), and perform the following:
>
> 0. Open the tray of your recorder
> 1. Launch this small program above, passing the recorder device file as
> argument and let it run in background.
At this time the following code in drivers/ide/ide-cd.c:cdrom_read_toc()
is executed:
/* Try to get the total cdrom capacity and sector size. */
stat = cdrom_read_capacity(drive, &toc->capacity, §ors_per_frame,
sense);
if (stat)
toc->capacity = 0x1fffff;
set_capacity(info->disk, toc->capacity * sectors_per_frame);
Obviously, with the tray open cdrom_read_capacity() won't succeed,
therefore toc->capacity will be set to 0x1fffff.
> 2. then put the disc in the device and mount it
> 3. try to copy to whole content on the hard drive
>
> -> You will get an error like the following:
> > kernel: attempt to access beyond end of device
> > kernel: hdb: rw=0, want=8388612, limit=8388604
0x1fffff * 2048/512 == 8388604
Your background program is keeping the device open, which prevents
revalidation of capacity and other media information on subsequent
device opens.
When HAL polls CD-ROM devices to detect newly inserted media, it does
not keep the device open forever - instead, it opens and closes the
device every time. Your program should either do the same thing, or
just depend on HAL events.
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
next prev parent reply other threads:[~2006-11-23 20:18 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-23 19:48 'False' IO error when copying from cdrom drive Mathieu Fluhr
2006-11-23 20:18 ` Sergey Vlasov [this message]
2006-11-24 10:14 ` Mathieu Fluhr
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061123231825.342a3237.vsu@altlinux.ru \
--to=vsu@altlinux.ru \
--cc=linux-kernel@vger.kernel.org \
--cc=mfluhr@nero.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox