*
* Documentation/filesystems/udf.txt
*
UDF Filesystem version 0.9.8.1

If you encounter problems with reading UDF discs using this driver,
please report them to linux_udf@hpesjro.fc.hp.com, which is the
developer's list.

Write support requires a block driver which supports writing.  Currently
dvd+rw drives and media support true random sector writes, and so a udf
filesystem on such devices can be directly mounted read/write.  CD-RW
media however, does not support this.  Instead the media can be formatted
for packet mode using the utility cdrwtool, then the pktcdvd driver can
be bound to the underlying cd device to provide the required buffering
and read-modify-write cycles to allow the filesystem random sector writes
while providing the hardware with only full packet writes.  While not
required for dvd+rw media, use of the pktcdvd driver often enhances
performance due to very poor read-modify-write support supplied internally
by drive firmware.

-------------------------------------------------------------------------------
The following mount options are supported:

	gid=		Set the default group.
	umask=		Set the default umask.
	mode=		Set the default file permissions.
	dmode=		Set the default directory permissions.
	uid=		Set the default user.
	bs=		Set the block size.
	unhide		Show otherwise hidden files.
	undelete	Show deleted files in lists.
	adinicb		Embed data in the inode (default)
	noadinicb	Don't embed data in the inode
	shortad		Use short ad's
	longad		Use long ad's (default)
	nostrict	Unset strict conformance
	iocharset=	Set the NLS character set

The uid= and gid= options need a bit more explaining.  They will accept a
decimal numeric value which will be used as the default ID for that mount.
They will also accept the string "ignore" and "forget".  For files on the disk
that are owned by nobody ( -1 ), they will instead look as if they are owned
by the default ID.  The ignore option causes the default ID to override all
IDs on the disk, not just -1.  The forget option causes all IDs to be written
to disk as -1, so when the media is later remounted, they will appear to be
owned by whatever default ID it is mounted with at that time.

For typical desktop use of removable media, you should set the ID to that
of the interactively logged on user, and also specify both the forget and
ignore options.  This way the interactive user will always see the files
on the disk as belonging to him.

The remaining are for debugging and disaster recovery:

	novrs		Skip volume sequence recognition 

The following expect a offset from 0.

	session=	Set the CDROM session (default= last session)
	anchor=		Override standard anchor location. (default= 256)
	volume=		Override the VolumeDesc location. (unused)
	partition=	Override the PartitionDesc location. (unused)
	lastblock=	Set the last block of the filesystem/

The following expect a offset from the partition root.

	fileset=	Override the fileset block location. (unused)
	rootdir=	Override the root directory location. (unused)
			WARNING: overriding the rootdir to a non-directory may
				yield highly unpredictable results.
-------------------------------------------------------------------------------


For the latest version and toolset see:
	http://linux-udf.sourceforge.net/

Documentation on UDF and ECMA 167 is available FREE from:
	http://www.osta.org/
	http://www.ecma-international.org/

Ben Fennema <bfennema@falcon.csc.calpoly.edu>
