RE: Can not read UDF CD
From: David Balazic
Date: Fri Jul 30 2004 - 02:22:25 EST
I tried your suggestions , but none of them worked :
(60071 was calculated as per your code)
(all failed with mount error(not printed here), the text below is from
dmesg)
mount -r -t udf -o anchor=60071 /dev/cdrom2 /mnt/cdrom2
UDF-fs DEBUG fs/udf/lowlevel.c:57:udf_get_last_session: XA disk: yes,
vol_desc_start=30622
UDF-fs DEBUG fs/udf/super.c:1552:udf_fill_super: Multi-session=30622
UDF-fs DEBUG fs/udf/super.c:540:udf_vrs: Starting at sector 30638 (2048 byte
sectors)
attempt to access beyond end of device
hdd: rw=0, want=362776, limit=240288
UDF-fs DEBUG fs/udf/misc.c:225:udf_read_tagged: block=90693, location=60071:
read failed
UDF-fs DEBUG fs/udf/misc.c:236:udf_read_tagged: location mismatch block
30878, tag 30878 != 256
UDF-fs DEBUG fs/udf/super.c:1342:udf_load_partition: No Anchor block found
UDF-fs: No partition found (1)
----
mount -r -t udf -o lastblock=60071 /dev/cdrom2 /mnt/cdrom2
UDF-fs DEBUG fs/udf/lowlevel.c:57:udf_get_last_session: XA disk: yes,
vol_desc_start=30622
UDF-fs DEBUG fs/udf/super.c:1552:udf_fill_super: Multi-session=30622
UDF-fs DEBUG fs/udf/super.c:540:udf_vrs: Starting at sector 30638 (2048 byte
sectors)
hdd: command error: status=0x51 { DriveReady SeekComplete Error }
hdd: command error: error=0x54
end_request: I/O error, dev hdd, sector 240284
UDF-fs DEBUG fs/udf/super.c:684:udf_find_anchor: Anchor found at block
60069, location mismatch 60069.
UDF-fs DEBUG fs/udf/super.c:684:udf_find_anchor: Anchor found at block
59921, location mismatch 59921.
UDF-fs DEBUG fs/udf/super.c:684:udf_find_anchor: Anchor found at block
59919, location mismatch 59919.
UDF-fs DEBUG fs/udf/misc.c:236:udf_read_tagged: location mismatch block
30878, tag 30878 != 256
UDF-fs DEBUG fs/udf/super.c:1342:udf_load_partition: No Anchor block found
UDF-fs: No partition found (1)
---
With your patch from mail :
mount -r -t udf /dev/cdrom2 /mnt/cdrom2
attempt to access beyond end of device
hdd: rw=0, want=240292, limit=240288
UDF-fs: No partition found (1)
> ----------
> From: Pat LaVarre[SMTP:p.lavarre@xxxxxxxx]
> Sent: 29. julij 2004 16:44
> To: David Balazic
> Cc: 'linux_udf@xxxxxxxxxxxxxxxxx'; 'linux-kernel@xxxxxxxxxxxxxxx'
> Subject: Re: Can not read UDF CD
>
> David B:
>
> /// In short,
>
> I suggest quickly trying the mount -o lastblock= and anchor= udf.ko
> options described at:
>
> http://lxr.linux.no/source/Documentation/filesystems/udf.txt?v=2.6.5
>
> else working thru til able to try the phgfsck described at my page:
>
> http://udfko.blog-city.com/read/577369.htm
>
> If you do post the phgfsck report on the web, I'll gladly link to it.
>
> /// At length, in Seven parts ...
>
> /// 1) Similarly
>
> > UDF-fs DEBUG fs/udf/misc.c:236:udf_read_tagged: location mismatch block
> 30878, tag 30878 != 256
> > UDF-fs DEBUG fs/udf/super.c:1342:udf_load_partition: No Anchor block
> found
> > UDF-fs: No partition found (1)
>
> In the merely private archives of linux_udf, just this week we see me
> suffering thru something highly similar, specifically:
>
> kernel: UDF-fs DEBUG fs/udf/misc.c:236:udf_read_tagged: location mismatch
> block 256, tag 0 != 256
> kernel: UDF-fs DEBUG fs/udf/super.c:1342:udf_load_partition: No Anchor
> block found
> kernel: UDF-fs: No partition found (1)
>
> Note, since 2.6.7, by default these messages will grow more cryptic, we
> will see only:
>
> kernel: UDF-fs: No partition found (1)
>
> > > > UDF-fs DEBUG fs/udf/misc.c:236:udf_read_tagged: location mismatch
> block 30878, tag 30878 != 256
> > > UDF-fs DEBUG fs/udf/misc.c:236:udf_read_tagged: location mismatch
> block 256, tag 0 != 256
>
> I'm guessing these messages mean the try to mount halted over garbage
> found at LBA x100 (256), but Ben wrote this code, not me.
>
> /// 2) Where
>
> What kind of cable do you use, what is your device name, what is your
> mount point?
>
> Til I know, I will cover both USB and PATAPI and pretend you want to
> mount /dev/scd0 at /mnt/scd0.
>
> /// 3) -o lastblock="$n"
>
> Up in user land, my workaround was:
>
> n="`dc -e \"\`sudo blockdev --getsize /dev/scd0\` 512 * 2048 / 1 - p\"`"
> sudo mount -r -o lastblock="$n" /dev/scd0 /mnt/scd0
>
> /// 4) patch -p1 ...
>
> To recover the feature:
>
> sudo mount -r /dev/scd0 /mnt/scd0
>
> for such unfriendly discs, I web-published the patch quoted below to the
> patches-udf.lastblock package of http://iomrrdtools.sourceforge.net/
>
> /// 5) -o anchor=...
>
> If -o lastblock="$n" doesn't work for you, then one more blind try is -o
> anchor="$n" i.e.
>
> n="`dc -e \"\`sudo blockdev --getsize /dev/scd0\` 512 * 2048 / 1 - p\"`"
> sudo mount -r -o anchor="$n" /dev/scd0 /mnt/scd0
>
> Please note -o anchor is arguably reckless except when combined with -r.
>
> /// 6) phgfsck
>
> If neither blind try works for you, then to make sense of the disc you
> can try phgfsck. For example, here, I see:
>
> $ sudo phgfsck -scsi /dev/sg0 | grep 'AVDPs at'
> Number of AVDPs: 2, AVDPs at N-256, N
> $
>
> Seeing "AVDP ... at ... N" tells me to try what I mentioned above:
>
> n="`dc -e \"\`sudo blockdev --getsize /dev/scd0\` 512 * 2048 / 1 - p\"`"
> sudo mount -r -o anchor="$n" /dev/scd0 /mnt/scd0
>
> /// 7) reconfiguring Linux to permit phgfsck
>
> http://www.extra.research.philips.com/udf/
> is the Philips page that offers the phgfsck, aka the "Philips UDF
> Verifier".
>
> My clarification of that page is:
>
> http://udfko.blog-city.com/read/577369.htm
>
> Philips deserves nothing but kudos for donating the phgfsck to improve
> UDF interoperability worldwide ... except the fact remains they haven't
> chosen to release their copyright under a license approved as open
> source by such authorities as sourceforge.net.
>
> Consequently, the phgfsck can be unusually hard to use in Linux.
> Specifically, it does Not incorporate any of the better SCSI pass thru
> libraries. Privately, as yet I've heard from Two employees of different
> corporations who privately requested and privately were denied
> permission to donate code into the phgfsck, because its source is partly
> closed.
>
> First, as yet with the phgfsck, you have to substitute an sg name for
> the regular dev name, even when running 2.6.
>
> To discover your sg name, you can try each of /dev/sg* to see what
> happens, or you can download yet another tool, such as sg_scan -i or my
> own plscsi -w, found at http://members.aol.com/plscsi/linux/
>
> In theory `phgfsck -showscsi` will give you device names, but for me
> that query doesn't work reliably. Trying here just now in
> 2.6.8-rc2-bk7, it hangs. In the past, I've seen it miss names.
>
> Often you need root privilege to discover the sg name.
>
> You will probably have an sg name to find only if your kernel has a
> drivers/scsi/sg.ko and your device name was among the /dev/scd*
>
> Else you might have to get into substituting ide-scsi.ko for ide-cd.ko,
> especially if your device name was among the /dev/hd*. linux-scsi
> speaks occasionally of the issues such substitutions raise.
>
> Pat LaVarre
> http://iomrrdtools.sourceforge.net/
> http://udfko.blog-city.com/
>
> --- From:
> http://sourceforge.net/project/showfiles.php?group_id=101444&package_id=12
> 5426
>
> See also: Readme.txt
> ... Copyright (c) 2004 Iomega Corp
> ... free software ...
> ... GNU General Public License as ... either ... or ...
> ...
>
> diff -urp linux-2.6.8-rc2-bk7/fs/udf/lowlevel.c
> linux-2.6.8-rc2-bk7-pel/fs/udf/lowlevel.c
> --- linux-2.6.8-rc2-bk7/fs/udf/lowlevel.c 2004-06-15
> 23:19:36.000000000 -0600
> +++ linux-2.6.8-rc2-bk7-pel/fs/udf/lowlevel.c 2004-07-28
> 14:46:02.373806296 -0600
> @@ -73,9 +73,9 @@ udf_get_last_block(struct super_block *s
> struct block_device *bdev = sb->s_bdev;
> unsigned long lblock = 0;
>
> - if (ioctl_by_bdev(bdev, CDROM_LAST_WRITTEN, (unsigned long)
> &lblock))
> - lblock = bdev->bd_inode->i_size >> sb->s_blocksize_bits;
> -
> + if (!ioctl_by_bdev(bdev, CDROM_LAST_WRITTEN, (unsigned long)
> &lblock))
> + return lblock;
> + lblock = bdev->bd_inode->i_size >> sb->s_blocksize_bits;
> if (lblock)
> return lblock - 1;
> else
> diff -urp linux-2.6.8-rc2-bk7/fs/udf/super.c
> linux-2.6.8-rc2-bk7-pel/fs/udf/super.c
> --- linux-2.6.8-rc2-bk7/fs/udf/super.c 2004-07-28
> 10:36:35.928051888 -0600
> +++ linux-2.6.8-rc2-bk7-pel/fs/udf/super.c 2004-07-28
> 14:45:45.356393336 -0600
> @@ -1562,6 +1562,9 @@ static int udf_fill_super(struct super_b
> goto error_out;
> }
>
> + if (!UDF_SB_LASTBLOCK(sb)) {
> + UDF_SB_LASTBLOCK(sb) = udf_get_last_block(sb);
> + }
> udf_find_anchor(sb);
>
> /* Fill in the rest of the superblock */
>
>
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/