From patchwork Mon Sep 25 05:29:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yuezhang.Mo@sony.com" X-Patchwork-Id: 13397270 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4159CCE7A81 for ; Mon, 25 Sep 2023 06:09:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229568AbjIYGJq (ORCPT ); Mon, 25 Sep 2023 02:09:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39300 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229511AbjIYGJp (ORCPT ); Mon, 25 Sep 2023 02:09:45 -0400 Received: from mx07-001d1705.pphosted.com (mx07-001d1705.pphosted.com [185.132.183.11]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 410A9C6 for ; Sun, 24 Sep 2023 23:09:39 -0700 (PDT) Received: from pps.filterd (m0209324.ppops.net [127.0.0.1]) by mx08-001d1705.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 38P4Aqww031121; Mon, 25 Sep 2023 05:29:57 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sony.com; h=from : to : cc : subject : date : message-id : mime-version : content-type : content-transfer-encoding; s=S1; bh=BU3AhuHw8m2VM06hpVFYbLasQYj1qqyB4L0hNgyJyXI=; b=Pf9Vv+EwmjxKdcU6GtMFn4cjh6LOCfcLL6+VU2RujH9E/+7ePy0HEdHisYSDBYrf3P9u H8/RojHaCSQmgQpsK2b8oh3sXwGZgCulwvmzG0ZzVqZlsvILzMaFdQzoBiudM0h/vTjt 5Ed5Ybw0pxVcKvMDo6Hd/62c2q9P9qBfuzjvndMaFSbNhQ3vhCYrCKkNf0bq9T/ZSDAP 3Tn7T56f5psiM7dbKgzt1G1JLjBDkb/5t4puMCg8zVQ7o698BWcMtMPl4AhD6GyYgAq3 zh/fUvoGJMZDx0aE+yg1+zFVTqw6IJ2+2AJOjnU86SMN5OCdR908wzFFILoHYR1JVmbV qw== Received: from apc01-psa-obe.outbound.protection.outlook.com (mail-psaapc01lp2045.outbound.protection.outlook.com [104.47.26.45]) by mx08-001d1705.pphosted.com (PPS) with ESMTPS id 3t9n669hcr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 25 Sep 2023 05:29:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Q2t9BuKReXdN8d+fV4AyD7EcvHpdDbBerODJLGE/2ng+5kdZFXt5YiNfwWF2Ay/9Vx/QKiaVf7fH/H8U/k2ujfvyOof61s0FPw+6gwg29AGIlmG9IMjWw1yhOBiio8vuuoxWCNgz1WN8SZN8VNuUhQkKLvmyzovI/bIbHWaeX1C9Ltxg8nxuRlVEjBnZEUApXVzxpMeDtYjtmDBwXQk0wmnsJ81mwqMIe2WzpKjWzj6azKvM/LbsUL/RsZrCVNpYhril6RH+91lpE14WXeBc+8MYLVqKRoxwVCauJKV6UchfU3+FhZd+mPTORG2HcQ1j3dhhxOE/dhjWxvUi0Z+/iQ== 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=BU3AhuHw8m2VM06hpVFYbLasQYj1qqyB4L0hNgyJyXI=; b=JM7l1DmaPuTaQyF58VexzrLQYvNCdRhdW2fwIKa7+g6MFxBQq2iHatbzRxRDpculfzXI1rXC8ipFsrNKGV9ooVXM269AC5daowrOzm7xEcL7OOyUHYl60CYqeFyHVZY2T6bL5de2SAS6jhQkwRJdE87hefVg4LXcyjX9sdc7Ua42jJoPy3gRfItNmbPE6PY/ZoIMPzK1QVs3jOm5DZoALHYr7MDwcGKsU5TV0WodToTg1HgGHn2267/1c5uZ8ffmUpa5qMA3VofsHkU7jKkaZeWvuvCk4S7JU9RcJcuq/VSgT4uagdBcqHJ7Pc4tp/8AWqKo6Z09Ff/SeF3TVVuaJA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=sony.com; dmarc=pass action=none header.from=sony.com; dkim=pass header.d=sony.com; arc=none Received: from PUZPR04MB6316.apcprd04.prod.outlook.com (2603:1096:301:fc::7) by TYSPR04MB7081.apcprd04.prod.outlook.com (2603:1096:400:47d::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.28; Mon, 25 Sep 2023 05:29:51 +0000 Received: from PUZPR04MB6316.apcprd04.prod.outlook.com ([fe80::f9d4:e3c8:e9c0:1ad]) by PUZPR04MB6316.apcprd04.prod.outlook.com ([fe80::f9d4:e3c8:e9c0:1ad%6]) with mapi id 15.20.6813.027; Mon, 25 Sep 2023 05:29:51 +0000 From: "Yuezhang.Mo@sony.com" To: "linkinjeon@kernel.org" , "sj1557.seo@samsung.com" CC: "linux-fsdevel@vger.kernel.org" , "Andy.Wu@sony.com" , "Wataru.Aoyama@sony.com" Subject: [PATCH v3 2/2] exfat: do not zeroed the extended part Thread-Topic: [PATCH v3 2/2] exfat: do not zeroed the extended part Thread-Index: AdnvcNO4U5DLWxY2QtuDuNbPCCrffQ== Date: Mon, 25 Sep 2023 05:29:51 +0000 Message-ID: Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PUZPR04MB6316:EE_|TYSPR04MB7081:EE_ x-ms-office365-filtering-correlation-id: c0f3caa9-2c8c-4e6a-1ea8-08dbbd887134 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: GWBErNzrHeraK48ol12iDJbanv5/9UHFSMKnXHPHvQsAv3qEe/1vQxY6d6wL1pHFpkZ+VapSXfl7DI4HsWK2uD9vNyXF7C4ev5Tgli9DyUSog4NDRo8TAJ4edlRmLlczh0VHSbqUnhHGTVRdDQENiAdxQ9zG/L4NxDhc0GtL+8tFQ7xG3mhuPdrQcKqHxxs7drC7Ra3IwY8J0jhYF0QSYhczcH0QzifExswpoC9zRPfipqLaZ/5MbY6N97tfaolH/Nvg+/uqQ94Rbm6N6Sy/nGVrpxwePS+l6ftXHQbYcKjfb6DzH7FlV0R6JkC0s3fe+IoU4nr3u0FUF0IETi0iwHOZKCsiqVscAqmktrlhAdiQQL+vsOy8ULYsWG/jQZJbGfryn0M4GBS5ArVVrU0DNqJYgeGuQCrYN8SuZyuQny8Gn4B1lqeO7vb8HUQUYvWmb3QgclDUR0ofxKIyLYVCJGimKuS1Qw2IDi1v0Jw7EpXAwNzHpR6xUJEGNU5biBPsjP67Brg5lR52Z25RKDmhVRuyWmcAZPNMPTa4jFvY0afoofMg/CGDS7hnWcHYNogkrq5gaINOuDFa2NOaYvcOa0OWVyTEyU2loEGKUMvwFciIM9gfRyegInnoJRlNKKWB x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR04MB6316.apcprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(396003)(136003)(366004)(346002)(376002)(230922051799003)(186009)(451199024)(1800799009)(8936002)(4326008)(5660300002)(8676002)(2906002)(52536014)(316002)(41300700001)(66446008)(64756008)(66556008)(55016003)(66476007)(54906003)(110136005)(66946007)(76116006)(26005)(107886003)(33656002)(9686003)(71200400001)(38100700002)(82960400001)(122000001)(38070700005)(86362001)(478600001)(83380400001)(6506007)(7696005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?9EYqzZOwfOMXHYeiaLkuZy/tZMXd?= =?utf-8?q?Rhz306x+FDXzpCuOjbLIknALNvGAJ2oFmutOLtrJMhOh0A2rmCK3cSsTbXEZybbMr?= =?utf-8?q?KJ1kbzJwaAC1JpMmFtx3ds9kokipZnmLe3l68GwPmZ2z6iwsx/jEGBaSf0x1VUMaQ?= =?utf-8?q?w3viBpDll5aDZPtf/eHKIc0DohQ1d+LYgs0YHz45aVIZyHFIOgqTOPL71WpAEnyZp?= =?utf-8?q?byKzRzBBqEa/OqBwko/xP2EvgqekIvz842nF9cym6zziGCwtH5g8qgbm0FuIQs2nP?= =?utf-8?q?L5oPyiF0lxC0mTCaEMm1y+8/esEheJ9T0pYBIYbNaCDjdJx6na4mqOUJfojL3tf7h?= =?utf-8?q?ydU+Tz2asIpQVMHSqI2+OOo3pXWBg7MTC4EvhpLDBBEc9kVm3ZzG4A7Y2tJ1P/yZa?= =?utf-8?q?RxOvo5hM3tYrcKOCSghklwx8IicJ1oaGosb6w3APIexhtovuMVuvoLbET95fq9tbQ?= =?utf-8?q?2d6pjSUqd+v1Cq92mkyRVV+8T8o3P9WpUhR4+7wk/UEXZwGauXBrZNWOaw/8LjC2H?= =?utf-8?q?I+N7XWfRXCdGVkT13coTipCTuOYBm6e2hb5YvfL79RwHByuhfdn1BhTES55oGFkGA?= =?utf-8?q?Gy8AQ8CyhT4Ebpz+pNJoxYHKXJAyJMnjWHhUwd5TFJvDTO4xOs08JAlegXKDZmqx6?= =?utf-8?q?A3FbZpyM0O60TzI+va9H+U2Yvegj1r4VEP+C79sk64j5l8HiawrlFrx0pa2uVFVCw?= =?utf-8?q?fVmMnq6M2xnAh70yJ+Qp/bTn0AM3wufYp8tfpajsPDs6WWf42/V/qvNHIJQjBMas9?= =?utf-8?q?6EoJLhAYKbiR43CIQ1yBCrWJRU6IUoHY6F6057ThriaGh4yzf6lnt3OvSM4ykjY4l?= =?utf-8?q?okhKjX6Iq/ajgpPCymg6S2tJpoLDP6FEmXnUeAu3XiyHlqq4IjBFHF/T1uyu6lxAe?= =?utf-8?q?sV8iFAGTFRYhDTVobfVomGOjJy3wKU4AAmFshO9lhGh+jdPw/DnZ7vXQ7ravz+7vG?= =?utf-8?q?7+Mvf8dHUa1QIv+B42HVO+li/DOo6JiGHj1rL+HBrj8ffP3gAFObQ9ljVYPdtW0Hs?= =?utf-8?q?P03736TessIFEMPff+FcRRoM6Dslqb1JLyUTLna37MF+AfQXEGyPywrC7RRv+U4EV?= =?utf-8?q?BRdNxotoiubuJBREBmWgu4yQZvYJknxwkr7GC+HmUvGLbYK2qStQur3+R1DE75E0F?= =?utf-8?q?kRJiEOcJ6JWj7tiuMtlsNDOJfckBCsgbjxpgdP0XCdQDzPf4cZ+oGkV3qZRXoqKn3?= =?utf-8?q?p9jjSaMCx9Najv4Ec3wujzq5ytdvCZt4mQkeDtB+jJLoAbXNOpoacVG2jpPk2Brsz?= =?utf-8?q?J0jdJhZS2LEdFIbQtW5GZLCk1xdHpvAwuOG6PaN7IIem7bnjoatE33UIWBSkQka1T?= =?utf-8?q?aoyNtzoNFuUEHFR86Y5a+v7IjiexmrVH6W1d3PsH/4PVvu6mCH0rELYcs03OFZ80s?= =?utf-8?q?cgNCiTush6cIZvUNeghw/8aF5CzAUTlEGEA6RylBfxxy6vKw3icxpdZdXxQ4zcqlk?= =?utf-8?q?Kn+sPAYBCaGLlVwv23kWlqRsvT5LhBGkgx0XV+doqb5PDEj0VrMa9kGc2jTcbBSP6?= =?utf-8?q?cJRtRaDDFm+f?= MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: OYMOyfv+o5yaCDSPK2PLScAY6ah3YrELSYZ1ejXjwX+Cm1HF+bpvOmuIvt/haC87xhbYMerZo9oOIee7qWicoUdWt8aVXZJHGmyEseagntFLlFt1AbyXDqMkMzyLK71vZoVt/9yUYpd+yeHbUWnrfHrna4VhbcNUA3ExT4ap1u1qibIR6GM5XHf5E2b9ZnlWenGBICLVKT3El/f1E3M31BlmWJWKRqwoIhWwHzOi1DAsOTMFS4IV0QBn1RiRGCARaTEj0fOEE0V3MlVvQJRNISNK+J5Fml51EeLNWp1HjvR9ZwZIyFb3MqgtfFrBxwNYVpcqVaJAu8cR6jddLbuLlD86+GZ6avx1Xpy2Ne5XAUmlEdKct+uXOdIF4UFsSjew6xH37Vm0Zg6Bq6Zm31WeGE4QbhHCfesNuC4LZp+w7FheP93T7YM6a9qyTaxlZ18PgnffrBpAlgh3U3ftoQOY67+CLeE0sE8TsutijLLW29WNfEth7bcOuqsnFsx3J4BSVn+amyj1D2WvBDOF2mLiZi6zLoGFcld8vy27hSsNG61nGhG/AaGVApEzfaL0tVB6zeLNmKCSIUeG17xOr6HioPmnPtYbaoMTP23jERHaDHbtw+c5GlFkGNZaYvDGjaNprF+aIe8W1LotkUybAGOeq72OqDuVtMR9g6Ii+GNE6N31ZnRujJ5RgzeHu723HPgkINc83oLa6OvRVTGRMCuf1388PoPI14iW9YYn84hJCoTrbYvObMlPsFViSOg9w60KcSrrtkuha8Wxv4UztqJQeiijc7HawpVIA987GgJaZsTCcuNpfwAiTi1u1aOCPt9I9RhQ5rdwf9uJupqT9hf+ew== X-OriginatorOrg: sony.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PUZPR04MB6316.apcprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c0f3caa9-2c8c-4e6a-1ea8-08dbbd887134 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Sep 2023 05:29:51.5317 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 66c65d8a-9158-4521-a2d8-664963db48e4 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: W7eSPV0zz9SQspJ1F4Ee36ldIhHNxw2zOLAGymmj0aoL2HGu196UMI6B/17ByUmWVEOwGtUdykvCHcWCSWysdA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYSPR04MB7081 X-Proofpoint-ORIG-GUID: rTImMq_AvDZ7WHA-p9FWQhGdGJ53V0js X-Proofpoint-GUID: rTImMq_AvDZ7WHA-p9FWQhGdGJ53V0js X-Sony-Outbound-GUID: rTImMq_AvDZ7WHA-p9FWQhGdGJ53V0js X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-09-25_03,2023-09-21_01,2023-05-22_02 Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Since the read operation beyond the ValidDataLength returns zero, if we just extend the size of the file, we don't need to zero the extended part, but only change the DataLength without changing the ValidDataLength. Signed-off-by: Yuezhang Mo Reviewed-by: Andy Wu Reviewed-by: Aoyama Wataru --- fs/exfat/file.c | 77 +++++++++++++++++++++++++++++++++++------------- fs/exfat/inode.c | 16 +++++++++- 2 files changed, 72 insertions(+), 21 deletions(-) diff --git a/fs/exfat/file.c b/fs/exfat/file.c index 8e45e782faff..390fef888df5 100644 --- a/fs/exfat/file.c +++ b/fs/exfat/file.c @@ -17,32 +17,69 @@ static int exfat_cont_expand(struct inode *inode, loff_t size) { - struct address_space *mapping = inode->i_mapping; - loff_t start = i_size_read(inode), count = size - i_size_read(inode); - int err, err2; + int ret; + unsigned int num_clusters, new_num_clusters, last_clu; + struct exfat_inode_info *ei = EXFAT_I(inode); + struct super_block *sb = inode->i_sb; + struct exfat_sb_info *sbi = EXFAT_SB(sb); + struct exfat_chain clu; - err = generic_cont_expand_simple(inode, size); - if (err) - return err; + ret = inode_newsize_ok(inode, size); + if (ret) + return ret; + + num_clusters = EXFAT_B_TO_CLU_ROUND_UP(i_size_read(inode), sbi); + new_num_clusters = EXFAT_B_TO_CLU_ROUND_UP(size, sbi); + + if (new_num_clusters == num_clusters) + goto out; + + exfat_chain_set(&clu, ei->start_clu, num_clusters, ei->flags); + ret = exfat_find_last_cluster(sb, &clu, &last_clu); + if (ret) + return ret; + clu.dir = (last_clu == EXFAT_EOF_CLUSTER) ? + EXFAT_EOF_CLUSTER : last_clu + 1; + clu.size = 0; + clu.flags = ei->flags; + + ret = exfat_alloc_cluster(inode, new_num_clusters - num_clusters, + &clu, IS_DIRSYNC(inode)); + if (ret) + return ret; + + /* Append new clusters to chain */ + if (clu.flags != ei->flags) { + exfat_chain_cont_cluster(sb, ei->start_clu, num_clusters); + ei->flags = ALLOC_FAT_CHAIN; + } + if (clu.flags == ALLOC_FAT_CHAIN) + if (exfat_ent_set(sb, last_clu, clu.dir)) + goto free_clu; + + if (num_clusters == 0) + ei->start_clu = clu.dir; + +out: inode->i_mtime = inode_set_ctime_current(inode); - EXFAT_I(inode)->valid_size = size; - mark_inode_dirty(inode); + /* Expanded range not zeroed, do not update valid_size */ + i_size_write(inode, size); - if (!IS_SYNC(inode)) - return 0; + ei->i_size_aligned = round_up(size, sb->s_blocksize); + ei->i_size_ondisk = ei->i_size_aligned; + inode->i_blocks = round_up(size, sbi->cluster_size) >> 9; - err = filemap_fdatawrite_range(mapping, start, start + count - 1); - err2 = sync_mapping_buffers(mapping); - if (!err) - err = err2; - err2 = write_inode_now(inode, 1); - if (!err) - err = err2; - if (err) - return err; + if (IS_DIRSYNC(inode)) + return write_inode_now(inode, 1); + + mark_inode_dirty(inode); + + return 0; - return filemap_fdatawait_range(mapping, start, start + count - 1); +free_clu: + exfat_free_cluster(inode, &clu); + return -EIO; } static bool exfat_allow_set_time(struct exfat_sb_info *sbi, struct inode *inode) diff --git a/fs/exfat/inode.c b/fs/exfat/inode.c index fb8c17996b35..aba4d9ec9d52 100644 --- a/fs/exfat/inode.c +++ b/fs/exfat/inode.c @@ -81,7 +81,15 @@ int __exfat_write_inode(struct inode *inode, int sync) ep2->dentry.stream.start_clu = EXFAT_FREE_CLUSTER; } - ep2->dentry.stream.valid_size = cpu_to_le64(ei->valid_size); + /* + * mmap write does not use exfat_write_end(), valid_size may be + * extended to the sector-aligned length in exfat_get_block(). + * So we need to fixup valid_size to the writren length. + */ + if (on_disk_size < ei->valid_size) + ep2->dentry.stream.valid_size = ep2->dentry.stream.size; + else + ep2->dentry.stream.valid_size = cpu_to_le64(ei->valid_size); exfat_update_dir_chksum_with_entry_set(&es); return exfat_put_dentry_set(&es, sync); @@ -330,6 +338,12 @@ int exfat_get_block(struct inode *inode, sector_t iblock, pos, ei->i_size_aligned); goto unlock_ret; } + + pos -= sb->s_blocksize; + if (pos + bh_result->b_size > ei->valid_size) { + ei->valid_size = pos + bh_result->b_size; + mark_inode_dirty(inode); + } } else { size_t b_size = EXFAT_BLK_TO_B(max_blocks, sb);