svn commit: r237359 - user/ae/bootcode/sys/boot/i386/libi386

Andrey V. Elsukov ae at FreeBSD.org
Thu Jun 21 07:19:40 UTC 2012


Author: ae
Date: Thu Jun 21 07:19:39 2012
New Revision: 237359
URL: http://svn.freebsd.org/changeset/base/237359

Log:
  When we read partition tables we use bd_read, that directly reads
  from device bypassing bd_strategy. So we need add od_boff if we want
  read nested partition tables.
  Also, when we open MBR slice, try to detect nested partition table.

Modified:
  user/ae/bootcode/sys/boot/i386/libi386/biosdisk.c

Modified: user/ae/bootcode/sys/boot/i386/libi386/biosdisk.c
==============================================================================
--- user/ae/bootcode/sys/boot/i386/libi386/biosdisk.c	Thu Jun 21 07:16:12 2012	(r237358)
+++ user/ae/bootcode/sys/boot/i386/libi386/biosdisk.c	Thu Jun 21 07:19:39 2012	(r237359)
@@ -375,8 +375,9 @@ bd_open(struct open_file *f, ...)
 static int
 diskread(void *dev, void *buf, size_t blocks, off_t offset)
 {
+	struct open_disk *od = dev;
 
-	return (bd_read(dev, offset, blocks, buf));
+	return (bd_read(dev, offset + od->od_boff, blocks, buf));
 }
 
 static int
@@ -448,8 +449,7 @@ bd_opendisk(struct open_disk **odp, stru
 			goto out;
 		/* Adjust open_disk's offset within the biosdisk */
 		od->od_boff = part.start;
-		if (dev->d_kind.biosdisk.partition == -1 ||
-		    dev->d_kind.biosdisk.partition == 255)
+		if (dev->d_kind.biosdisk.partition == 255)
 			goto out; /* Nothing more to do */
 
 		/* Try to read BSD label */
@@ -463,6 +463,8 @@ bd_opendisk(struct open_disk **odp, stru
 		}
 		/* Save the slice number of the parent partition */
 		od->od_slice = part.index;
+		if (dev->d_kind.biosdisk.partition == -1)
+			goto out; /* Nothing more to do */
 		error = ptable_getpart(od->od_ptable, &part,
 		    dev->d_kind.biosdisk.partition);
 		if (error != 0) {


More information about the svn-src-user mailing list