svn commit: r344238 - head/stand/common

Toomas Soome tsoome at me.com
Mon Feb 18 17:04:23 UTC 2019



> On 18 Feb 2019, at 18:25, Warner Losh <imp at bsdimp.com> wrote:
> 
> 
> 
> On Mon, Feb 18, 2019 at 7:31 AM Ian Lepore <ian at freebsd.org <mailto:ian at freebsd.org>> wrote:
> 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 <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.
> 
> I think that we should fix the disk_open() api. And then fix everything that uses it to comply with the new rules. The current hodge-podge that we have causes a number of issues for different environments that are only mostly worked around. I've done some work in this area to make things more regular, but it's still a dog's breakfast of almost-stackable devices that we overload too many things on, resulting in the mis-mash we have today. When the whole world was just MBR + BSD label, we could get away with it. But now that we have GPT as well as GELI support and ZFS pool devices on top of disk devices, the arrangements aren't working as well as could be desired.
> 
> Warner


I am looking on it too, but it has more traps than I was suspecting:)

rgds,
toomas



More information about the svn-src-head mailing list