[comp.sys.nsc.32k] Minix drive size problems.

nomad@hydra.convex.com (Lee Damon) (09/28/90)

I have created the following table in scsi_hi.c and recompiled the kernel:

/* start        length  drive           interleave */
  {0,           300256, &drive_tbl[DEFAULT], 1},        /* /dev/hd0 */
  {0,           256,    &drive_tbl[DEFAULT], 1},        /* /dev/hd1 */
  {256,         10000,  &drive_tbl[DEFAULT], 1},        /* /dev/hd2 */
  {10256,       90000,  &drive_tbl[DEFAULT], 1},        /* /dev/hd3 */
  {100256,      100000, &drive_tbl[DEFAULT], 1},        /* /dev/hd4 */
  {200256,      100000, &drive_tbl[DEFAULT], 1},        /* /dev/hd5 */
# endif


mkfs works, df says:
# df /dev/hd4
/dev/hd4    i-nodes:     1 used 33340 free      blocks:     2 used 34462 free

I'd think it should say 100000?

When I mount the file system I get:

File system Panic: Too many map blocks

2 questions: 

1) What else do I need to change to make these sizes work?

2) What else do I need to change to tell the system I have 2 or more disks?
(I'm trying to write to 3 Miniscribe 9380Ss - anyone already have
the kernel configed for that?)

thanks!
nomad
---------------------------------                                     \
play: castle!nomad or nomad@castle.org      - Lee "nomad" Damon -      \
work: convex!nomad or nomad@convex.com                                  \
Marketing Computer Systems Administrator - Convex [Super]Computer Co.  / \
	"Blessed are the pessimists, for they have made backups."     /   \

kls@ditka.UUCP (Karl Swartz) (09/28/90)

> I have created the following table in scsi_hi.c and recompiled the kernel:
> 
> /* start        length  drive           interleave */

 ...

>   {10256,       90000,  &drive_tbl[DEFAULT], 1},        /* /dev/hd3 */
>   {100256,      100000, &drive_tbl[DEFAULT], 1},        /* /dev/hd4 */
>   {200256,      100000, &drive_tbl[DEFAULT], 1},        /* /dev/hd5 */

> # df /dev/hd4
> /dev/hd4    i-nodes:     1 used 33340 free      blocks:     2 used 34462 free
> 
> I'd think it should say 100000?

Since Minix uses a 16-bit index to the block in a partition the
largest parition you can have is 64K blocks.  More precisely, you
can have at most 64K *zones* in a partition, where a zone defaults
to one block but can be more.  The release notes from Bruce say
this is untested, and in fact >= 32K is untested.

I tried a 60,000 block partition and also ran into the panic with
message about too many map blocks.  Investigation led me to the
following #defines in fs/const.h:

    #define ZMAP_SLOTS		6
    #define I_MAP_SLOTS		4
    #define NR_SUPERS		5

According to my calculations a 60,000 block (er, zone) partition
would require ZMAP_SLOTS to be at least 8.  I_MAP_SLOTS should be
fine as 4 allows for 32K inodes, more than enough for the largest
partition according to the default of one inode for every three
zones.  NR_SUPERS is just the size of the mount table, in effect,
and can be increased as needed.

Anyway, I increased ZMAP_SLOTS to 8.  This produced a kernel which
would bail out to the ROM monitor (bpt rather than panic) during
boot, right about where I'd expect it to start mounting partitions.

Somewhere here I recall a comment that the filesystem in 1.3 is
broken in various ways with regard to partitions >= 32K zones, and
perhaps with zones of > 1 block.  I think 1.5 is supposed to fix
this.

> 1) What else do I need to change to make these sizes work?

I'd suggest using smaller (< 32K) partitions for the moment.

> 2) What else do I need to change to tell the system I have 2 or more disks?

Look in kernel/scsi_hi.c for the definition of drive_tbl, right
before partition_tbl.  Define your drives here, then reference the
appropriate drive in the third parameter of each partition table
entry.

--
Karl Swartz			 |UUCP	{uunet,decwrl}!daver!ditka!kls
1-408/223-1308			 |INet	zygot!ditka!kls@apple.com
"I never let my schooling get in |BIX	kswartz
the way of my education."(Twain) |Snail	1738 Deer Creek Ct., San Jose CA 95148