svn commit: r344238 - head/stand/common
ian at freebsd.org
Mon Feb 18 14:31:25 UTC 2019
On Mon, 2019-02-18 at 15:09 +0200, Toomas Soome wrote:
> > On 18 Feb 2019, at 01:32, Ian Lepore <ian at FreeBSD.org> wrote:
> > 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.
> What was the reason for the revert? I still do think the current
> disk_open() approach is not good because it does break the promise to
> get MBR partition (see common/disk.h).
> Of course I can see the appeal for something like “boot disk0:” but
> case like that should be solved by iterating partition table, and not
> by making API to do wrong thing - if I did ask to for disk0s0: I
> really would expect to get disk0s0: and not disk0s0a:
> But anyhow, it would be good to understand the actual reasoning
> behind that decision.
I have no idea. As is so often the case, the commit message for the
revert said what the commit did ("revert to historic behavior") without
any hint of why the change was made. One has to assume that it broke
some working cases and people complained.
Part of the problem for the disk_open() "api" is that there is not even
a comment block with some hints in it. I was thinking one potential
solution might instead of using "if (partition < 0)" we could define a
couple magical partition number values, PNUM_GETBEST = -1,
PNUM_RAWSLICE = -2, that sort of thing. But it would require carefully
combing through the existing code looking at all calls to disk_open()
and all usage of disk_devdesc.d_partition.
More information about the svn-src-all