Date: Sun, 17 Feb 2019 23:32:09 +0000 (UTC) From: Ian Lepore <ian@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r344238 - head/stand/common Message-ID: <201902172332.x1HNW9ut059440@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: ian Date: Sun Feb 17 23:32:09 2019 New Revision: 344238 URL: https://svnweb.freebsd.org/changeset/base/344238 Log: Restore loader(8)'s ability for lsdev to show partitions within a bsd slice. I'm pretty sure this used to work at one time, perhaps long ago. It has been failing recently because if you call disk_open() with dev->d_partition set to -1 when d_slice refers to a bsd slice, it assumes you want it to open the first partition within that slice. When you then pass that open dev instance to ptable_open(), it tries to read the start of the 'a' partition and decides there is no recognizable partition type there. This restores the old functionality by resetting d_offset to the start of the raw slice after disk_open() returns. For good measure, d_partition is also set back to -1, although that doesn't currently affect anything. I would have preferred to make disk_open() avoid such rude assumptions and if you ask for partition -1 you get the raw slice. But the commit history shows that someone already did that once (r239058), and had to revert it (r239232), so I didn't even try to go down that road. Modified: head/stand/common/disk.c Modified: head/stand/common/disk.c ============================================================================== --- head/stand/common/disk.c Sun Feb 17 20:25:07 2019 (r344237) +++ head/stand/common/disk.c Sun Feb 17 23:32:09 2019 (r344238) @@ -133,6 +133,13 @@ ptable_print(void *arg, const char *pname, const struc dev.d_partition = -1; if (disk_open(&dev, part->end - part->start + 1, od->sectorsize) == 0) { + /* + * disk_open() for partition -1 on a bsd slice assumes + * you want the first bsd partition. Reset things so + * that we're looking at the start of the raw slice. + */ + dev.d_partition = -1; + dev.d_offset = part->start; table = ptable_open(&dev, part->end - part->start + 1, od->sectorsize, ptblread); if (table != NULL) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201902172332.x1HNW9ut059440>