Subject: Re: Cannot mount root partition
To: Cheng-Chung Song <songcc@vnet.IBM.COM>
From: None <rhealey@aggregate.com>
List: amiga-dev
Date: 05/23/1994 13:05:54
> I finally solve the problem.   It is the combination of the way things got
> handled in readdisklabel() of disksubr.c and my harddisk.  My root is on Seagate
> ST-1096N, which has 1 spare sector for each cylinder.  So the calculated

	Gee, that's my drive too! 

> >>>>    lp->d_secpercyl = lp->d_nsectors * lp->d_ntracks;   <<<< Original
> >>>>    lp->d_secpercyl = rbp->secpercyl;                   <<<< New
> #ifdef DIAGNOSTIC
>         if (lp->d_secpercyl != rbp->secpercyl)
>                 printf("warning found rdb->secpercyl(%d) != "
>                     "rdb->nsectors(%d) * rdb->nheads(%d)\n", rbp->secpercyl,
>                     rbp->nsectors, rbp->nheads);
> #endif
>         lp->d_secperunit = lp->d_secpercyl * (rbp->highcyl - rbp->lowcyl + 1);
>         lp->d_sparespercyl = lp->d_sparespertrack = 0;
> ------------------------------------------------------------------------------
> 
> I don't know what is the best way to handle this problem in gerenal.  It seems
> that lp->d_sparespercyl is intended for this.  But I don't think we can specify
	My solution was to special case lp->d_secpercyl. Something like:
if (lp->d_secpercyl != rbp->secpercyl)
   lp->d_secpercyl = rbp->secpercyl

   I also fixed up lp->d_sparespercyl and lp->d_sparespertrack for grins,
   basically took  rdb->nsectors * rdb->nheads and subtracted rdb->secpercyl.
   Then I set lp->d_sparespertrack to lp->d_sparespercyl / nheads. This at
   least is more correct than just setting them to zero.

   Additionally I added the ability to recognise AMIX filesystems as I was
   sick of the messages on boot for those partitions. About 3 lines of code so
   it was no big change.

	-Rob

------------------------------------------------------------------------------