Date: Tue, 21 Dec 2004 16:14:17 +0900 From: Pyun YongHyeon <yongari@kt-is.co.kr> To: "Ballance, Robert T" <tyler@neo.tamu.edu> Cc: freebsd-sparc64@freebsd.org Subject: Re: sysinstall dead in -CURRENT? Message-ID: <20041221071417.GA5301@kt-is.co.kr> In-Reply-To: <200412210643.iBL6hHEK085224@smtp-relay.tamu.edu> References: <20041221025023.GB4468@kt-is.co.kr> <200412210643.iBL6hHEK085224@smtp-relay.tamu.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Dec 21, 2004 at 06:43:17AM -0000, Ballance, Robert T wrote: > > AFAIK, this has nothing to do with marius' zs(4) patch. > > There is also PR72962 for the issue. > > > > Long ago, I made a patch for this issue. But it wasn't further > > investigated due to lack of time. I sent a mail to one of > > developer but got no reply. The following is the summary of > > the mail. > > > > It seems that it happans on on systems with SCSI CDROM. In rev. > > 1.90 of scsi_cd.c, phk changed to return 2k sectors when no media > > inserted. But open_disk.c:Int_Open_Disk() just check sectorsize > > against 0. So if we have no media in CDROM, we would bypass the > > check and could generate division by zero exception. I guess we > > need at least the following patch. > > > > It seems that there are two cases here. > > 1. No media in CDROM -> sector = 2k, hd = 0 > > 2. media present in CDROM -> sector = 0, hd = 0 > > > > --- open_disk.c.orig Mon Sep 20 11:22:10 2004 > > +++ open_disk.c Tue Oct 26 17:45:17 2004 > > @@ -94,6 +94,8 @@ > > return (NULL); > > d->sector_size = s; > > len /= s; /* media size in number of sectors. */ > > + if (len == 0) > > + return (NULL); > > > > if (Add_Chunk(d, 0, len, name, whole, 0, 0, "-")) { > > DPRINT(("Failed to add 'whole' chunk")); > > @@ -123,6 +125,10 @@ > > */ > > o = d->bios_hd * d->bios_sect; > > d->bios_cyl = (o != 0) ? len / o : 0; > > + if (d->bios_cyl == 0) { > > + /* XXX This may indicate it is not DISK. */ > > + return (NULL); > > + } > > > > p = q; > > lo[0] = 0; > > > > And another one to plug memory leak. > > > > --- disk.c.orig Mon May 17 07:08:16 2004 > > +++ disk.c Tue Oct 26 16:46:23 2004 > > @@ -77,6 +77,7 @@ > > struct disk * > > Open_Disk(const char *name) > > { > > + struct disk *d; > > char *conftxt; > > size_t txtsize; > > int error; > > @@ -99,7 +100,10 @@ > > } > > conftxt[txtsize] = ''; /* in case kernel bug is still there */ > > > > - return Int_Open_Disk(name, conftxt); > > + d = Int_Open_Disk(name, conftxt); > > + free(conftxt); > > + > > + return (d); > > } > > > > void > > > > BTW, I don't know why GEOM thinks SCSI CDROM as a disk. On systems > > with IDE CDROM, it is not considered as a disk. So above problem > > only happen on systems with SCSI CDROM. With above patches my U2 > > displayed install screen successfully with/without CD mdia in CDROM. > > Is there anything I can do to help get this into the tree/working, and does this problem affect SCSI > cdrom's across the board, or just with sparc64? > I guess it happens only on sparc64 with SCSI CDROM. The patch I posted would be just a work-around, not fix. Why sysinstall thinks CDROM as a disk target would be the root cause. > I'm off for a good while from University, and I got access today to another Ultra2 and an Ultra60, so I > can test more stuff if needed ;) > I'd like to see real fix too. > -R. Tyler Ballance > > -- Regards, Pyun YongHyeon http://www.kr.freebsd.org/~yongari | yongari@freebsd.org
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20041221071417.GA5301>