Subject: Re: scsipi woes: can't call scsi command from kernel by ioctl?
To: Bill Studenmund <wrstuden@netbsd.org>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: tech-kern
Date: 08/31/2005 23:02:54
On Wed, Aug 31, 2005 at 04:25:32PM +0200, Reinoud Zandijk wrote:
> > > Yes; I think we should also allow writing though the raw or block device;
> > > so we could allow writing using e.g. dd (instead of writing only though
> > > the UDF filesystem).
> >
> > Are you sure that these devices will support that? Perhaps I'm
> > overly-conditioned, but I have never looked to dd as a way to write CDs,
> > so I don't see why it should be a way to write UDF disks.
>
> writing CD-R's with `dd' can be tricky but the current code will do it
> though i agree with Bill that i never looked at dd as a way to write CDs.
dd can be usefull for some kind of backups, but doing direct writes with
dump or tar would be usefull too.
> The CD-R disc is also finalised after the dd which surprised me. Is this
> copying with `dd' and closing the disc after behaviour hard coded ?
Well, if we issue a write to the device, the driver will issue a
SCSI_WRITE_6_COMMAND or WRITE_10 to the device, which recent DVD-burners seems
to handle fine. As far as I can see nothing else special happens.
There is a PREVENT_ALLOW issued when the device is closed, which may be
what cause the disk to be finalised.
>
> > However my understanding is that UDF is designed to work with MMC devices.
> > As such, I don't think it's unusual to expect it to know about SCSI
> > commands, and to not work so well with non-SCSI/ATAPI devices.
>
> UDF is designed to work on a wide range of optical devices like CD/DVD/BD
> but also non-sequential WORM like devices (rare critters) and has many
> references in the standard to things like sessions, tracks, reservations,
> sector type setup (CD-R/CD-RW), track types like BD-LOW not to mention the
> dreadfull DVD-R DL semantics with shifting logical sector. The UDF spec has
> specific requirements for each variation of CD/DVD/BD media. One of the the
> media types happends to be harddisc like so compact-flash and harddiscs (or
> files even) are fine too since all sector sizes >= 512 are ok.
>
> Good thing to remember is that only CD-MRW and DVD+MRW media resemble a
> harddiscs somewhat on device model but others of the family are quite
> different.
>
> Formatting media will be done in userland offcource with full SCSI access
> and a full format-type/format-time driven implementation could
> prolly/hopefully be made though things like the NWA just have to be queried
> for each write stretch.
>
> The biggest challenge with UDF is IMHO the fact that switching from write
> to read can result in the loss of logical sectors due to link-blocks. If
> you write stuff on a CD-R at n, n+1, n+2 etc till sector m and have to sync
> and read a part, you not only loose capacity and significant time but you
> can only start writing again at m+7; sectors m+1 till m+6 just DONT exist
> and access to them will result in a relatively lengthy retry with
> failure... disc allocation thus is somewhat intertwined with the disc
> sheduling.
Well, this isn't a problem if we do one big sequential write :)
>
> Somehow the disc sheduling has to be told to explicit go for read or for
> write requests. On switching from write to read the sync caches scsi/atapi
> call can be made automatically but the real disc sheduling has to be done
> in the filingsystem. Code like the `cdbounce' that just starts a fill-up
> read while it is writing a sector completely fails and is plain wrong for
> non rewritables.
>
> The current cd code from scsipi can be used only if UDF can assure all
> writes to it are in whole sectors. That brings be on a question i haven't
> found answered yet in the docs: can a filing system dictate the size of
> bufs it gets trough VOP_STRATEGY() ? (what to do with get/put pages i dunno
> yet; hopefully the generic ones).
>
> A very blunt solution could be to create a file on a specified
> random-access filingsystem that tracks the changes. A `commit' phase will
> then write out all the sectors in the right order without needing to do
> read/write cycles but in the case of one `commit' phase for BD media such a
> file could end up a 50 Gb or more... and do we really want that? AFAIK the
> MacOS-X UDF client uses this mechanism.
I would expect some kind of cache to be needed for such a filesystem.
But is caching of the whole data set required ?
BTW, we're quite away from the IOCTLs issues here :)
--
Manuel Bouyer <bouyer@antioche.eu.org>
NetBSD: 26 ans d'experience feront toujours la difference
--