what's wrong with cd9660 fs
Thomas Schmitt
scdbackup at gmx.net
Sun Apr 22 09:22:28 UTC 2012
Hi,
> for now i add -udf when using mkisofs and mount_udf reads fine. anyway i
> would be happy to see fully working ISO filesystem,
I am not a FreeBSD hacker but just lurking here for the topics of ISO 9660
and SCSI command transport to DVD burners. So i lack the knowledge to
develop a patch. Nevertheless i am trying to understand how FreeBSD
interprets the filesystem images which are produced by my software too.
Meanwhile i learned that the UDF implementation in fs/udf does not
provide a straightforward example for a multi-extent implementation in
fs/cd9600.
The udf vnodes have a 1:1 relation to ECMA-167 File Entries which have
a 1:N relation to ECMA-167 Allocation Descriptors which describe the
extents.
For ISO 9660 one would need to submit multiple ECMA-119 Directory Records
to the creator of a vnode. The directory records are stored in a continuous
sequence in the image. A bit in their Flags field indicates whether there is
another directory record of the same file following.
In FreeBSD this would be a set of struct iso_directory_record. Only the
fields iso_directory_record.extent, iso_directory_record.size, and
iso_directory_record.flags are supposed to vary within the set.
Bit 7 of iso_directory_record.flags is 1 if another record with the next
extent of the same file follows. (ECMA-119 9.1.6 File Flags)
struct iso_node would need to store the set of .extent and .size values
instead of its components iso_node.iso_extent and iso_node.i_size.
Then one could let cd9660_bmap() iterate over the set of extents like
it is done by udf_bmap_internal().
The vnode is created in cd9660_vget_internal(), which gets called
in cd9660_vfsops.c and in cd9660_lookup.c.
The occasions in cd9660_vfsops.c submit directories and thus are not
prone to multi-extent (ECMA-119 6.3 "Each directory shall be recorded
as a file in a single Extent").
So the place to read multiple iso_directory_record before calling
cd9660_vget_internal() seems to be in cd9660_lookup():
/*
* Check for a name match.
*/
Well, here i got stopped for now by my lack of FreeBSD knowledge.
> ISO filesystem, which is nearly optimal for read only usage.
It has a few limitations. E.g. images cannot have more than 8 TiB size.
But together with Rock Ridge it makes a fine backup filesystem, and even
the most future-ish optical media plans to not yet reach the size limit.
Have a nice day :)
Thomas
More information about the freebsd-hackers
mailing list