cvs commit: src/sys/boot/i386/libi386 biosdisk.c

Matthew Dillon dillon at crater.dragonflybsd.org
Sun Dec 19 17:17:03 PST 2004


dillon      2004/12/19 17:16:14 PST

DragonFly src repository

  Modified files:
    sys/boot/i386/libi386 biosdisk.c 
  Log:
  The dos slice scanner was incorrectly including extended partition entries
  beyond the root level in the slice table, causing the slices following to
  have an incorrect slice index relative to the way the kernel counts slices.
  This resulted in confusion between the /boot/loader and the kernel.
  
  We count slices by reserving the first four to exactly match the primary
  slice table, but then not counting any additional extended slice entries
  beyond that.  So, for example, if there are three extended tables the
  in-memory indexing layout would be something like A,B,C,<ext>,D,E,F rather
  then A,B,C,<ext>,D,<ext>,E,<ext>,F.  This matches what the kernel does.
  
  Additionally, a breadth-first traversal is used rather then a depth-first
  traversal.  This might not matter since most partitioners seem to use only
  the first two slice entries per table (one to specify the entry and another
  to chain to the next extended slice, with the last two zero'd out), but it
  was done to match the way the kernel scans the slices and it appears to
  be compatible with the way extended slices are created by e.g. Linux, NetBSD,
  and Windows.
  
  Submitted-by: walt <wa1ter at xxxxxxxxxxxxx>
  		with additional modifications by Matt Dillon
  Analysis-by: walt <wa1ter at xxxxxxxxxxxxx>
  
  Revision  Changes    Path
  1.9       +97 -39    src/sys/boot/i386/libi386/biosdisk.c


http://www.dragonflybsd.org/cvsweb/src/sys/boot/i386/libi386/biosdisk.c.diff?r1=1.8&r2=1.9&f=u





More information about the Commits mailing list