From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ua1-f51.google.com (mail-ua1-f51.google.com [209.85.222.51]) by mx.groups.io with SMTP id smtpd.web10.3445.1637291390610235527 for ; Thu, 18 Nov 2021 19:09:50 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20210112 header.b=jrqJlTvI; spf=pass (domain: gmail.com, ip: 209.85.222.51, mailfrom: pedro.falcato@gmail.com) Received: by mail-ua1-f51.google.com with SMTP id r15so18452484uao.3 for ; Thu, 18 Nov 2021 19:09:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=dJDMJ7ZkO8Kmh4L2CmnmHSeaaQ1HRtLlD/5xohpX1Tg=; b=jrqJlTvIO8gztcVaoGwVHpm0FJYJ1X9UW6+6HFDBA4eiedN3u+BFIH0Jb3RSchnjV1 jp+3WBCVOMeXyRDiH8oMCadwVaLX40lFx37P89AKPK0s5nDSl33GJmf/Hv9/Mqy3+Der /J4xV/pKMZIzZ78tLtvUihoKRsUpvO0xWWW72/kwrBmzlW+C5/aqizRUwJvQppWhFgy1 Rw5sWNW6dugLUMmnt6Bqdva2FSsqsPgDBKb8/jsfgfOcTeBbwmGq3Pib4RrqejNtKm/X mSlWWPE8ekN2NL9hqaVIhn/kF0cFKkucPj3beu8Dhy6yNmXZl86XTwuh2GEu9I5uGsHL YzHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=dJDMJ7ZkO8Kmh4L2CmnmHSeaaQ1HRtLlD/5xohpX1Tg=; b=JMCyCLDT/r0ypgEs1s68sKftXR8hkdDuKvd5XVspn1clyjH2D+W1kmBUB666hyh+Qc qhh05jKg26Kgu79XeGb9oYGT9e960JA08GQWks84zYZqCYxOlZBrKk1lOUPWAW6dV9FE /WFxZPrXEQ+25tHtQFoIk1N98/ENspYf+uTx8mF8SRONG9cgvRWI2ueCrvhLbziliTRY j0XNq+zEpWhYiCf8y3L6/CY6nhefYBy3Ba/bTaeeeKhUOnF/PgG8HXyFzRzrjP/Jb5yr R5DjD0cAfvZC1oTWUgMdGl7j5IGcHcq7Eu57Wae338cAFfvEtDrQ1bFbzlDyJCmbcP/K aCbw== X-Gm-Message-State: AOAM532uwrElJVRg8/CZWNUs0S1OOjGAUW0TgIPi5B5beIz50BR7LeaX FYiDl5SLGA4YxVqA0fd+9hfa6fiHGDhAWREBg9nJtVw+ASU= X-Google-Smtp-Source: ABdhPJwpKIr33/6aw+x8zoRAPaYUsfLhSEah3yN50VCJL8JLve7jlc+lgGqnMNDSXxcsQS6f/jWv6lgSR8MkqEvA2jM= X-Received: by 2002:a05:6102:38d4:: with SMTP id k20mr90052372vst.42.1637291389439; Thu, 18 Nov 2021 19:09:49 -0800 (PST) MIME-Version: 1.0 References: <16B25AD607AC994B.20978@groups.io> <004a01d7dce5$1fcf9bc0$5f6ed340$@byosoft.com.cn> In-Reply-To: <004a01d7dce5$1fcf9bc0$5f6ed340$@byosoft.com.cn> From: "Pedro Falcato" Date: Fri, 19 Nov 2021 03:09:37 +0000 Message-ID: Subject: Re: [edk2-devel] [edk2-platforms PATCH] Ext4Pkg: Add uninitialized extents support To: edk2-devel-groups-io , Liming Gao Content-Type: multipart/alternative; boundary="000000000000a9528605d11b9b50" --000000000000a9528605d11b9b50 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Liming, Thanks for the RB :) I'll be pushing this soon. Ext4Dxe at the moment only supports ext4 due to a lack of need for ext2/3 (since ext4 itself is already decently old), but with a bit of work it can support all the previous ext's. If you have a need for it, feel free to let me know and file a bugzilla, and I'll take a stab at it in the future. Best regards, Pedro On Fri, Nov 19, 2021 at 1:31 AM gaoliming wrote: > Pedro=EF=BC=9A > > I review this patch. This change looks good. Reviewed-by: Liming Gao < > gaoliming@byosoft.com.cn> > > > > Besides, I want to confirm whether Ext4Dxe support Ext2/Ext3/Ext4 file > system or only Ext4 file system. > > > > Thanks > > Liming > > *=E5=8F=91=E4=BB=B6=E4=BA=BA:* devel@edk2.groups.io *=E4=BB=A3=E8=A1=A8 *Pedro Falcato > *=E5=8F=91=E9=80=81=E6=97=B6=E9=97=B4:* 2021=E5=B9=B411=E6=9C=8819=E6=97= =A5 4:31 > *=E6=94=B6=E4=BB=B6=E4=BA=BA:* edk2-devel-groups-io ; Pedro Falcato < > pedro.falcato@gmail.com> > *=E6=8A=84=E9=80=81:* Leif Lindholm ; Michael D Kinney= < > michael.d.kinney@intel.com> > *=E4=B8=BB=E9=A2=98:* Re: [edk2-devel] [edk2-platforms PATCH] Ext4Pkg: Ad= d uninitialized > extents support > > > > It's been over two weeks and a quick Rb would be great, since this patch > is relatively trivial and it would fix a bug. Again, if I'm doing anythin= g > wrong, please let me know. > > > > > > Thanks, > > Pedro > > > > On Mon, Nov 1, 2021 at 9:29 PM Pedro Falcato > wrote: > > Quick PS: I CC'd the edk2-platforms stewards on the patch because there's > no co-maintainer, and from what I gathered, that's what I'm supposed to d= o. > If I'm mistaken, please let me know. > > > > Thanks, > > Pedro > > > > On Fri, Oct 29, 2021 at 2:04 AM Pedro Falcato via groups.io > wrote: > > Uninitialized extents are special extents that have blocks allocated, > but are specified as uninitialized and therefore, reads behave the > same as file holes (reads 0), while writes already have blocks allocated. > > Cc: Leif Lindholm > Cc: Michael D Kinney > Signed-off-by: Pedro Falcato > --- > Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h | 8 ++++++++ > Features/Ext4Pkg/Ext4Dxe/Ext4Dxe.h | 21 +++++++++++++++++++++ > Features/Ext4Pkg/Ext4Dxe/Extents.c | 24 ++++++++++++++++++++++-- > Features/Ext4Pkg/Ext4Dxe/Inode.c | 14 +++++++++++--- > 4 files changed, 62 insertions(+), 5 deletions(-) > > diff --git a/Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h > b/Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h > index 070eb5a9c8..756b1bbe10 100644 > --- a/Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h > +++ b/Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h > @@ -448,6 +448,14 @@ typedef struct { > UINT32 eb_checksum; > } EXT4_EXTENT_TAIL; > > +/** > + * EXT4 has this feature called uninitialized extents: > + * An extent has a maximum of 32768 blocks (2^15 or 1 << 15). > + * When we find an extent with > 32768 blocks, this extent is called > uninitialized. > + * Long story short, it's an extent that behaves as a file hole but has > blocks already allocated. > + */ > +#define EXT4_EXTENT_MAX_INITIALIZED (1 << 15) > + > typedef UINT64 EXT4_BLOCK_NR; > typedef UINT32 EXT4_INO_NR; > > diff --git a/Features/Ext4Pkg/Ext4Dxe/Ext4Dxe.h > b/Features/Ext4Pkg/Ext4Dxe/Ext4Dxe.h > index a9b932ed52..1d9a4ac6ba 100644 > --- a/Features/Ext4Pkg/Ext4Dxe/Ext4Dxe.h > +++ b/Features/Ext4Pkg/Ext4Dxe/Ext4Dxe.h > @@ -1131,4 +1131,25 @@ Ext4SuperblockCheckMagic ( > IN EFI_BLOCK_IO_PROTOCOL *BlockIo > ); > > +/** > + Check if the extent is uninitialized > + > + @param[in] Extent Pointer to the EXT4_EXTENT > + > + @returns True if uninitialized, else false. > +**/ > +#define EXT4_EXTENT_IS_UNINITIALIZED(Extent) ((Extent)->ee_len > > EXT4_EXTENT_MAX_INITIALIZED) > + > +/** > + Retrieves the extent's length, dealing with uninitialized extents in > the process. > + > + @param[in] Extent Pointer to the EXT4_EXTENT > + > + @returns Extent's length, in filesystem blocks. > +**/ > +EXT4_BLOCK_NR > +Ext4GetExtentLength ( > + IN CONST EXT4_EXTENT *Extent > + ); > + > #endif > diff --git a/Features/Ext4Pkg/Ext4Dxe/Extents.c > b/Features/Ext4Pkg/Ext4Dxe/Extents.c > index 5fa2fe098d..1ae175f417 100644 > --- a/Features/Ext4Pkg/Ext4Dxe/Extents.c > +++ b/Features/Ext4Pkg/Ext4Dxe/Extents.c > @@ -332,7 +332,7 @@ Ext4GetExtent ( > return EFI_NO_MAPPING; > } > > - if (!(LogicalBlock >=3D Ext->ee_block && Ext->ee_block + Ext->ee_len > > LogicalBlock)) { > + if (!(LogicalBlock >=3D Ext->ee_block && Ext->ee_block + > Ext4GetExtentLength (Ext) > LogicalBlock)) { > // This extent does not cover the block > if (Buffer !=3D NULL) { > FreePool (Buffer); > @@ -413,7 +413,7 @@ Ext4ExtentsMapKeyCompare ( > Extent =3D UserStruct; > Block =3D (UINT32)(UINTN)StandaloneKey; > > - if (Block >=3D Extent->ee_block && Block < Extent->ee_block + > Extent->ee_len) { > + if (Block >=3D Extent->ee_block && Block < Extent->ee_block + > Ext4GetExtentLength (Extent)) { > return 0; > } > > @@ -593,3 +593,23 @@ Ext4CheckExtentChecksum ( > > return Tail->eb_checksum =3D=3D Ext4CalculateExtentChecksum (ExtHeader= , > File); > } > + > +/** > + Retrieves the extent's length, dealing with uninitialized extents in > the process. > + > + @param[in] Extent Pointer to the EXT4_EXTENT > + > + @returns Extent's length, in filesystem blocks. > +**/ > +EXT4_BLOCK_NR > +Ext4GetExtentLength ( > + IN CONST EXT4_EXTENT *Extent > + ) > +{ > + // If it's an unintialized extent, the true length is ee_len - 2^15 > + if (EXT4_EXTENT_IS_UNINITIALIZED (Extent)) { > + return Extent->ee_len - EXT4_EXTENT_MAX_INITIALIZED; > + } > + > + return Extent->ee_len; > +} > diff --git a/Features/Ext4Pkg/Ext4Dxe/Inode.c > b/Features/Ext4Pkg/Ext4Dxe/Inode.c > index 63cecec1f7..48bfe026a3 100644 > --- a/Features/Ext4Pkg/Ext4Dxe/Inode.c > +++ b/Features/Ext4Pkg/Ext4Dxe/Inode.c > @@ -144,11 +144,19 @@ Ext4Read ( > > HasBackingExtent =3D Status !=3D EFI_NO_MAPPING; > > - if (!HasBackingExtent) { > + if (!HasBackingExtent || EXT4_EXTENT_IS_UNINITIALIZED (&Extent)) { > + > HoleOff =3D BlockOff; > - HoleLen =3D Partition->BlockSize - HoleOff; > + > + if (!HasBackingExtent) { > + HoleLen =3D Partition->BlockSize - HoleOff; > + } else { > + // Uninitialized extents behave exactly the same as file holes. > + HoleLen =3D Ext4GetExtentLength (&Extent) - HoleOff; > + } > + > WasRead =3D HoleLen > RemainingRead ? RemainingRead : HoleLen; > - // Potential improvement: In the future, we could get the hole's > tota > + // Potential improvement: In the future, we could get the file > hole's total > // size and memset all that > SetMem (Buffer, WasRead, 0); > } else { > -- > 2.33.1.windows.1 > > > > ------------ > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#82879): https://edk2.groups.io/g/devel/message/82879 > Mute This Topic: https://groups.io/mt/86667035/5946980 > Group Owner: devel+owner@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [pedro.falcato@gmail.co= m > ] > ------------ > > > > > -- > > Pedro Falcato > > > > -- > > Pedro Falcato > >=20 > > --=20 Pedro Falcato --000000000000a9528605d11b9b50 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Liming,

Thanks for the RB= :) I'll be pushing this soon.

Ext4Dxe at = the moment only supports ext4 due to a lack of need for ext2/3 (since ext4 = itself is already decently old), but with a bit of work it can support all = the previous ext's. If you have a need for it, feel free to let me know= and file a bugzilla, and I'll take a stab at it in the future.

Best regards,
Pedro

On Fri, Nov 19, 20= 21 at 1:31 AM gaoliming <gaoliming@byosoft.com.cn> wrote:

Pedro=EF=BC=9A=

=C2=A0I review this pa= tch. This change looks good. Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>= ;

=C2=A0

=C2=A0Besides, I want to confirm wheth= er Ext4Dxe support Ext2/Ext3/Ext4 file system or only Ext4 file system.<= /u>

=C2=A0=

Thanks

Liming

=E5=8F=91=E4=BB=B6=E4=BA=BA:<= /b> devel@edk2.= groups.io <devel@edk2.groups.io> =E4=BB=A3=E8=A1=A8 Pedro Falcato= =E5=8F=91=E9=80=81=E6=97=B6=E9=97=B4: 2021=E5=B9=B411=E6=9C=8819=E6=97=A5 4:31
=E6=94=B6=E4=BB=B6=E4= =BA=BA: edk2-devel-gro= ups-io <devel@= edk2.groups.io>; Pedro Falcato <pedro.falcato@gmail.com>
= =E6=8A=84=E9=80=81: Le= if Lindholm <leif= @nuviainc.com>; Michael D Kinney <michael.d.kinney@intel.com>
=E4=B8=BB=E9=A2=98: Re: [edk2-devel] [edk2-platforms PATCH] Ext4Pkg: Add uninitialized exte= nts support

=C2=A0

It's been over two weeks and a quic= k Rb would be great, since this patch is relatively trivial and it would fi= x a bug. Again, if I'm doing anything wrong, please let me know.=

=C2=A0

=C2=A0

Thanks,

Pedro

=C2=A0<= /p>

On Mon, Nov 1, 202= 1 at 9:29 PM Pedro Falcato <pedro.falcato@gmail.com> wrote:

Quick PS: I CC'= ;d the edk2-platforms stewards on the patch because there's no co-maint= ainer, and from what I gathered, that's what I'm supposed to do. If= I'm mistaken, please let me know.

=C2=A0

<= div>

Thanks,

Pedro=

<= /u>=C2=A0

On Fri, Oct 29, 2021 at 2:04 AM Pedro Falcato via groups.io <pedro.falcato=3Dgmail.com@groups.io> wro= te:

Uninitialized extents are special extents that= have blocks allocated,
but are specified as uninitialized and therefore= , reads behave the
same as file holes (reads 0), while writes already ha= ve blocks allocated.

Cc: Leif Lindholm <leif@nuviainc.com>
Cc: Michael D Ki= nney <mi= chael.d.kinney@intel.com>
Signed-off-by: Pedro Falcato <pedro.falcato@gmail.= com>
---
=C2=A0Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h |=C2=A0 8 += +++++++
=C2=A0Features/Ext4Pkg/Ext4Dxe/Ext4Dxe.h=C2=A0 | 21 ++++++++++++= +++++++++
=C2=A0Features/Ext4Pkg/Ext4Dxe/Extents.c=C2=A0 | 24 ++++++++++= ++++++++++++--
=C2=A0Features/Ext4Pkg/Ext4Dxe/Inode.c=C2=A0 =C2=A0 | 14 = +++++++++++---
=C2=A04 files changed, 62 insertions(+), 5 deletions(-)
diff --git a/Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h b/Features/Ext4Pkg/E= xt4Dxe/Ext4Disk.h
index 070eb5a9c8..756b1bbe10 100644
--- a/Features/= Ext4Pkg/Ext4Dxe/Ext4Disk.h
+++ b/Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h
= @@ -448,6 +448,14 @@ typedef struct {
=C2=A0 =C2=A0UINT32=C2=A0 =C2=A0 e= b_checksum;
=C2=A0} EXT4_EXTENT_TAIL;

+/**
+ * EXT4 has this f= eature called uninitialized extents:
+ * An extent has a maximum of 3276= 8 blocks (2^15 or 1 << 15).
+ * When we find an extent with > 3= 2768 blocks, this extent is called uninitialized.
+ * Long story short, = it's an extent that behaves as a file hole but has blocks already alloc= ated.
+ */
+#define EXT4_EXTENT_MAX_INITIALIZED=C2=A0 (1 << 15)=
+
=C2=A0typedef UINT64=C2=A0 EXT4_BLOCK_NR;
=C2=A0typedef UINT32= =C2=A0 EXT4_INO_NR;

diff --git a/Features/Ext4Pkg/Ext4Dxe/Ext4Dxe.h = b/Features/Ext4Pkg/Ext4Dxe/Ext4Dxe.h
index a9b932ed52..1d9a4ac6ba 100644=
--- a/Features/Ext4Pkg/Ext4Dxe/Ext4Dxe.h
+++ b/Features/Ext4Pkg/Ext4= Dxe/Ext4Dxe.h
@@ -1131,4 +1131,25 @@ Ext4SuperblockCheckMagic (
=C2= =A0 =C2=A0IN EFI_BLOCK_IO_PROTOCOL=C2=A0 *BlockIo
=C2=A0 =C2=A0);
+/**
+=C2=A0 =C2=A0Check if the extent is uninitialized
+
+=C2=A0= =C2=A0@param[in] Extent=C2=A0 =C2=A0 Pointer to the EXT4_EXTENT
+
+= =C2=A0 =C2=A0@returns True if uninitialized, else false.
+**/
+#defin= e EXT4_EXTENT_IS_UNINITIALIZED(Extent) ((Extent)->ee_len > EXT4_EXTEN= T_MAX_INITIALIZED)
+
+/**
+=C2=A0 =C2=A0Retrieves the extent's= length, dealing with uninitialized extents in the process.
+
+=C2=A0= =C2=A0@param[in] Extent=C2=A0 =C2=A0 =C2=A0 Pointer to the EXT4_EXTENT
= +
+=C2=A0 =C2=A0@returns Extent's length, in filesystem blocks.
+= **/
+EXT4_BLOCK_NR
+Ext4GetExtentLength (
+=C2=A0 IN CONST EXT4_EX= TENT=C2=A0 *Extent
+=C2=A0 );
+
=C2=A0#endif
diff --git a/Featu= res/Ext4Pkg/Ext4Dxe/Extents.c b/Features/Ext4Pkg/Ext4Dxe/Extents.c
index= 5fa2fe098d..1ae175f417 100644
--- a/Features/Ext4Pkg/Ext4Dxe/Extents.c<= br>+++ b/Features/Ext4Pkg/Ext4Dxe/Extents.c
@@ -332,7 +332,7 @@ Ext4GetE= xtent (
=C2=A0 =C2=A0 =C2=A0return EFI_NO_MAPPING;
=C2=A0 =C2=A0}
=
-=C2=A0 if (!(LogicalBlock >=3D Ext->ee_block && Ext->= ee_block + Ext->ee_len > LogicalBlock)) {
+=C2=A0 if (!(LogicalBlo= ck >=3D Ext->ee_block && Ext->ee_block + Ext4GetExtentLeng= th (Ext) > LogicalBlock)) {
=C2=A0 =C2=A0 =C2=A0// This extent does n= ot cover the block
=C2=A0 =C2=A0 =C2=A0if (Buffer !=3D NULL) {
=C2=A0= =C2=A0 =C2=A0 =C2=A0FreePool (Buffer);
@@ -413,7 +413,7 @@ Ext4ExtentsM= apKeyCompare (
=C2=A0 =C2=A0Extent =3D UserStruct;
=C2=A0 =C2=A0Block= =C2=A0 =3D (UINT32)(UINTN)StandaloneKey;

-=C2=A0 if (Block >=3D E= xtent->ee_block && Block < Extent->ee_block + Extent->e= e_len) {
+=C2=A0 if (Block >=3D Extent->ee_block && Block = < Extent->ee_block + Ext4GetExtentLength (Extent)) {
=C2=A0 =C2=A0= =C2=A0return 0;
=C2=A0 =C2=A0}

@@ -593,3 +593,23 @@ Ext4CheckExt= entChecksum (

=C2=A0 =C2=A0return Tail->eb_checksum =3D=3D Ext4Ca= lculateExtentChecksum (ExtHeader, File);
=C2=A0}
+
+/**
+=C2=A0= =C2=A0Retrieves the extent's length, dealing with uninitialized extent= s in the process.
+
+=C2=A0 =C2=A0@param[in] Extent=C2=A0 =C2=A0 =C2= =A0 Pointer to the EXT4_EXTENT
+
+=C2=A0 =C2=A0@returns Extent's = length, in filesystem blocks.
+**/
+EXT4_BLOCK_NR
+Ext4GetExtentLe= ngth (
+=C2=A0 IN CONST EXT4_EXTENT=C2=A0 *Extent
+=C2=A0 )
+{
= +=C2=A0 // If it's an unintialized extent, the true length is ee_len - = 2^15
+=C2=A0 if (EXT4_EXTENT_IS_UNINITIALIZED (Extent)) {
+=C2=A0 =C2= =A0 return Extent->ee_len - EXT4_EXTENT_MAX_INITIALIZED;
+=C2=A0 }+
+=C2=A0 return Extent->ee_len;
+}
diff --git a/Features/Ext4= Pkg/Ext4Dxe/Inode.c b/Features/Ext4Pkg/Ext4Dxe/Inode.c
index 63cecec1f7.= .48bfe026a3 100644
--- a/Features/Ext4Pkg/Ext4Dxe/Inode.c
+++ b/Featu= res/Ext4Pkg/Ext4Dxe/Inode.c
@@ -144,11 +144,19 @@ Ext4Read (

=C2= =A0 =C2=A0 =C2=A0HasBackingExtent =3D Status !=3D EFI_NO_MAPPING;

-= =C2=A0 =C2=A0 if (!HasBackingExtent) {
+=C2=A0 =C2=A0 if (!HasBackingExt= ent || EXT4_EXTENT_IS_UNINITIALIZED (&Extent)) {
+
=C2=A0 =C2=A0 = =C2=A0 =C2=A0HoleOff =3D BlockOff;
-=C2=A0 =C2=A0 =C2=A0 HoleLen =3D Par= tition->BlockSize - HoleOff;
+
+=C2=A0 =C2=A0 =C2=A0 if (!HasBacki= ngExtent) {
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 HoleLen =3D Partition->Block= Size - HoleOff;
+=C2=A0 =C2=A0 =C2=A0 } else {
+=C2=A0 =C2=A0 =C2=A0 = =C2=A0 // Uninitialized extents behave exactly the same as file holes.
+= =C2=A0 =C2=A0 =C2=A0 =C2=A0 HoleLen =3D Ext4GetExtentLength (&Extent) -= HoleOff;
+=C2=A0 =C2=A0 =C2=A0 }
+
=C2=A0 =C2=A0 =C2=A0 =C2=A0Was= Read =3D HoleLen > RemainingRead ? RemainingRead : HoleLen;
-=C2=A0 = =C2=A0 =C2=A0 // Potential improvement: In the future, we could get the hol= e's tota
+=C2=A0 =C2=A0 =C2=A0 // Potential improvement: In the futu= re, we could get the file hole's total
=C2=A0 =C2=A0 =C2=A0 =C2=A0//= size and memset all that
=C2=A0 =C2=A0 =C2=A0 =C2=A0SetMem (Buffer, Was= Read, 0);
=C2=A0 =C2=A0 =C2=A0} else {
--
2.33.1.windows.1


------------
Groups.io Links: You receive all messages sent to = this group.
View/Reply Online (#82879): https://edk2.groups.io/g/devel/m= essage/82879
Mute This Topic: https://groups.io/mt/86667035/5946980
= Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/u= nsub [pedr= o.falcato@gmail.com]
------------


=C2=A0

--

Pedro Falcato


<= br>--

Pedro Falcato

=20



--
Pedro Falcato
--000000000000a9528605d11b9b50--