From: Laszlo Ersek <lersek@redhat.com>
To: Paulo Alcantara <pcacjr@zytor.com>,
"Ni, Ruiyu" <ruiyu.ni@intel.com>,
"Yao, Jiewen" <jiewen.yao@intel.com>
Cc: "Wu, Hao A" <hao.a.wu@intel.com>,
"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
"Zeng, Star" <star.zeng@intel.com>
Subject: Re: Functionality issues in UDF support
Date: Fri, 15 Sep 2017 18:45:11 +0200 [thread overview]
Message-ID: <2eaad62b-48ae-3db0-a04c-1f4f55ee12e8@redhat.com> (raw)
In-Reply-To: <cccb4218-1857-5deb-2c5a-a6f9174bf1b4@zytor.com>
On 09/15/17 18:27, Paulo Alcantara wrote:
> Laszlo,
>
> On 15/09/2017 12:51, Laszlo Ersek wrote:
>> On 09/15/17 09:38, Ni, Ruiyu wrote:
>>> Paulo,
>>> Supporting multiple LVDs can be considered as a long-term task, or
>>> can be added
>>> per request.
>>> But I think a urgent fix in PartitionDxe driver is to:
>>> 1. create child BLK only for the portion covered by the LVD
>>> 2. Do not create child BLK for LVD that's actually an Eltorito LVD
>>>
>>> I submitted a Bugzilla to record this:
>>> https://bugzilla.tianocore.org/show_bug.cgi?id=707
>>
>> Ray,
>>
>> I've just assigned this bug to myself, for investigation.
>>
>> I think I understand the problem, and the algorithm that's needed for
>> solving the problem is not complex:
>>
>> - iterate over the logical volume descriptors
>> - if the current one is ElTorito, continue iterating
>> - if the current one is not ElTorito, stop, and then install a child for
>> only the portion of the parent BlkIo (using *inclusive* start and stop
>> block numbers) that are covered by the current logical volume
>> descriptor
>> - if no LVD is found that is *not* ElTorito, then install no children,
>> and report failure
>> - future extension: produce children for all non-ElTorito LVDs.
>>
>> The problem is that I have absolutely no knowledge of UDF specifics, and
>> it would take me quite a bit of time to learn enough to actually
>> implement the details for the above algorithm. I don't think this
>> breakage should be allowed to stay in the tree until either I learn
>> enough to fix it, or Paulo finds enough time to write the code (he
>> doesn't have to start learning from zero, but apparently can't find the
>> time to fix the breakage).
>>
>> If I understand correctly, this is exactly the kind of regression that
>> is *not* localized, it messes up the system. Booting from UDF *Bridge*
>> disks is *already* required by the UEFI spec, and it used to work before
>> the UDF-related changes. I will not quote section "13.3.2.1 ISO-9660 and
>> El Torito" of the UEFI-2.7 spec here, because it is confusing; instead I
>> will quote the improved / proposed wording froam Mantis#1835 (I'm at
>> liberty to quote it because I wrote it):
>
> I can still boot my Windows 10 ISO image which is an UDF bridge disk
> image with the UDF changes. With or without UdfDxe driver. The problem
> is creating UDF child handles that occupy the entire medium instead of a
> single LVD, hence you can observe the wrong new partition handles &
> device paths from Ray's mapping out.
I understand that -- the regression is not necessarily an OS boot
regression, yet the fact that now the protocol database contains handles
and protocols that should not be there is a regression.
>
>>
>> > A DVD-ROM image formatted as required by the UDF 2.0 specification
>>> (OSTA Universal Disk Format Specification, Revision 2.0) shall be
>>> booted by UEFI if:
>>>
>>> - the DVD-ROM image conforms to the "UDF Bridge" format defined in the
>>> UDF 2.0 specification, and
>>>
>>> - the DVD-ROM image contains exactly one ISO-9660 file system, and
>>>
>>> - the ISO-9660 file system conforms to the "El Torito" Bootable CD-ROM
>>> Format Specification.
>>>
>>> Booting from a DVD-ROM satisfying these requirements is accomplished
>>> using the same methods as booting from a CD-ROM: the ISO-9660 file
>>> system shall be booted.
>>
>> Again, such disks / disk images could *already* be booted on edk2,
>> before changing PartitionDxe and adding UdfDxe. By introducing the
>> PartitionDxe changes, previous functionality is disturbed.
>>
>> Namely, according to your description at the start of this thread,
>> PartitionInstallUdfChildHandles() creates handles (with BlockIo
>> protocols and device paths) for such volumes -- ElTorito ones -- that
>> are already *owned* by other components in the firmware. In other words,
>> PartitionInstallUdfChildHandles() infringes on the ownership &
>> responsibilities of other components, when there is a UDF *Bridge*
>> volume in the system, which was handled correctly before.
>>
>>
>> This is the textbook definition of regression. My suggestion is that we
>> disable PartitionInstallUdfChildHandles() entirely, at least
>> temporarily. This should give Paulo enough time to fix the bug *well*. I
>> strongly suggest that we don't try to rush the fix; it could only lead
>> to even more problems.
>>
>> I'm going to submit a patch series that introduces a feature PCD and
>> short-circuits PartitionInstallUdfChildHandles() if the PCD is clear.
>
> Since I can't fix it in a pleasant time, as well as it's not a simple
> fix, that might help us a lot.
Thank you for your agreement / understanding -- I'd *very much* like
general UDF support to mature to the point where it can be enabled by
default.
Thanks
Laszlo
prev parent reply other threads:[~2017-09-15 16:42 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-15 3:33 Functionality issues in UDF support Ni, Ruiyu
2017-09-15 4:57 ` Paulo Alcantara
2017-09-15 5:08 ` Ni, Ruiyu
2017-09-15 5:33 ` Zeng, Star
2017-09-15 5:35 ` Ni, Ruiyu
2017-09-15 5:37 ` Paulo Alcantara
2017-09-15 6:02 ` Ni, Ruiyu
2017-09-15 6:26 ` Paulo Alcantara
2017-09-15 7:01 ` Zeng, Star
2017-09-15 7:08 ` Ni, Ruiyu
2017-09-15 7:10 ` Ni, Ruiyu
2017-09-15 7:22 ` Paulo Alcantara
2017-09-15 7:38 ` Ni, Ruiyu
2017-09-15 10:26 ` Laszlo Ersek
2017-09-15 11:03 ` Laszlo Ersek
2017-09-15 12:45 ` Ni, Ruiyu
2017-09-15 15:51 ` Laszlo Ersek
2017-09-15 16:27 ` Paulo Alcantara
2017-09-15 16:40 ` Ni, Ruiyu
2017-09-15 16:51 ` Laszlo Ersek
2017-09-15 23:38 ` Yao, Jiewen
2017-09-15 23:58 ` Yao, Jiewen
2017-09-16 21:19 ` Laszlo Ersek
2017-09-16 20:21 ` Laszlo Ersek
2017-09-15 16:45 ` Laszlo Ersek [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2eaad62b-48ae-3db0-a04c-1f4f55ee12e8@redhat.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox