Hello Context: if a RAIDframe set contains a GPT, it does not honour the bootme atrtribute when loking for the root partition. The current behavior hardcodes the use of the first partition.
Fixing this requires rf_buildroothack() to know about the bootme GPT attribute, but that information is not available from struct dkwedge_info. I see the following ways to address the problem: 1) Read the GPT again in rf_buildroothack() and walk it looking for the bootme attribute. This involves duplicating a lot of code from sys/dev/dkwedge/dkwedge_gpt.c. I gave it a try and it works, but I am not happy with doing the job twice, both in source code and at runtime. 2) Make sys/dev/dkwedge/dkwedge_gpt.c record the bootme flag when it walks the GPT. The problem is where can we store it? 2a) We could create an enha&nced struct dkwedge_info2, it could have an flags field, or we could even an a union field for the underlying partition entry (MBR, BSD label, GPT...). But since struct dkwedge_info is known to userland, that would not be an easy change. 2b) struct dkwedge_softc is private, we could add a field here without being intrusive, it would just need accessor functions: int dkwedge_set_flags(struct disk *pdk, int partnum, int flags); int dkwedge_get_flags(struct disk *pdk, int partnum, int *flags); 3) Another idea? I would favor solution 2b. For now it would just be a flags field with just the bootme flag, but since struct dkwedge_softc is private, we can easily change that to something more complicated later, if needed. Opinions? -- Emmanuel Dreyfus m...@netbsd.org