Date: Tue, 5 Jan 1999 05:53:08 +0100 (MET) From: Luigi Rizzo <luigi@labinfo.iet.unipi.it> To: ken@plutotech.com (Kenneth D. Merry) Cc: mike@smith.net.au, committers@FreeBSD.ORG Subject: Re: proposed atapi-cd patch Message-ID: <199901050453.FAA01628@labinfo.iet.unipi.it> In-Reply-To: <199901042346.QAA60358@panzer.plutotech.com> from "Kenneth D. Merry" at Jan 4, 99 04:46:05 pm
next in thread | previous in thread | raw e-mail | index | archive | help
> > I think that diffs for both the ATAPI and SCSI drivers (and manpages)
> > would make this a candidate for immediate inclusion.
>
> I'll certainly want to see diffs to the CAM cd driver before they go in.
considering the whole patch (attached at the end for ease of
reference) is 5 useful lines can people knowledgeable with CAM help
me to come up (and test! i don't have a SCSI CD unit!) with a patch
and test it ? Should it be for /sys/cam/scsi/scsi_cd.c right ?
> I hesitate to use minor number bits to designate tracks, though. The cd
yes, in fact i don't like this approach very much but this is just
a temporary solution waiting for a better approach as i said.
> driver currently uses the standard disk minor numbering scheme. It looks
> like you're using the slice portion of the minor numbering scheme, which
> limits things to 32 tracks. How many tracks can be on a CD anyway?
99, although even 32 cause a significant name space polluttion to be
already too much!
> One (possibly stupid) question I have, though, is why can't the cd9660 code
> just remember the track offset?
it could, but i think then you should act on both kernel and client side
to put the offset in. I tried that approach but the offset would be
scattered in far too many places.
> The ioctl idea is interesting, but the problem I see is how does the driver
> know which client a request is coming from, and therefore which offset to
> use?
you'd need to allow multiple mounts from the same CD which is not supported
at the moment by the *-cd routines. so you just need one track
offset for the disk.
> I think it might be easier if the cd9660 code could handle the track offset
> stuff.
architecturally cleaner, perhaps, yes. But easier, i doubt it!
cheers
luigi
diff -u -r1.6 atapi-cd.c
--- atapi-cd.c 1998/12/07 21:58:20 1.6
+++ atapi-cd.c 1999/01/04 13:38:17
@@ -123,6 +123,7 @@
ptr->flags = F_MEDIA_CHANGED;
ptr->flags &= ~(F_WRITTEN|F_TRACK_PREP|F_TRACK_PREPED);
ptr->block_size = 2048;
+ ptr->starting_lba = 0 ;
ptr->refcnt = 0;
ptr->slot = -1;
ptr->changer_info = NULL;
@@ -377,6 +378,7 @@
acdopen(dev_t dev, int flags, int fmt, struct proc *p)
{
int lun = dkunit(dev);
+ int track = dkslice(dev); /* XXX this is a hack... */
struct acd *cdp;
if (lun >= acdnlun || !atapi_request_immediate)
@@ -409,6 +411,11 @@
}
}
}
+ cdp->starting_lba = ntohl(cdp->toc.tab[track].addr.lba) ;
+ if (track != 0) {
+ printf("Warning, opening track %d at %ld\n",
+ track, cdp->starting_lba);
+ }
return 0;
}
@@ -527,7 +534,7 @@
#ifdef NOTYET
lba = bp->b_offset / cdp->block_size;
#else
- lba = bp->b_blkno / (cdp->block_size / DEV_BSIZE);
+ lba = bp->b_blkno / (cdp->block_size / DEV_BSIZE) + cdp->starting_lba ;
#endif
else
lba = cdp->next_writeable_lba + (bp->b_offset / cdp->block_size);
diff -u -r1.2 atapi-cd.h
--- atapi-cd.h 1998/10/15 08:11:55 1.2
+++ atapi-cd.h 1999/01/04 13:29:07
@@ -345,6 +345,8 @@
u_char speed; /* Select drive speed */
u_int next_writeable_lba; /* Next writable position */
struct wormio_prepare_track preptrack; /* Scratch region */
+
+ u_long starting_lba; /* for multitrack */
#ifdef DEVFS
void *ra_devfs_token;
void *rc_devfs_token;
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199901050453.FAA01628>
