From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from AUS01-ME3-obe.outbound.protection.outlook.com (AUS01-ME3-obe.outbound.protection.outlook.com [40.92.63.186]) by mx.groups.io with SMTP id smtpd.web11.11707.1635341867281265715 for ; Wed, 27 Oct 2021 06:37:47 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@outlook.com header.s=selector1 header.b=jKmV+6w2; spf=pass (domain: outlook.com, ip: 40.92.63.186, mailfrom: atmgnd@outlook.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ku1mNhKwwzbgnAIlvvhz8ziZk4iQIAmisivGKnFNin5aVml2T993+JQJuDZ65whB9k/DG24LbSZCAbWN5CES4G+UglbRsohte6Q959s9XmEDTGELIQ29kXePOpFt2lHd11m/Kwf0nxAgqG/3WnJBSOpocBIDBoSbJJJ3agx+9V03iw9bIA/Cx4e/TXCzSd9AZiZOHPXjZnyyejKDI5Wez+HAehavwu9EPDjojFspKIreGTkml7blwqXwiVHsZ1BsbhDfDZxs0n0Cw1FvOpoSBeEDp0yuz887sPQj3Gfk48JPB/xu/gThg+ZDu4BH0rLZgUu8YDSTKVmE+3W3U+MmIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=mmMQApM2iA6HK9u7uJKJ9A0gTPgnssbhT6MggeQQl6Q=; b=aQc99rlzL6Hm0ZeGam1kbxq1NaBedhENBy+TKYSNWtYttFMpuhgnPoV4afteXMzKuvce9OgZFet8pbbQ9tkdS+CIlm4Rg2Hiw3t9t70owulcP8cStmc8DdzEyS9QWBzrxDEnCSGGOlLvEKo3gecHePu6zSgvsPjBeu0FNqTpFz/jI3rIPLIjEPd/ZdvPfXLrUeLFQheOCyLbOUivwgnFtZTBJc+d0wRE4q5aIN6JjpoVMGfdAniFdzEDQJZbHytWny02F+hQBLWq/INJYSy2mmloNs2bNcbIoadftjGh9ToIDyadrereA6zthcjQn4J7xFMIBY7SlKmAEHrIGL1RpA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mmMQApM2iA6HK9u7uJKJ9A0gTPgnssbhT6MggeQQl6Q=; b=jKmV+6w2exom2FVN/NG5vkhXttjRLN7bEyLNzpcGmccliSP4ZqnKycL2CeVqdBBfQclhL2fkITNLEN3LfvMfzv7A+/ohqr0jdLw8cpEZKRptzFMHCbKRsa1a4Gl8XaR2lEOFGBF/kapZ2qO905rbfZ1+VrrAO7t0d4bmOkXQ7mn3yj9QS8TEXpbuN7wT89+CIUQXoKb/MQdJplx5MsIA60scEVv+FKkxsoDPyZkiN3DprY7IIbHsOsI8a0LhXs3B/zAMpL0L55DXkITBIXo7Rti6u7ofMZse1oFU7yZmc+LkBQxZRukcqygXUbsxc5Kab2MYaHNfKvPwcqY/hLvddQ== Received: from SYZP282MB3252.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:169::6) by SYBP282MB3009.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:13e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4649.14; Wed, 27 Oct 2021 13:37:43 +0000 Received: from SYZP282MB3252.AUSP282.PROD.OUTLOOK.COM ([fe80::755a:3211:db9a:8cc8]) by SYZP282MB3252.AUSP282.PROD.OUTLOOK.COM ([fe80::755a:3211:db9a:8cc8%4]) with mapi id 15.20.4628.020; Wed, 27 Oct 2021 13:37:43 +0000 From: atmgnd@outlook.com To: "devel@edk2.groups.io" CC: "pedro.falcato@gmail.com" Subject: [PATCH][Ext4Pkg] unwritten extent suuport Thread-Topic: [PATCH][Ext4Pkg] unwritten extent suuport Thread-Index: AQHXyzcMbiIWfYFzgEiW74tSJAK0Bg== Date: Wed, 27 Oct 2021 13:37:43 +0000 Message-ID: Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: suggested_attachment_session_id: a8dc7321-c969-8f6e-8822-6effd0e9a7c5 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [Knvv8lKiz2BgdjXo7FNb//FLpJjPa+13] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d2c8eb7a-2f7a-4d4b-735d-08d9994ef46a x-ms-traffictypediagnostic: SYBP282MB3009: x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: WchGmnJ9a7+vGIwMSWPEABWxBdP+LJO6rWhl0CgoPU5TBKTwblTccnSpTuVe9guW39E92qpOIKRiKFSA3wE3NaH2/sr5oIEXPZoF30m71H7L2Eh+XSmdf7/LIz+Ad42fcnqS4GFc62TT7whheV3Ttrb7uWeC4q0JSYTGlpNJSaKPgszRYToqEaeiuL9bw6XJpcz8sMcXUiKWEq7qkWd44kEJPMAClLvGUkAQYXKewAUoJLp6AAgwNa/JPO1pO90in0jC3ySAPfa/FW50yWngNSZHi+qigJp/Xzk/TO0J8QqLgRQfpjuMFomZiAwaeCKbP7Ba9fZhTFEJwtOpokKpFf4h0mpCuJsanzeHlqzA+0Eqm17axowA6HlIjsUIjCP0yZs+ZZUcr0cSik0XjlZ4t9eR4wDeUu5S/y0mlaQxi/1BmVUFz7kuHw0OQD6ubSmtGdxJUN3VZG6AvX0cZBVBdmMJEPsNcUATgDnVz/ajeLmPgIi9HiAxSoeNu5m6GRQhM2PEiDQcUnkUGSGc6DmLz4XFl/yxxs4lmxg8ATLnVsVdciqa/UILm3sd144rC6IGqWyKbKtseRDob6CGBWnhsA== x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: RPMcXYX8G9SVRmtoebP5U03fSMR3RNT9adw49/XO4YCnoTNP+zI6TOGzotLjZcoQqRRVpdD4GJJeJjI7ysO7R4QIX7ifO2otsyLFW47We4IvD5J7Jipd/bGAJTyP/lCvgtiKkF9HPrEo7RwMl8K+ov9vlH3fLNkH007FwV5ClGxnVAhfWzQdpKvVsiy/+fRUoof5UoBsi/6ftDVLITX6LEJnLNwYsjeDWLSzvG7E21kfeevvD3muoeVPyU5rsPKG8j5On415Zm8U2wkUKbO/RCDExKFFz+hqnw8USqD2XXYYYDYMyXbQ9kX1SQMUzBnclshXVmDTn25kz5Zzio1/cjdlW/IuVR7KbcBrJif4NuOIht09QTr/KdoRCNV/rrzElnEKJLTegjtVF3hQsQkqcJb1fIUGzYx0jkjaf7qmdzHI3nQByaY9u0Cob5eu7f5Si6eSv4+cSiliceL3w71shjMmsxTkQmMqscYLdrXuhZw03UMTbN7yqhANbxViDY3Kip9nbkaPHI9RwYxObTW9UIs80VyHSNWayRmKZP6bobwMVdIFImkzB1llClyeQOukK50eu4b+xy8O4n8nhgH0bpkTL5VWREM6J/NzAV18VYri57j0ZpM5yEIRe+x5QqWdWVG58pE9Mlb1CJrbMmbJTImdqPoybtu1hvWQbzZ5yILWAZZYbNr5algnpDm4cvJ4hSPDzOIm8x9ktk2U0CPEXA== MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SYZP282MB3252.AUSP282.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: d2c8eb7a-2f7a-4d4b-735d-08d9994ef46a X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Oct 2021 13:37:43.5875 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SYBP282MB3009 Content-Language: en-US Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable From: "Qi Zhou" =0A= Subject: [PATCH] unwritten extent suuport=0A= =0A= the real lenght of uninitialized/unwritten extent should be (ee_len - (1UL = << 15)), and=0A= all related block should been read as zeros. see:=0A= https://github.com/torvalds/linux/blob/d25f27432f80a800a3592db128254c8140bd= 71bf/fs/ext4/ext4_extents.h#L156=0A= =0A= Signed-off-by: Qi Zhou =0A= ---=0A= Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h | 5 +++++=0A= Features/Ext4Pkg/Ext4Dxe/Extents.c | 4 ++--=0A= Features/Ext4Pkg/Ext4Dxe/Inode.c | 5 +++++=0A= 3 files changed, 12 insertions(+), 2 deletions(-)=0A= =0A= diff --git a/Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h b/Features/Ext4Pkg/Ext4Dxe= /Ext4Disk.h=0A= index 070eb5a..7ca8eee 100644=0A= --- a/Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h=0A= +++ b/Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h=0A= @@ -402,6 +402,11 @@ typedef struct {=0A= =0A= #define EXT4_MIN_DIR_ENTRY_LEN 8=0A= =0A= +#define EXTENT_INIT_MAX_LEN (1UL << 15)=0A= +=0A= +#define EXTENT_REAL_LEN(x) ((UINT16)(x <=3D EXTENT_INIT_MAX_LEN ? x : (x -= EXTENT_INIT_MAX_LEN)))=0A= +#define EXTENT_IS_UNWRITTEN(x) (x > EXTENT_INIT_MAX_LEN)=0A= +=0A= // This on-disk structure is present at the bottom of the extent tree=0A= typedef struct {=0A= // First logical block=0A= diff --git a/Features/Ext4Pkg/Ext4Dxe/Extents.c b/Features/Ext4Pkg/Ext4Dxe/= Extents.c=0A= index 5fa2fe0..21af573 100644=0A= --- a/Features/Ext4Pkg/Ext4Dxe/Extents.c=0A= +++ b/Features/Ext4Pkg/Ext4Dxe/Extents.c=0A= @@ -332,7 +332,7 @@ Ext4GetExtent (=0A= return EFI_NO_MAPPING;=0A= }=0A= =0A= - if (!(LogicalBlock >=3D Ext->ee_block && Ext->ee_block + Ext->ee_len > L= ogicalBlock)) {=0A= + if (!(LogicalBlock >=3D Ext->ee_block && Ext->ee_block + EXTENT_REAL_LEN= (Ext->ee_len) > LogicalBlock)) {=0A= // This extent does not cover the block=0A= if (Buffer !=3D NULL) {=0A= FreePool (Buffer);=0A= @@ -413,7 +413,7 @@ Ext4ExtentsMapKeyCompare (=0A= Extent =3D UserStruct;=0A= Block =3D (UINT32)(UINTN)StandaloneKey;=0A= =0A= - if (Block >=3D Extent->ee_block && Block < Extent->ee_block + Extent->ee= _len) {=0A= + if (Block >=3D Extent->ee_block && Block < Extent->ee_block + EXTENT_REA= L_LEN(Extent->ee_len)) {=0A= return 0;=0A= }=0A= =0A= diff --git a/Features/Ext4Pkg/Ext4Dxe/Inode.c b/Features/Ext4Pkg/Ext4Dxe/In= ode.c=0A= index 63cecec..d691ec7 100644=0A= --- a/Features/Ext4Pkg/Ext4Dxe/Inode.c=0A= +++ b/Features/Ext4Pkg/Ext4Dxe/Inode.c=0A= @@ -151,6 +151,11 @@ Ext4Read (=0A= // Potential improvement: In the future, we could get the hole's tot= a=0A= // size and memset all that=0A= SetMem (Buffer, WasRead, 0);=0A= + } else if(EXTENT_IS_UNWRITTEN(Extent.ee_len)) {=0A= + HoleOff =3D CurrentSeek - (UINT64)Extent.ee_block * Partition->Block= Size;=0A= + HoleLen =3D EXTENT_REAL_LEN(Extent.ee_len) * Partition->BlockSize - = HoleOff;=0A= + WasRead =3D HoleLen > RemainingRead ? RemainingRead : HoleLen;=0A= + SetMem (Buffer, WasRead, 0);=0A= } else {=0A= ExtentStartBytes =3D MultU64x32 (=0A= LShiftU64 (Extent.ee_start_hi, 32) |=0A= -- =0A= 2.17.1=0A= =0A=