From patchwork Wed Jul 6 02:34:52 2022 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: 12907252 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 E0853C433EF for ; Wed, 6 Jul 2022 02:35:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231139AbiGFCf3 (ORCPT ); Tue, 5 Jul 2022 22:35:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36264 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230411AbiGFCfQ (ORCPT ); Tue, 5 Jul 2022 22:35:16 -0400 Received: from mx07-001d1705.pphosted.com (mx07-001d1705.pphosted.com [185.132.183.11]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F07581A046; Tue, 5 Jul 2022 19:35:15 -0700 (PDT) Received: from pps.filterd (m0209329.ppops.net [127.0.0.1]) by mx08-001d1705.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 265NgBh3003384; Wed, 6 Jul 2022 02:34:58 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sony.com; h=from : to : cc : subject : date : message-id : content-type : mime-version; s=S1; bh=4QQoi3s9H62iOspt2lF7zTwpjvxISzs+X/s4Jk6b5iQ=; b=PTlhH9X1z6A/xUKrEsNwKRIRXPciMqQMpQWwQSENg4rGFG1Qn5AHYKY5tp3NtYwPwc8T OP7Tk541Ia+QC3OIi6fVov2l2UtoTQlc14lLyeMktCnzgWZ6s8w5Gn1p7QBQQEmWkC/L kDjN//VfTW3CKSKw2+5+5cNEyid2v8pVq07v4QjKgqIKlfyJAyFMOFCvtptiUZvSEqXF wP7Hs0gQWZ1/Kg+StmTE1235C0SNTcF+Zona8Qn15yYdc/psaVWFKVfgD6l0SuI15Hu9 f7d+kNYjwyCeuz27bSdfNXEWhplva4yNQe6A38kujyENpXMUG1Cfq/nVsujhOoWdroHn BA== Received: from apc01-sg2-obe.outbound.protection.outlook.com (mail-sgaapc01lp2105.outbound.protection.outlook.com [104.47.26.105]) by mx08-001d1705.pphosted.com (PPS) with ESMTPS id 3h4urcgab7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 06 Jul 2022 02:34:58 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=L9jLlQh28lONrLgKn2Q+8L2lS90A8tXrouWqNoQJy2Trg0oaSlgjD/Aut81LBukQT0cgM54QzNTVZxx4HDDPUGZqqu28+jp8PIDXflTvcd+xhAKbqv0AmAUjMMSjE8G24NRe+i0qIrzhMXfwKleTxvQWRDl1a0VDEuIc2yOq4iG7Ir5wmUw8xH0xO8LKSjZnSe2B6u9MevB5qDC7BjyNrKgpHZcpfqjb0Eq33gwgZY3dTHZv+wUTrmn5WMIV0JE6dh+C7N70bCcNmcv3AQbRfwYC/3SWiJyOBDN6mX6eHsmYBNj1V0cbx6Cgra2uJ0dYQaE0ruwabpuyvYJJ679fhg== 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=4QQoi3s9H62iOspt2lF7zTwpjvxISzs+X/s4Jk6b5iQ=; b=LYhy4rcsfC0d8SCXD7dAYBtVHrLPuM5U7YsqIplsjjc85kdfns8hIH1wUmV/IWuJfHQMDzkBwmrajmTsfVNwmUy16A2LAJSpTLMu4EkWA1aUAMrZD1fXxnfy2wGsk3MbuEkLR/KoR73BoFO9UUM0PUdpR/jd+gVXR/YlaIWCorh+bjaIdhdgJQMwqtmLpeS+xcANJJFrLP6hdemJdngcTSGw2U46r1G+GU1p/TEPPFis++A18XpYZl+bUzEXYLX3s2gDE38ImRqhFP6wiV1efqUhs/neFgiQR8TfXC7EQFiFNglq0UUNW0K8rURLirLlN01BlrADSskN5joZJrjbcw== 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 SG2PR04MB3899.apcprd04.prod.outlook.com (2603:1096:4:94::11) by SEZPR04MB5972.apcprd04.prod.outlook.com (2603:1096:101:65::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5417.15; Wed, 6 Jul 2022 02:34:53 +0000 Received: from SG2PR04MB3899.apcprd04.prod.outlook.com ([fe80::9076:c0a7:6016:599a]) by SG2PR04MB3899.apcprd04.prod.outlook.com ([fe80::9076:c0a7:6016:599a%6]) with mapi id 15.20.5395.017; Wed, 6 Jul 2022 02:34:52 +0000 From: "Yuezhang.Mo@sony.com" To: Namjae Jeon , "sj1557.seo@samsung.com" CC: "linux-fsdevel@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "Andy.Wu@sony.com" , "Wataru.Aoyama@sony.com" Subject: [PATCH v1 2/3] exfat: remove duplicate write inode for truncating file Thread-Topic: [PATCH v1 2/3] exfat: remove duplicate write inode for truncating file Thread-Index: AdiQ32NodxpH5hhMTdGIdMWLRFebXg== Date: Wed, 6 Jul 2022 02:34:52 +0000 Message-ID: Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 17e16485-f0d4-4aca-e030-08da5ef81b42 x-ms-traffictypediagnostic: SEZPR04MB5972:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: juHTuDmNpR1JkCdXqZeqpDikrLvxqfAkEoIQlvhXyJp7W362kL6awbHOR0+3yWwa/QtrzZvxTCSOSai+ccuikV+agGSM2aWcDIXD7IdNKNgxKUnHAAHz7rwgPVFQx75Qz/SBT7mJlTIMlZl9iaP5FhG6MfewwsaBBOVPo48u39EGBKj/bd5PjSEQuguTZmRVwomA3u/hohf4P3Mjo9mumkD5W0sngqODswFv4SXJSI8m5Zh28mOcqstvnpbdvusNF+jrC85f72WLk8cyQUwFoO9FjdU0hVIDM6DXvasExk5XAetvATs9Qz0gVfRUj/OHdEX5nYgboPf69yqvgMprOUCL4UG3f8x74kmiG1JJHK/220GITMUW7dF6bIh+1sxxnn0cd9cszFEqZYBVR1uak+EsrDTcLFvkWC4qmAkJQ+98xjLbCa23dd5dFIGkDwrmF6V/kgXnpFzKeyjXtg3iR3pAqbkQk0WPdbniglUIv5r7AhM4bKwjKWOwHrWwmbRnkqusvocNlSVNIVIx+oBt1fpBvx2M80y9/EX235NcK8kf7P8IQQzVToBpy99EGfXNonh9laetdZ1rD7BfnnWFdfY2f+EAleyn1HoQesl1uirGIhqwtR5u4FM9C51V3NU/gHcn4pqNOOBz6kldCLuk22fzXgSLVnlJGcyAmsPIfG2JTTqQpX+PAGws3ZS0jpXa/hIJ432ZARWY4+hxh6601YeqkRkfvKnk+TMfV5EH1vn3ihM1JwakuRibO22S17VA3xxBJYWVGU5xHQK2EdLvR9F6IIq5kmej5CHNbLB/kjStsH01SJ4xDhWuGTuxDeD8 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SG2PR04MB3899.apcprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(396003)(366004)(136003)(39860400002)(376002)(346002)(83380400001)(99936003)(82960400001)(122000001)(38070700005)(38100700002)(54906003)(110136005)(316002)(71200400001)(52536014)(8936002)(5660300002)(4326008)(8676002)(76116006)(66946007)(66556008)(66476007)(66446008)(64756008)(107886003)(9686003)(186003)(26005)(2906002)(478600001)(6506007)(41300700001)(7696005)(55016003)(33656002)(86362001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?ZSm1f6mHFzsw5JWDy0jlSbAEriTS?= =?utf-8?q?kbUICkGcZpXlcRzZlKSRJNt7yZS0yWOYbSiBpnvFbYPW9qam+O+XCGRmhYqV6Z8M5?= =?utf-8?q?0FRaOK7Z8HdjBt/utuaFbZ3IOY36FvSBDt8TTz0oWhXSCLmI3jTFloVe2V7QLVEKj?= =?utf-8?q?pS7D33oFrjMEMLIyop8ZXybDj9nYZ1fIwtf9ZomQ5NPVrmb4JuC2HEa71ZOF03fVR?= =?utf-8?q?AQ7KcgaGv2zlR1aLOc2sJGRj5BXKzuMSAzxD0KigoNIAhRBmSbZurDCWQDTJ+80BL?= =?utf-8?q?mjmqeVbqV1xFmpAuB5YjxmAXGfi11wru5ZRn3/HQ4J/AzmEcOr/8HGxRI9aW3j31L?= =?utf-8?q?01HeeRrSkP7fx8VWdu+co1Js28yiLNz4H5nBT+K46Kwj+saPb5sYdDk8k70o54q5I?= =?utf-8?q?fl385oDBs4iW4Lc0a4ENs0Cad5OIppuWPcpmm1/UGtsXoF+7A0bGcrsvfHDc8gMi9?= =?utf-8?q?MKyevFEzGV/qxWQGafQy9p9LKlYWC1kfdr+nNso0/ZqQZBmb0Qr7TWsGug/wum2y/?= =?utf-8?q?713BQbjuPKv7SAJv+IZ+S17Oxn4uk8sJtQduFZZ1z0nrWDtEO7QIx6f8IhWPBUEMx?= =?utf-8?q?hr1QeP5vMo9Cp5TbGaimSSFdVAKHcCGNsX3kYzH+2sfjK/QvQs70BJBP263l+4Bto?= =?utf-8?q?AFupXWd5U/0RqoD1DAwPyVLyZzeCsxQc0cb7UkB7vPrDpjkCkE8A6kxwWFie7UVfJ?= =?utf-8?q?Tg5JZ9xv1PwYBzTomTzCeJVinz+lprxMCW3oolDmGZuSzlLMzvyJV/iTCMFgJ1Auc?= =?utf-8?q?GJfarw/bKrT9cyHf4i9rGUnilN1IkpWyw8MYB1dbnyxX2LqBfrh6kEv5TDYGX+wV+?= =?utf-8?q?h1bqZZdjPZQez/v0M+CatXa0QtSeVdw0KMvhV7FR7rTH90VxHt1EhXaRGD1YbFQg8?= =?utf-8?q?x0sxvh/Xc2Elmd4vOQyX+/J7AmFF4/eXM4jumtsvX9eToXvTNOznSD4cOqa3XB7zx?= =?utf-8?q?En2pZ5NzhS6HKXQpI9qhaU2HKfYFNkZjGkSUOfc6PnpAdaaEHofr0nVGfkVxeRaHZ?= =?utf-8?q?bisw7kC/4g0ZsMV4hCkb7VCJ0TaDZFfqaTMOduC8iahulPt/PrrmY8GPgFsJZFg6C?= =?utf-8?q?ZygqEK6FAFHIITRyhyvim9uPG4MCelI51FIEATdTDUboXWzocbi2mTXHwJe3guzvu?= =?utf-8?q?9NPBNiW5NxjLAruJLCY068Gbt5QU9NPObnPJa4geQ/XYgEQ3A9D7E827TAKzQ56/q?= =?utf-8?q?TsHhpWQ7CJHuy1NgZRkxPxd8jSSBak/sMZiFkSbCLbftVruaVrn6eAeukmjnKhhTl?= =?utf-8?q?OIsPMMzR8wGLtXSImsQ3pQ8wJCyWYtb+ad0nAUEPbMBKqQib7uUDnRyWWgaKUSniF?= =?utf-8?q?uOZgznvuk+ggEdPb8RqqOxnCDpVYcaPma+O10glcOH83NrH3mNvBPzHL2HPH9jPKm?= =?utf-8?q?lzsEgMIP6iB2IEIzyP3g8xqQhScIsb298fk4kzHiFbGC0/n5IKdwB/lQN7huWlzL5?= =?utf-8?q?xoCIBFfJdxrmS3W7W6egVMrkLKD3Mi8XkJkmy21G5pbZ9XQzyWzD/ODir8bG8DmLW?= =?utf-8?q?jjteK0F/N1Zv?= MIME-Version: 1.0 X-OriginatorOrg: sony.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SG2PR04MB3899.apcprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 17e16485-f0d4-4aca-e030-08da5ef81b42 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Jul 2022 02:34:52.8145 (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: H9q9EA/10eZKK8+0wj0pxWVAXPGkjX/P+9snXPG0RrlIp3p+ZB4p2TEdkIjFCUcGElB2qFOEQl/9imcwGwPgiA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR04MB5972 X-Proofpoint-GUID: CBIvfy6bHPAanbx2Ktzjup9zWTAeBtAP X-Proofpoint-ORIG-GUID: CBIvfy6bHPAanbx2Ktzjup9zWTAeBtAP X-Sony-Outbound-GUID: CBIvfy6bHPAanbx2Ktzjup9zWTAeBtAP X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-06_02,2022-06-28_01,2022-06-22_01 Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org This commit moves updating file attributes and timestamps before calling __exfat_write_inode(), so that all updates of the inode had been written by __exfat_write_inode(), mark_inode_dirty() is unneeded. Signed-off-by: Yuezhang Mo Reviewed-by: Andy Wu Reviewed-by: Aoyama Wataru Reviewed-by: Daniel Palmer --- fs/exfat/file.c | 37 ++++++++++++++++++++++++------------- fs/exfat/inode.c | 1 + 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/fs/exfat/file.c b/fs/exfat/file.c index 08e5ffd78b10..4e0793f35e8f 100644 --- a/fs/exfat/file.c +++ b/fs/exfat/file.c @@ -148,8 +148,17 @@ int __exfat_truncate(struct inode *inode, loff_t new_size) if (ei->type == TYPE_FILE) ei->attr |= ATTR_ARCHIVE; - /* update the directory entry */ - inode->i_mtime = current_time(inode); + /* + * update the directory entry + * + * If the directory entry is updated by mark_inode_dirty(), the + * directory entry will be written after a writeback cycle of + * updating the bitmap/FAT, which may result in clusters being + * freed but referenced by the directory entry in the event of a + * sudden power failure. + * __exfat_write_inode() is called for directory entry, bitmap + * and FAT to be written in a same writeback. + */ if (__exfat_write_inode(inode, inode_needs_sync(inode))) return -EIO; @@ -202,12 +211,6 @@ void exfat_truncate(struct inode *inode, loff_t size) if (err) goto write_size; - inode->i_ctime = inode->i_mtime = current_time(inode); - if (IS_DIRSYNC(inode)) - exfat_sync_inode(inode); - else - mark_inode_dirty(inode); - inode->i_blocks = round_up(i_size_read(inode), sbi->cluster_size) >> inode->i_blkbits; write_size: @@ -289,6 +292,12 @@ int exfat_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, attr->ia_valid &= ~ATTR_MODE; } + if (attr->ia_valid & ATTR_SIZE) + inode->i_mtime = inode->i_ctime = current_time(inode); + + setattr_copy(&init_user_ns, inode, attr); + exfat_truncate_atime(&inode->i_atime); + if (attr->ia_valid & ATTR_SIZE) { error = exfat_block_truncate_page(inode, attr->ia_size); if (error) @@ -296,13 +305,15 @@ int exfat_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, down_write(&EXFAT_I(inode)->truncate_lock); truncate_setsize(inode, attr->ia_size); + + /* + * __exfat_write_inode() is called from exfat_truncate(), inode + * is already written by it, so mark_inode_dirty() is unneeded. + */ exfat_truncate(inode, attr->ia_size); up_write(&EXFAT_I(inode)->truncate_lock); - } - - setattr_copy(&init_user_ns, inode, attr); - exfat_truncate_atime(&inode->i_atime); - mark_inode_dirty(inode); + } else + mark_inode_dirty(inode); out: return error; diff --git a/fs/exfat/inode.c b/fs/exfat/inode.c index ebc64fa5c2de..3acfbec1a0d4 100644 --- a/fs/exfat/inode.c +++ b/fs/exfat/inode.c @@ -369,6 +369,7 @@ static void exfat_write_failed(struct address_space *mapping, loff_t to) if (to > i_size_read(inode)) { truncate_pagecache(inode, i_size_read(inode)); + inode->i_mtime = inode->i_ctime = current_time(inode); exfat_truncate(inode, EXFAT_I(inode)->i_size_aligned); } }