On Wed, 15 Apr 2009, William Schumann wrote:
> Alok,
> Responses below.
> Alok, Sanjay,
> Generated new webrev:
> http://cr.opensolaris.org/~wmsch/bug-7758/
> Previous webrev for reference:
> http://cr.opensolaris.org/~wmsch/bug-7758-prior/
>
> Alok Aggarwal wrote:
>>
>> On Tue, 14 Apr 2009, William Schumann wrote:
>>
>>> Alok,
>>>
>>> Alok Aggarwal wrote:
>>>> Hi William,
>>>>
>>>> On Thu, 9 Apr 2009, William Schumann wrote:
>>>>
>>>>> There are two problems addressed by this bug.
>>>>>
>>>>> 1) After initial AI installation, the swap slice is regarded as user
>>>>> data in subsequent AI installations instead of scratch
>>>>> 2) The swap slice space allocation in TI is not done with any awareness
>>>>> of AI customization
>>>>>
>>>>> The fix involving making AI aware of 1 and for AI to perform 2 instead
>>>>> of leaving everything to TI, which allocates the swap space for GUI.
>>>>
>>>> So, from a high level, is it fair to say that the policy with respect to
>>>> preserving slices by default isn't being
>>>> changed?
>>> Yes, the policy for preserving slices by default does not change.
>>>> And, the change you're making here is to create
>>>> a swap slice if either s1 doesn't exist or s1 exists with
>>>> a V_SWAP tag. Correct?
>>> The decision of whether a swap slice is created depends upon the memory
>>> size of the machine.
>>>>
>>>> Also now that 7718 has been reversed in the source code
>>>> only machines with less than 700MB memory will see this
>>>> problem on every other AI install after the *first* install.
>>> I think it would fail *all* AI installs after the first one (that didn't
>>> explicitly delete slice 1 per the workaround); otherwise, what you said
>>> is true. Also, without the fix, problem 2) above still exists - if a
>>> swap slice is called for, any slice customization or any existing slices
>>> which should be preserved will be destroyed instead.
>>
>> Okay, thanks for clarifying. Here are my comments -
>>
>> auto_install.c: Why is OM_ROOT being set for installs on
>> slices other than slice zero?
> OM_ROOT indicates that the VTOC partition tag for the install slice will be
> set to "root" - slices 0,1,3,4,5,6, or 7 could be the install slice.
I didn't read that expression correctly the first
time. I don't see how we exclude slice 2 from being
the install slice, and if we don't, it is something
we should revisit when we take a second look at the
relevant design.
>> perform_slim_install.c: line 2919: This function no longer
>> returns a boolean_t
> It returns the boolean_t values (0 or 1), which are evaluated in logical
> expressions as either zero or non-zero, so I don't see a problem. In
> principle, the definition of boolean_t could conceivably be changed, but
> much code would break. Also, I think of the boolean_t type as helpful in
> simplifying logical expressions making them more readable.
<sys/types.h> defines boolean_t as -
typedef enum { B_FALSE, B_TRUE } boolean_t;
Thus, it would be more appropriate for the return value to
be either B_FALSE or B_TRUE.
>> ti_dm.c: lines 1503 - 1515: It seems that this comment should
>> be made clearer to indicate under which conditions a swap slice
>> would be created - a) If it is explicitly specified or, b) if
>> the code figured out if the installation was being done on a low
>> memory machine
> added comments here
For some reason I still don't see the comments in
the updated webrev.
>> disk_slices.c: line 50: Why this change?
> I tried to explain this in the code review request - I was just changing the
> name from "install", which is obviously not a unique token, to "s_install",
> which would be more easily found in a text editor - that's the only reason.
> Vim has a nice feature - if you type '*' on a token, it grabs the token as
> the search string and jumps to the next occurrence.
I don't see this as a reason to change, I think
'install' is as good. But I don't have any strong
opinions on this, either way is fine.
Btw, if you haven't played with cscope it's worth
it. It's a much easier to search, among other things,
variable/function definitions.
>> disk_slices.c: line 365: How about check_slices_in_use() as
>> the name instead?
> I thought that "if (are_any_slices_in_table())" would be simple and readable
> for a function that asks the question "are there any slices already defined
> in the table?". Was this unclear? Too casual?
I think it's too casual but again I don't have any
strong opinions.
>> disk_slices.c: line 376: What is an exempt slice?
> A slice that is reserved for a special purpose and cannot be used for user
> data. Changed "exempt" to "reserved".
How about adding a blurb about what a reserved slice
is?
>> disk_slices.c: lines 430-432: Could you please expound on this?
>> There seems to be implicit ordering here that the callers must
>> maintain.
> Actually, the purpose of the code here is to avoid implicit ordering by the
> caller. If a swap slice is needed, it is easier to create it before
> creating any other slices - otherwise you have to decide which slice to take
> the space from. This create_swap_slice_if_necessary() call insures that the
> swap slice will be allocated before any other new slices are created. Also,
> create_swap_slice_if_necessary() is called during finalization for TI.
>
> Perhaps I should mention here that the creation of a swap slice cannot be
> specified in a manifest - it is automatic.
The last part is what I was missing, makes sense.
>> disk_slices.c: line 658: The thought of possible recursion
>> in this function makes me queasy. This seems like a perfect
>> candidate for some code refactoring in the future.
> Perhaps you understand this already, but I'll add the following just in
> case. There is no explicit initialization call in the Orchestrator for AI
> where the swap slice might be allocated. So, the first call from AI
> concerning slice customization could be om_create_slice(). Within
> om_create_slice() is a check to see if the swap slice is necessary. If it
> is, om_create_slice will be called recursively once, before it does any
> other work, so make sure that the swap slice is allocated. Furthermore,
> there is a guard so that it is not run more than once for the same purpose.
> Does this help?
Is this the only scenario in which this function can
be called recursively? Is there a way to restructure
this so it isn't called recursively or is it too risky
at this point?
At a minimum, I think this code needs a giant comment
stating the conditions under which this function can
be called recursively.
Alok