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 Thanks/Ray > -----Original Message----- > From: Paulo Alcantara [mailto:[email protected]] > Sent: Friday, September 15, 2017 3:22 PM > To: Ni, Ruiyu <[email protected]>; Laszlo Ersek <[email protected]>; Yao, > Jiewen <[email protected]> > Cc: [email protected]; Wu, Hao A <[email protected]>; Zeng, Star > <[email protected]> > Subject: RE: Functionality issues in UDF support > > > > On September 15, 2017 4:10:10 AM GMT-03:00, "Ni, Ruiyu" > <[email protected]> wrote: > >Paulo, > >Can current code support multiple volumes in CDROM? > > No. It can handle only a single UDF logical volume. I think I never found an > UDF disk or image with more than a LVD (Logical Volume Descriptior). > Although I think I also added some comment in the code that it currently > handles only one logical volume per disk (no access to the code right now, > sorry). Other than that, there should be also a DEBUG() or perhaps an > ASSERT() in case more than one is found. > > For supporting multiple logical volumes, we would have to follow your > suggestion and change Partition driver to install a child handle for each LVD > found in an UDF fs. > > Thanks! > Paulo > > > > >Thanks/Ray > > > >> -----Original Message----- > >> From: Paulo Alcantara [mailto:[email protected]] > >> Sent: Friday, September 15, 2017 2:26 PM > >> To: Ni, Ruiyu <[email protected]>; Laszlo Ersek <[email protected]> > >> Cc: [email protected]; Wu, Hao A <[email protected]>; Zeng, > >Star > >> <[email protected]> > >> Subject: RE: Functionality issues in UDF support > >> > >> > >> > >> Ray, > >> > >> On September 15, 2017 3:02:11 AM GMT-03:00, "Ni, Ruiyu" > >> <[email protected]> wrote: > >> >Paulo, > >> >When will you change the implementation to this way? > >> > >> Unfortunately I can't promise you when I'd be doing this because, you > >know, > >> I can only work on this in my free time (very short, ATM). Perhaps > >this > >> weekend - but real life also happens and I may get preempted by > >something > >> else. > >> > >> Paulo > >> > >> > > >> > > >> >Thanks/Ray > >> > > >> >> -----Original Message----- > >> >> From: Paulo Alcantara [mailto:[email protected]] > >> >> Sent: Friday, September 15, 2017 1:38 PM > >> >> To: Ni, Ruiyu <[email protected]>; Laszlo Ersek > ><[email protected]> > >> >> Cc: [email protected]; Wu, Hao A <[email protected]>; Zeng, > >> >Star > >> >> <[email protected]> > >> >> Subject: RE: Functionality issues in UDF support > >> >> > >> >> > >> >> > >> >> Hi, > >> >> > >> >> On September 15, 2017 2:08:28 AM GMT-03:00, "Ni, Ruiyu" > >> >> <[email protected]> wrote: > >> >> >Hi Paulo, > >> >> >The responsibility of PartitionDxe driver is to partition the > >> >physical > >> >> >BLK (the entire CDROM) into logical BLKs (one BLK for each > >volume). > >> >> >It doesn't make sense to create a child BLK handle which still > >> >covers > >> >> >the entire CDROM. > >> >> >So as I suggested in below, PartitionInstallUdfChildHandles() > >should > >> >> >contain a for-loop to iterate all the volumes in the CDROM, and > >> >create > >> >> >child BLK handle for each volumes, but skipping Eltorito volume. > >> >> > >> >> Ah, makes sense to me now. Thanks for clarifying it. So I agree > >with > >> >you. > >> >> > >> >> In whatever you guys decide to do with it, count on me to give > >some > >> >help. > >> >> > >> >> Thanks! > >> >> Paulo > >> >> > >> >> > > >> >> >Thanks/Ray > >> >> > > >> >> >> -----Original Message----- > >> >> >> From: Paulo Alcantara [mailto:[email protected]] > >> >> >> Sent: Friday, September 15, 2017 12:58 PM > >> >> >> To: Ni, Ruiyu <[email protected]>; Laszlo Ersek > >> ><[email protected]> > >> >> >> Cc: [email protected]; Wu, Hao A <[email protected]>; > >Zeng, > >> >> >Star > >> >> >> <[email protected]> > >> >> >> Subject: Re: Functionality issues in UDF support > >> >> >> > >> >> >> > >> >> >> > >> >> >> Hi Ray, > >> >> >> > >> >> >> On September 15, 2017 12:33:04 AM GMT-03:00, "Ni, Ruiyu" > >> >> >> <[email protected]> wrote: > >> >> >> >Paulo, > >> >> >> >Before raising my questions, I'd like to confirm that for a > >> >single > >> >> >> >CD/DVD in UDF format, there might be multiple volumes. > >> >> >> >One of the volume could be Eltorito type. > >> >> >> >If my understanding is correct, please continue reading below. > >> >> >> > >> >> >> Right. > >> >> >> > >> >> >> > > >> >> >> >We found below mapping table using "map -r" shell command in a > >> >> >platform > >> >> >> >with only PartitionDxe change and without UdfDxe driver. > >> >> >> >It's a bug that <BLK6> and <BLK7/FS2> are created. Actually > >they > >> >are > >> >> >> >identical to <BLK3> and <BLK4/FS1>. > >> >> >> > > >> >> >> >--- Mapping table--- > >> >> >> > BLK2: Alias(s): > >> >> >> > PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0) > >> >> >> > > >> >> >> > BLK3: Alias(s): > >> >> >> > > >> >PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)/CDROM(0x0) > >> >> >> > FS1: Alias(s):CD1a65535a1:;BLK4: > >> >> >> > > >> >PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)/CDROM(0x1) > >> >> >> > > >> >> >> > BLK5: Alias(s): > >> >> >> > >> >>PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)/VenMedia(C5BD4D42 > - > >> >> >> 1A76-4996-8956-73CDA326CD0A) > >> >> >> > BLK6: Alias(s): > >> >> >> > >> >>PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)/VenMedia(C5BD4D42 > - > >> >> >> 1A76-4996-8956-73CDA326CD0A)/CDROM(0x0) > >> >> >> > FS2: Alias(s):CD1a65535ab:;BLK7: > >> >> >> > >> >>PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)/VenMedia(C5BD4D42 > - > >> >> >> 1A76- > >> >> >> >4996-8956-73CDA326CD0A)/CDROM(0x1) > >> >> >> >--- End of mapping table --- > >> >> >> > > >> >> >> >After investigation, I found the UDF logic in Partition driver > >> >> >doesn't > >> >> >> >truly skip the Eltorito volume. > >> >> >> >The code flow is like below: > >> >> >> > > >> >> >> > 1. <BLK2> is created by ScsiDiskDxe driver. > >> >> >> > 2. By passing <BLK2> to PartitionDxe Start() > >> >> >> >* <BLK3> and <BLK4/FS1> are created by PartitionDxe driver, > >by > >> >> >> >PartitionInstallElToritoChildHandles(). > >> >> >> >* <BLK5> is created by PartitionDxe driver, by > >> >> >> >PartitionInstallUdfChildHandles(). > >> >> >> > 3. By passing <BLK5> to PartitionDxe Start() > >> >> >> >* <BLK6> and <BLK7/FS2> are created by PartitionDxe driver, > >by > >> >> >> >PartitionInstallElToritoChildHandles(). > >> >> >> > > >> >> >> >I think step 2.a is not correct if my understanding to UDF is > >> >> >correct. > >> >> >> >The PartitionInstallUdfChildHandles() should iterate all > >volumes > >> >in > >> >> >the > >> >> >> >media and creates the child BLK handle for each volume, but > >> >skipping > >> >> >> >Eltorito volume. > >> >> >> > > >> >> >> >Instead, the current implementation just creates one child BLK > >> >> >handle > >> >> >> >for the entire media. > >> >> >> >To avoid reclusively creating child BLK handle, the > >> >> >> >PartitionInstallUdfChildHandles() contains a logic to do > >nothing > >> >> >when > >> >> >> >the handle is created by ParititonDxe driver. The logic is not > >> >> >needed > >> >> >> >when the implementation follows my suggestion above. > >> >> >> >Due to this, step 3.a creates the additional but > >shouldn't-exist > >> >BLK > >> >> >> >handles <BLK6> and <BLK7/FS2>. > >> >> >> > > >> >> >> >UdfDxe driver is supposed to Start() on each volume and > >produce > >> >> >> >SimpleFileSystem protocol. > >> >> >> > >> >> >> It seems that PartitionInstallUdfChildHandles() indeed skips > >the > >> >> >ElTorito > >> >> >> partitions otherwise you'd see the ".../CDROM(0x1)/VenMedia()" > >and > >> >> >> ".../CDROM(0x0)/VenMedia()" device paths *also* in the mapping > >> >> >output. > >> >> >> > >> >> >> If I understand correctly, the problem is that when we create a > >> >child > >> >> >handle > >> >> >> for an UDF volume, Partition driver will execute again, parse > >the > >> >> >newly > >> >> >> created UDF handle, find again an ElTorito partition and then > >> >install > >> >> >a new > >> >> >> child handle (VenMedia()/CDROM()) > >> >> >> > >> >> >> So, the logic of skipping of ElTorito partitions in > >> >> >> PartitionInstallUdfChildHandles() is not enough. Unfortunately > >we > >> >> >can't > >> >> >> handle UDF bridge disks (ElTorito + UDF) entirely in > >> >> >> PartitionInstallUdfChildHandles() -- we should probably also > >skip > >> >UDF > >> >> >device > >> >> >> paths in PartitionInstallElToritoChildHandles(). > >> >> >> > >> >> >> Does it make sense to you, Ray? Thanks for raising this up. > >> >> >> > >> >> >> Paulo > >> >> >> > >> >> >> > > >> >> >> >Do you agree with my above suggestions? > >> >> >> > > >> >> >> >Laszlo, > >> >> >> >I understood your needs of this UDF support. But as you can > >see > >> >> >there > >> >> >> >are many build failures and even functionality issues due to > >this > >> >> >> >support. > >> >> >> >I am not sure how the other open source project handles such > >> >cases. > >> >> >> >But I am thinking maybe we could move the whole UDF support to > >> >> >> >edk2-staging firstly and move it back after all the issues are > >> >> >> >resolved. > >> >> >> >What's your suggestion? > >> >> >> > > >> >> >> >Thanks/Ray > >> >> >> > >> >> >> -- > >> >> >> Sent from my Android device with K-9 Mail. Please excuse my > >> >brevity. > >> >> > >> >> -- > >> >> Sent from my Android device with K-9 Mail. Please excuse my > >brevity. > >> > >> -- > >> Sent from my Android device with K-9 Mail. Please excuse my brevity. > > -- > Sent from my Android device with K-9 Mail. Please excuse my brevity. _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

