From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8ADB5C4361B for ; Fri, 18 Dec 2020 02:33:57 +0000 (UTC) Received: from ml01.01.org (ml01.01.org [198.145.21.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E73672388E for ; Fri, 18 Dec 2020 02:33:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E73672388E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=cn.fujitsu.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-nvdimm-bounces@lists.01.org Received: from ml01.vlan13.01.org (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 5B089100EB325; Thu, 17 Dec 2020 18:33:56 -0800 (PST) Received-SPF: None (mailfrom) identity=mailfrom; client-ip=183.91.158.132; helo=heian.cn.fujitsu.com; envelope-from=ruansy.fnst@cn.fujitsu.com; receiver= Received: from heian.cn.fujitsu.com (mail.cn.fujitsu.com [183.91.158.132]) by ml01.01.org (Postfix) with ESMTP id B3BF3100EB322 for ; Thu, 17 Dec 2020 18:33:52 -0800 (PST) X-IronPort-AV: E=Sophos;i="5.78,428,1599494400"; d="scan'208";a="102693910" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 18 Dec 2020 10:33:50 +0800 Received: from G08CNEXMBPEKD05.g08.fujitsu.local (unknown [10.167.33.204]) by cn.fujitsu.com (Postfix) with ESMTP id ED9DA4CE601B; Fri, 18 Dec 2020 10:33:47 +0800 (CST) Received: from irides.mr (10.167.225.141) by G08CNEXMBPEKD05.g08.fujitsu.local (10.167.33.204) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 18 Dec 2020 10:33:47 +0800 Subject: Re: [RFC PATCH v3 9/9] xfs: Implement ->corrupted_range() for XFS To: "Darrick J. Wong" References: <20201215121414.253660-1-ruansy.fnst@cn.fujitsu.com> <20201215121414.253660-10-ruansy.fnst@cn.fujitsu.com> <20201215204032.GA6918@magnolia> From: Ruan Shiyang Message-ID: Date: Fri, 18 Dec 2020 10:31:56 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.5.1 MIME-Version: 1.0 In-Reply-To: <20201215204032.GA6918@magnolia> Content-Language: en-US X-Originating-IP: [10.167.225.141] X-ClientProxiedBy: G08CNEXCHPEKD06.g08.fujitsu.local (10.167.33.205) To G08CNEXMBPEKD05.g08.fujitsu.local (10.167.33.204) X-yoursite-MailScanner-ID: ED9DA4CE601B.A0131 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: ruansy.fnst@cn.fujitsu.com Message-ID-Hash: XPMZXFPMCKAG4X72HQS5IGPIUUYJLHY3 X-Message-ID-Hash: XPMZXFPMCKAG4X72HQS5IGPIUUYJLHY3 X-MailFrom: ruansy.fnst@cn.fujitsu.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-nvdimm@lists.01.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-raid@vger.kernel.org, david@fromorbit.com, hch@lst.de, song@kernel.org, rgoldwyn@suse.de, qi.fuli@fujitsu.com, y-goto@fujitsu.com X-Mailman-Version: 3.1.1 Precedence: list List-Id: "Linux-nvdimm developer list." Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 DQoNCk9uIDIwMjAvMTIvMTYg5LiK5Y2INDo0MCwgRGFycmljayBKLiBXb25nIHdyb3RlOg0KPiBP biBUdWUsIERlYyAxNSwgMjAyMCBhdCAwODoxNDoxNFBNICswODAwLCBTaGl5YW5nIFJ1YW4gd3Jv dGU6DQo+PiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaGFuZGxlIGVycm9ycyB3aGljaCBtYXkg Y2F1c2UgZGF0YSBsb3N0IGluDQo+PiBmaWxlc3lzdGVtLiAgU3VjaCBhcyBtZW1vcnkgZmFpbHVy ZSBpbiBmc2RheCBtb2RlLg0KPj4NCj4+IEluIFhGUywgaXQgcmVxdWlyZXMgInJtYXBidCIgZmVh dHVyZSBpbiBvcmRlciB0byBxdWVyeSBmb3IgZmlsZXMgb3INCj4+IG1ldGFkYXRhIHdoaWNoIGFz c29jaWF0ZWQgdG8gdGhlIGNvcnJ1cHRlZCBkYXRhLiAgVGhlbiB3ZSBjb3VsZCBjYWxsIGZzDQo+ PiByZWNvdmVyIGZ1bmN0aW9ucyB0byB0cnkgdG8gcmVwYWlyIHRoZSBjb3JydXB0ZWQgZGF0YS4o ZGlkIG5vdA0KPj4gaW1wbGVtZW50ZWQgaW4gdGhpcyBwYXRjaHNldCkNCj4+DQo+PiBBZnRlciB0 aGF0LCB0aGUgbWVtb3J5IGZhaWx1cmUgYWxzbyBuZWVkcyB0byBub3RpZnkgdGhlIHByb2Nlc3Nl cyB3aG8NCj4+IGFyZSB1c2luZyB0aG9zZSBmaWxlcy4NCj4+DQo+PiBPbmx5IHN1cHBvcnQgZGF0 YSBkZXZpY2UuICBSZWFsdGltZSBkZXZpY2UgaXMgbm90IHN1cHBvcnRlZCBmb3Igbm93Lg0KPj4N Cj4+IFNpZ25lZC1vZmYtYnk6IFNoaXlhbmcgUnVhbiA8cnVhbnN5LmZuc3RAY24uZnVqaXRzdS5j b20+DQo+PiAtLS0NCj4+ICAgZnMveGZzL3hmc19mc29wcy5jIHwgMTAgKysrKysNCj4+ICAgZnMv eGZzL3hmc19tb3VudC5oIHwgIDIgKw0KPj4gICBmcy94ZnMveGZzX3N1cGVyLmMgfCA5MyArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+PiAgIDMgZmlsZXMg Y2hhbmdlZCwgMTA1IGluc2VydGlvbnMoKykNCj4+DQo+PiBkaWZmIC0tZ2l0IGEvZnMveGZzL3hm c19mc29wcy5jIGIvZnMveGZzL3hmc19mc29wcy5jDQo+PiBpbmRleCBlZjFkNWJiODhiOTMuLjBl YzFiNDRiZmU4OCAxMDA2NDQNCj4+IC0tLSBhL2ZzL3hmcy94ZnNfZnNvcHMuYw0KPj4gKysrIGIv ZnMveGZzL3hmc19mc29wcy5jDQo+PiBAQCAtNTAxLDYgKzUwMSwxNiBAQCB4ZnNfZG9fZm9yY2Vf c2h1dGRvd24oDQo+PiAgICJDb3JydXB0aW9uIG9mIGluLW1lbW9yeSBkYXRhIGRldGVjdGVkLiAg U2h1dHRpbmcgZG93biBmaWxlc3lzdGVtIik7DQo+PiAgIAkJaWYgKFhGU19FUlJMRVZFTF9ISUdI IDw9IHhmc19lcnJvcl9sZXZlbCkNCj4+ICAgCQkJeGZzX3N0YWNrX3RyYWNlKCk7DQo+PiArCX0g ZWxzZSBpZiAoZmxhZ3MgJiBTSFVURE9XTl9DT1JSVVBUX01FVEEpIHsNCj4+ICsJCXhmc19hbGVy dF90YWcobXAsIFhGU19QVEFHX1NIVVRET1dOX0NPUlJVUFQsDQo+PiArIkNvcnJ1cHRpb24gb2Yg b24tZGlzayBtZXRhZGF0YSBkZXRlY3RlZC4gIFNodXR0aW5nIGRvd24gZmlsZXN5c3RlbSIpOw0K Pj4gKwkJaWYgKFhGU19FUlJMRVZFTF9ISUdIIDw9IHhmc19lcnJvcl9sZXZlbCkNCj4+ICsJCQl4 ZnNfc3RhY2tfdHJhY2UoKTsNCj4+ICsJfSBlbHNlIGlmIChmbGFncyAmIFNIVVRET1dOX0NPUlJV UFRfREFUQSkgew0KPj4gKwkJeGZzX2FsZXJ0X3RhZyhtcCwgWEZTX1BUQUdfU0hVVERPV05fQ09S UlVQVCwNCj4+ICsiQ29ycnVwdGlvbiBvZiBvbi1kaXNrIGZpbGUgZGF0YSBkZXRlY3RlZC4gIFNo dXR0aW5nIGRvd24gZmlsZXN5c3RlbSIpOw0KPj4gKwkJaWYgKFhGU19FUlJMRVZFTF9ISUdIIDw9 IHhmc19lcnJvcl9sZXZlbCkNCj4+ICsJCQl4ZnNfc3RhY2tfdHJhY2UoKTsNCj4+ICAgCX0gZWxz ZSBpZiAobG9nZXJyb3IpIHsNCj4+ICAgCQl4ZnNfYWxlcnRfdGFnKG1wLCBYRlNfUFRBR19TSFVU RE9XTl9MT0dFUlJPUiwNCj4+ICAgCQkJIkxvZyBJL08gRXJyb3IgRGV0ZWN0ZWQuIFNodXR0aW5n IGRvd24gZmlsZXN5c3RlbSIpOw0KPj4gZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuaCBi L2ZzL3hmcy94ZnNfbW91bnQuaA0KPj4gaW5kZXggZGZhNDI5Yjc3ZWUyLi5lMzZjMDc1NTM0ODYg MTAwNjQ0DQo+PiAtLS0gYS9mcy94ZnMveGZzX21vdW50LmgNCj4+ICsrKyBiL2ZzL3hmcy94ZnNf bW91bnQuaA0KPj4gQEAgLTI3NCw2ICsyNzQsOCBAQCB2b2lkIHhmc19kb19mb3JjZV9zaHV0ZG93 bihzdHJ1Y3QgeGZzX21vdW50ICptcCwgaW50IGZsYWdzLCBjaGFyICpmbmFtZSwNCj4+ICAgI2Rl ZmluZSBTSFVURE9XTl9MT0dfSU9fRVJST1IJMHgwMDAyCS8qIHdyaXRlIGF0dGVtcHQgdG8gdGhl IGxvZyBmYWlsZWQgKi8NCj4+ICAgI2RlZmluZSBTSFVURE9XTl9GT1JDRV9VTU9VTlQJMHgwMDA0 CS8qIHNodXRkb3duIGZyb20gYSBmb3JjZWQgdW5tb3VudCAqLw0KPj4gICAjZGVmaW5lIFNIVVRE T1dOX0NPUlJVUFRfSU5DT1JFCTB4MDAwOAkvKiBjb3JydXB0IGluLW1lbW9yeSBkYXRhIHN0cnVj dHVyZXMgKi8NCj4+ICsjZGVmaW5lIFNIVVRET1dOX0NPUlJVUFRfTUVUQQkweDAwMTAgIC8qIGNv cnJ1cHQgbWV0YWRhdGEgb24gZGV2aWNlICovDQo+PiArI2RlZmluZSBTSFVURE9XTl9DT1JSVVBU X0RBVEEJMHgwMDIwICAvKiBjb3JydXB0IGZpbGUgZGF0YSBvbiBkZXZpY2UgKi8NCj4gDQo+IFRo aXMgc3ltYm9sIGlzbid0IHVzZWQgYW55d2hlcmUuICBJIGRvbid0IGtub3cgd2h5IHdlJ2Qgc2h1 dCBkb3duIHRoZSBmcw0KPiBmb3IgZGF0YSBsb3NzLCBhcyB3ZSBkb24ndCBkbyB0aGF0IGFueXdo ZXJlIGVsc2UgaW4geGZzLg0KDQpJIHByZXBhcmVkIHRoaXMgZmxhZyBmb3IgdGhlIGxhdGVyIHVz ZSBpZiBwb3NzaWJsZS4gIEJ1dCBzaW5jZSBpdCBzZWVtcyANCnVubmVjZXNzYXJ5LCBJIHdpbGwg cmVtb3ZlIGl0IGluIHRoZSBuZXh0IHZlcnNpb24uDQoNCj4gDQo+PiAgIA0KPj4gICAvKg0KPj4g ICAgKiBGbGFncyBmb3IgeGZzX21vdW50ZnMNCj4+IGRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3N1 cGVyLmMgYi9mcy94ZnMveGZzX3N1cGVyLmMNCj4+IGluZGV4IGUzZTIyOWU1MjUxMi4uMzAyMDJk ZTdlODlkIDEwMDY0NA0KPj4gLS0tIGEvZnMveGZzL3hmc19zdXBlci5jDQo+PiArKysgYi9mcy94 ZnMveGZzX3N1cGVyLmMNCj4+IEBAIC0zNSw2ICszNSwxMSBAQA0KPj4gICAjaW5jbHVkZSAieGZz X3JlZmNvdW50X2l0ZW0uaCINCj4+ICAgI2luY2x1ZGUgInhmc19ibWFwX2l0ZW0uaCINCj4+ICAg I2luY2x1ZGUgInhmc19yZWZsaW5rLmgiDQo+PiArI2luY2x1ZGUgInhmc19hbGxvYy5oIg0KPj4g KyNpbmNsdWRlICJ4ZnNfcm1hcC5oIg0KPj4gKyNpbmNsdWRlICJ4ZnNfcm1hcF9idHJlZS5oIg0K Pj4gKyNpbmNsdWRlICJ4ZnNfcnRhbGxvYy5oIg0KPj4gKyNpbmNsdWRlICJ4ZnNfYml0LmgiDQo+ PiAgIA0KPj4gICAjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4NCj4+ICAgI2luY2x1ZGUgPGxpbnV4 L2ZzX2NvbnRleHQuaD4NCj4+IEBAIC0xMTAzLDYgKzExMDgsOTMgQEAgeGZzX2ZzX2ZyZWVfY2Fj aGVkX29iamVjdHMoDQo+PiAgIAlyZXR1cm4geGZzX3JlY2xhaW1faW5vZGVzX25yKFhGU19NKHNi KSwgc2MtPm5yX3RvX3NjYW4pOw0KPj4gICB9DQo+PiAgIA0KPj4gK3N0YXRpYyBpbnQNCj4+ICt4 ZnNfY29ycnVwdF9oZWxwZXIoDQo+PiArCXN0cnVjdCB4ZnNfYnRyZWVfY3VyCQkqY3VyLA0KPj4g KwlzdHJ1Y3QgeGZzX3JtYXBfaXJlYwkJKnJlYywNCj4+ICsJdm9pZAkJCQkqZGF0YSkNCj4+ICt7 DQo+PiArCXN0cnVjdCB4ZnNfaW5vZGUJCSppcDsNCj4+ICsJaW50CQkJCXJjID0gMDsNCj4gDQo+ IE5vdGU6IHdlIHVzdWFsbHkgdXNlIHRoZSBuYW1lICJlcnJvciIsIG5vdCAicmMiLg0KDQpPSy4N Cg0KPiANCj4+ICsJaW50CQkJCSpmbGFncyA9IGRhdGE7DQo+PiArDQo+PiArCWlmIChYRlNfUk1B UF9OT05fSU5PREVfT1dORVIocmVjLT5ybV9vd25lcikpIHsNCj4gDQo+IFRoZXJlIGFyZSBhIGZl dyBtb3JlIHRoaW5ncyB0byBjaGVjayBoZXJlIHRvIGRldGVjdCBpZiBtZXRhZGF0YSBoYXMgYmVl bg0KPiBsb3N0LiAgVGhlIGZpcnN0IGlzIHRoYXQgYW55IGxvc3MgaW4gdGhlIGV4dGVuZGVkIGF0 dHJpYnV0ZSBpbmZvcm1hdGlvbg0KPiBpcyBjb25zaWRlcmVkIGZpbGVzeXN0ZW0gbWV0YWRhdGE7 IGFuZCB0aGUgc2Vjb25kIGlzIHRoYXQgbG9zcyBvZiBhbg0KPiBleHRlbnQgYnRyZWUgYmxvY2sg aXMgYWxzbyBtZXRhZGF0YS4NCj4gDQo+IElPV3MsIHRoaXMgY2hlY2sgc2hvdWxkIGJlOg0KPiAN Cj4gCWlmIChYRlNfUk1BUF9OT05fSU5PREVfT1dORVIocmVjLT5ybV9vd25lcikgfHwNCj4gCSAg ICAocmVjLT5ybV9mbGFncyAmIChYRlNfUk1BUF9BVFRSX0ZPUksgfCBYRlNfUk1BUF9CTUJUX0JM T0NLKSkpIHsNCj4gCQkvLyBUT0RPIGNoZWNrIGFuZCB0cnkgdG8gZml4IG1ldGFkYXRhDQo+IAkJ cmV0dXJuIC1FRlNDT1JSVVBURUQ7DQo+IAl9DQoNClRoYW5rcyBmb3IgcG9pbnRpbmcgb3V0Lg0K DQo+IA0KPj4gKwkJLy8gVE9ETyBjaGVjayBhbmQgdHJ5IHRvIGZpeCBtZXRhZGF0YQ0KPj4gKwkJ cmMgPSAtRUZTQ09SUlVQVEVEOw0KPj4gKwl9IGVsc2Ugew0KPj4gKwkJLyoNCj4+ICsJCSAqIEdl dCBmaWxlcyB0aGF0IGluY29yZSwgZmlsdGVyIG91dCBvdGhlcnMgdGhhdCBhcmUgbm90IGluIHVz ZS4NCj4+ICsJCSAqLw0KPj4gKwkJcmMgPSB4ZnNfaWdldChjdXItPmJjX21wLCBjdXItPmJjX3Rw LCByZWMtPnJtX293bmVyLA0KPj4gKwkJCSAgICAgIFhGU19JR0VUX0lOQ09SRSwgMCwgJmlwKTsN Cj4+ICsJCWlmIChyYyB8fCAhaXApDQo+PiArCQkJcmV0dXJuIHJjOw0KPj4gKwkJaWYgKCFWRlNf SShpcCktPmlfbWFwcGluZykNCj4+ICsJCQlnb3RvIG91dDsNCj4+ICsNCj4+ICsJCWlmIChJU19E QVgoVkZTX0koaXApKSkNCj4+ICsJCQlyYyA9IG1mX2RheF9tYXBwaW5nX2tpbGxfcHJvY3MoVkZT X0koaXApLT5pX21hcHBpbmcsDQo+PiArCQkJCQkJICAgICAgIHJlYy0+cm1fb2Zmc2V0LCAqZmxh Z3MpOw0KPiANCj4gSWYgdGhlIGZpbGUgaXNuJ3QgU19EQVgsIHNob3VsZCB3ZSBjYWxsIG1hcHBp bmdfc2V0X2Vycm9yIGhlcmUgc28NCj4gdGhhdCB0aGUgbmV4dCBmc3luYygpIHdpbGwgYWxzbyBy ZXR1cm4gRUlPPw0KDQpOaWNlIGlkZWEuICBJIHdpbGwgdHJ5Lg0KDQo+IA0KPj4gKw0KPj4gKwkJ Ly8gVE9ETyB0cnkgdG8gZml4IGRhdGENCj4+ICtvdXQ6DQo+PiArCQl4ZnNfaXJlbGUoaXApOw0K Pj4gKwl9DQo+PiArDQo+PiArCXJldHVybiByYzsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGlu dA0KPj4gK3hmc19mc19jb3JydXB0ZWRfcmFuZ2UoDQo+PiArCXN0cnVjdCBzdXBlcl9ibG9jawkq c2IsDQo+PiArCXN0cnVjdCBibG9ja19kZXZpY2UJKmJkZXYsDQo+PiArCWxvZmZfdAkJCW9mZnNl dCwNCj4+ICsJc2l6ZV90CQkJbGVuLA0KPj4gKwl2b2lkCQkJKmRhdGEpDQo+PiArew0KPj4gKwlz dHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsNCj4+ICsJc3RydWN0IHhmc190cmFucwkq dHAgPSBOVUxMOw0KPj4gKwlzdHJ1Y3QgeGZzX2J0cmVlX2N1cgkqY3VyID0gTlVMTDsNCj4+ICsJ c3RydWN0IHhmc19ybWFwX2lyZWMJcm1hcF9sb3csIHJtYXBfaGlnaDsNCj4+ICsJc3RydWN0IHhm c19idWYJCSphZ2ZfYnAgPSBOVUxMOw0KPj4gKwl4ZnNfZnNibG9ja190CQlmc2JubyA9IFhGU19C X1RPX0ZTQihtcCwgb2Zmc2V0KTsNCj4+ICsJeGZzX2ZpbGJsa3NfdAkJYmMgPSBYRlNfQl9UT19G U0IobXAsIGxlbik7DQo+PiArCXhmc19hZ251bWJlcl90CQlhZ25vID0gWEZTX0ZTQl9UT19BR05P KG1wLCBmc2Jubyk7DQo+PiArCXhmc19hZ2Jsb2NrX3QJCWFnYm5vID0gWEZTX0ZTQl9UT19BR0JO TyhtcCwgZnNibm8pOw0KPj4gKwlpbnQJCQlyYyA9IDA7DQo+PiArDQo+PiArCWlmIChtcC0+bV9y dGRldl90YXJncCAmJiBtcC0+bV9ydGRldl90YXJncC0+YnRfYmRldiA9PSBiZGV2KSB7DQo+PiAr CQl4ZnNfd2FybihtcCwgInN0b3JhZ2UgbG9zdCBzdXBwb3J0IG5vdCBhdmFpbGFibGUgZm9yIHJl YWx0aW1lIGRldmljZSEiKTsNCj4+ICsJCXJldHVybiAwOw0KPj4gKwl9DQo+IA0KPiBUaGlzIG91 Z2h0IHRvIGtpbGwgdGhlIGZzIHdoZW4gYW4gZXh0ZXJuYWwgbG9nIGRldmljZSBpcyBjb25maWd1 cmVkOg0KPiANCj4gCWlmIChtcC0+bV9sb2dkZXZfdGFyZ3AgJiYNCj4gCSAgICBtcC0+bV9sb2dk ZXZfdGFyZ3AgIT0gbXAtPm1fZGRldl90YXJncCAmJg0KPiAJICAgIG1wLT5tX2xvZ2Rldl90YXJn cC0+YnRfYmRldiA9PSBiZGV2KSB7DQo+IAkJeGZzX2Vycm9yKG1wLCAib25kaXNrIGxvZyBjb3Jy dXB0LCBzaHV0dGluZyBkb3duIGZzISIpOw0KPiAJCXhmc19mb3JjZV9zaHV0ZG93bihtcCwgU0hV VERPV05fQ09SUlVQVF9NRVRBKTsNCj4gCQlyZXR1cm4gMDsNCj4gCX0NCj4gDQo+IFRoZW4sIHdl IG5lZWQgdG8gY2hlY2sgZXhwbGljaXRseSBmb3Igcm1hcCBzdXBwb3J0Og0KPiANCj4gCWlmICgh eGZzX3NiX3ZlcnNpb25faGFzcm1hcGJ0KCZtcC0+bV9zYikpDQo+IAkJcmV0dXJuIDA7DQo+IA0K PiBzbyB0aGF0IHdlIHNjcmVlbiBvdXQgZmlsZXN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIHJtYXAg ZW5hYmxlZC4NCg0KQWguLi4gIEkgd2FzIHRvbyBuZWdsaWdlbnQgdG8gdGhpbmsgb2YgdGhpcy4g IFRoYXQncyB2ZXJ5IHRob3VnaHRmdWwgb2YgDQp5b3UuICBUaGFua3MuDQoNCj4gDQo+PiArCXJj ID0geGZzX3RyYW5zX2FsbG9jX2VtcHR5KG1wLCAmdHApOw0KPj4gKwlpZiAocmMpDQo+PiArCQly ZXR1cm4gcmM7DQo+PiArDQo+PiArCXJjID0geGZzX2FsbG9jX3JlYWRfYWdmKG1wLCB0cCwgYWdu bywgMCwgJmFnZl9icCk7DQo+PiArCWlmIChyYykNCj4+ICsJCXJldHVybiByYzsNCj4+ICsNCj4+ ICsJY3VyID0geGZzX3JtYXBidF9pbml0X2N1cnNvcihtcCwgdHAsIGFnZl9icCwgYWdubyk7DQo+ PiArDQo+PiArCS8qIENvbnN0cnVjdCBhIHJhbmdlIGZvciBybWFwIHF1ZXJ5ICovDQo+PiArCW1l bXNldCgmcm1hcF9sb3csIDAsIHNpemVvZihybWFwX2xvdykpOw0KPj4gKwltZW1zZXQoJnJtYXBf aGlnaCwgMHhGRiwgc2l6ZW9mKHJtYXBfaGlnaCkpOw0KPj4gKwlybWFwX2xvdy5ybV9zdGFydGJs b2NrID0gcm1hcF9oaWdoLnJtX3N0YXJ0YmxvY2sgPSBhZ2JubzsNCj4+ICsJcm1hcF9sb3cucm1f YmxvY2tjb3VudCA9IHJtYXBfaGlnaC5ybV9ibG9ja2NvdW50ID0gYmM7DQo+PiArDQo+PiArCXJj ID0geGZzX3JtYXBfcXVlcnlfcmFuZ2UoY3VyLCAmcm1hcF9sb3csICZybWFwX2hpZ2gsIHhmc19j b3JydXB0X2hlbHBlciwgZGF0YSk7DQo+PiArCWlmIChyYyA9PSAtRUNBTkNFTEVEKQ0KPj4gKwkJ cmMgPSAwOw0KPiANCj4gSSBkb24ndCB0aGluayBhbnl0aGluZyByZXR1cm5zIEVDQU5DRUxFRCBo ZXJlLi4uDQoNClllcy4gIFdpbGwgcmVtb3ZlIGl0Lg0KDQoNCi0tDQpUaGFua3MsDQpSdWFuIFNo aXlhbmcuDQo+IA0KPiAtLUQNCj4gDQo+PiArCWlmIChyYyA9PSAtRUZTQ09SUlVQVEVEKQ0KPj4g KwkJeGZzX2ZvcmNlX3NodXRkb3duKG1wLCBTSFVURE9XTl9DT1JSVVBUX01FVEEpOw0KPj4gKw0K Pj4gKwl4ZnNfYnRyZWVfZGVsX2N1cnNvcihjdXIsIHJjKTsNCj4+ICsJeGZzX3RyYW5zX2JyZWxz ZSh0cCwgYWdmX2JwKTsNCj4+ICsJcmV0dXJuIHJjOw0KPj4gK30NCj4+ICsNCj4+ICAgc3RhdGlj IGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHhmc19zdXBlcl9vcGVyYXRpb25zID0gew0K Pj4gICAJLmFsbG9jX2lub2RlCQk9IHhmc19mc19hbGxvY19pbm9kZSwNCj4+ICAgCS5kZXN0cm95 X2lub2RlCQk9IHhmc19mc19kZXN0cm95X2lub2RlLA0KPj4gQEAgLTExMTYsNiArMTIwOCw3IEBA IHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB4ZnNfc3VwZXJfb3BlcmF0aW9u cyA9IHsNCj4+ICAgCS5zaG93X29wdGlvbnMJCT0geGZzX2ZzX3Nob3dfb3B0aW9ucywNCj4+ICAg CS5ucl9jYWNoZWRfb2JqZWN0cwk9IHhmc19mc19ucl9jYWNoZWRfb2JqZWN0cywNCj4+ICAgCS5m cmVlX2NhY2hlZF9vYmplY3RzCT0geGZzX2ZzX2ZyZWVfY2FjaGVkX29iamVjdHMsDQo+PiArCS5j b3JydXB0ZWRfcmFuZ2UJPSB4ZnNfZnNfY29ycnVwdGVkX3JhbmdlLA0KPj4gICB9Ow0KPj4gICAN Cj4+ICAgc3RhdGljIGludA0KPj4gLS0gDQo+PiAyLjI5LjINCj4+DQo+Pg0KPj4NCj4gDQo+IA0K DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1u dmRpbW0gbWFpbGluZyBsaXN0IC0tIGxpbnV4LW52ZGltbUBsaXN0cy4wMS5vcmcKVG8gdW5zdWJz Y3JpYmUgc2VuZCBhbiBlbWFpbCB0byBsaW51eC1udmRpbW0tbGVhdmVAbGlzdHMuMDEub3JnCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F228AC2BBD5 for ; Fri, 18 Dec 2020 02:35:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CF9CE23A6C for ; Fri, 18 Dec 2020 02:35:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731959AbgLRCev (ORCPT ); Thu, 17 Dec 2020 21:34:51 -0500 Received: from mail.cn.fujitsu.com ([183.91.158.132]:62003 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727148AbgLRCev (ORCPT ); Thu, 17 Dec 2020 21:34:51 -0500 X-IronPort-AV: E=Sophos;i="5.78,428,1599494400"; d="scan'208";a="102693910" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 18 Dec 2020 10:33:50 +0800 Received: from G08CNEXMBPEKD05.g08.fujitsu.local (unknown [10.167.33.204]) by cn.fujitsu.com (Postfix) with ESMTP id ED9DA4CE601B; Fri, 18 Dec 2020 10:33:47 +0800 (CST) Received: from irides.mr (10.167.225.141) by G08CNEXMBPEKD05.g08.fujitsu.local (10.167.33.204) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 18 Dec 2020 10:33:47 +0800 Subject: Re: [RFC PATCH v3 9/9] xfs: Implement ->corrupted_range() for XFS To: "Darrick J. Wong" CC: , , , , , , , , , , , , References: <20201215121414.253660-1-ruansy.fnst@cn.fujitsu.com> <20201215121414.253660-10-ruansy.fnst@cn.fujitsu.com> <20201215204032.GA6918@magnolia> From: Ruan Shiyang Message-ID: Date: Fri, 18 Dec 2020 10:31:56 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.5.1 MIME-Version: 1.0 In-Reply-To: <20201215204032.GA6918@magnolia> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-Originating-IP: [10.167.225.141] X-ClientProxiedBy: G08CNEXCHPEKD06.g08.fujitsu.local (10.167.33.205) To G08CNEXMBPEKD05.g08.fujitsu.local (10.167.33.204) X-yoursite-MailScanner-ID: ED9DA4CE601B.A0131 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: ruansy.fnst@cn.fujitsu.com Precedence: bulk List-ID: X-Mailing-List: linux-raid@vger.kernel.org On 2020/12/16 上午4:40, Darrick J. Wong wrote: > On Tue, Dec 15, 2020 at 08:14:14PM +0800, Shiyang Ruan wrote: >> This function is used to handle errors which may cause data lost in >> filesystem. Such as memory failure in fsdax mode. >> >> In XFS, it requires "rmapbt" feature in order to query for files or >> metadata which associated to the corrupted data. Then we could call fs >> recover functions to try to repair the corrupted data.(did not >> implemented in this patchset) >> >> After that, the memory failure also needs to notify the processes who >> are using those files. >> >> Only support data device. Realtime device is not supported for now. >> >> Signed-off-by: Shiyang Ruan >> --- >> fs/xfs/xfs_fsops.c | 10 +++++ >> fs/xfs/xfs_mount.h | 2 + >> fs/xfs/xfs_super.c | 93 ++++++++++++++++++++++++++++++++++++++++++++++ >> 3 files changed, 105 insertions(+) >> >> diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c >> index ef1d5bb88b93..0ec1b44bfe88 100644 >> --- a/fs/xfs/xfs_fsops.c >> +++ b/fs/xfs/xfs_fsops.c >> @@ -501,6 +501,16 @@ xfs_do_force_shutdown( >> "Corruption of in-memory data detected. Shutting down filesystem"); >> if (XFS_ERRLEVEL_HIGH <= xfs_error_level) >> xfs_stack_trace(); >> + } else if (flags & SHUTDOWN_CORRUPT_META) { >> + xfs_alert_tag(mp, XFS_PTAG_SHUTDOWN_CORRUPT, >> +"Corruption of on-disk metadata detected. Shutting down filesystem"); >> + if (XFS_ERRLEVEL_HIGH <= xfs_error_level) >> + xfs_stack_trace(); >> + } else if (flags & SHUTDOWN_CORRUPT_DATA) { >> + xfs_alert_tag(mp, XFS_PTAG_SHUTDOWN_CORRUPT, >> +"Corruption of on-disk file data detected. Shutting down filesystem"); >> + if (XFS_ERRLEVEL_HIGH <= xfs_error_level) >> + xfs_stack_trace(); >> } else if (logerror) { >> xfs_alert_tag(mp, XFS_PTAG_SHUTDOWN_LOGERROR, >> "Log I/O Error Detected. Shutting down filesystem"); >> diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h >> index dfa429b77ee2..e36c07553486 100644 >> --- a/fs/xfs/xfs_mount.h >> +++ b/fs/xfs/xfs_mount.h >> @@ -274,6 +274,8 @@ void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname, >> #define SHUTDOWN_LOG_IO_ERROR 0x0002 /* write attempt to the log failed */ >> #define SHUTDOWN_FORCE_UMOUNT 0x0004 /* shutdown from a forced unmount */ >> #define SHUTDOWN_CORRUPT_INCORE 0x0008 /* corrupt in-memory data structures */ >> +#define SHUTDOWN_CORRUPT_META 0x0010 /* corrupt metadata on device */ >> +#define SHUTDOWN_CORRUPT_DATA 0x0020 /* corrupt file data on device */ > > This symbol isn't used anywhere. I don't know why we'd shut down the fs > for data loss, as we don't do that anywhere else in xfs. I prepared this flag for the later use if possible. But since it seems unnecessary, I will remove it in the next version. > >> >> /* >> * Flags for xfs_mountfs >> diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c >> index e3e229e52512..30202de7e89d 100644 >> --- a/fs/xfs/xfs_super.c >> +++ b/fs/xfs/xfs_super.c >> @@ -35,6 +35,11 @@ >> #include "xfs_refcount_item.h" >> #include "xfs_bmap_item.h" >> #include "xfs_reflink.h" >> +#include "xfs_alloc.h" >> +#include "xfs_rmap.h" >> +#include "xfs_rmap_btree.h" >> +#include "xfs_rtalloc.h" >> +#include "xfs_bit.h" >> >> #include >> #include >> @@ -1103,6 +1108,93 @@ xfs_fs_free_cached_objects( >> return xfs_reclaim_inodes_nr(XFS_M(sb), sc->nr_to_scan); >> } >> >> +static int >> +xfs_corrupt_helper( >> + struct xfs_btree_cur *cur, >> + struct xfs_rmap_irec *rec, >> + void *data) >> +{ >> + struct xfs_inode *ip; >> + int rc = 0; > > Note: we usually use the name "error", not "rc". OK. > >> + int *flags = data; >> + >> + if (XFS_RMAP_NON_INODE_OWNER(rec->rm_owner)) { > > There are a few more things to check here to detect if metadata has been > lost. The first is that any loss in the extended attribute information > is considered filesystem metadata; and the second is that loss of an > extent btree block is also metadata. > > IOWs, this check should be: > > if (XFS_RMAP_NON_INODE_OWNER(rec->rm_owner) || > (rec->rm_flags & (XFS_RMAP_ATTR_FORK | XFS_RMAP_BMBT_BLOCK))) { > // TODO check and try to fix metadata > return -EFSCORRUPTED; > } Thanks for pointing out. > >> + // TODO check and try to fix metadata >> + rc = -EFSCORRUPTED; >> + } else { >> + /* >> + * Get files that incore, filter out others that are not in use. >> + */ >> + rc = xfs_iget(cur->bc_mp, cur->bc_tp, rec->rm_owner, >> + XFS_IGET_INCORE, 0, &ip); >> + if (rc || !ip) >> + return rc; >> + if (!VFS_I(ip)->i_mapping) >> + goto out; >> + >> + if (IS_DAX(VFS_I(ip))) >> + rc = mf_dax_mapping_kill_procs(VFS_I(ip)->i_mapping, >> + rec->rm_offset, *flags); > > If the file isn't S_DAX, should we call mapping_set_error here so > that the next fsync() will also return EIO? Nice idea. I will try. > >> + >> + // TODO try to fix data >> +out: >> + xfs_irele(ip); >> + } >> + >> + return rc; >> +} >> + >> +static int >> +xfs_fs_corrupted_range( >> + struct super_block *sb, >> + struct block_device *bdev, >> + loff_t offset, >> + size_t len, >> + void *data) >> +{ >> + struct xfs_mount *mp = XFS_M(sb); >> + struct xfs_trans *tp = NULL; >> + struct xfs_btree_cur *cur = NULL; >> + struct xfs_rmap_irec rmap_low, rmap_high; >> + struct xfs_buf *agf_bp = NULL; >> + xfs_fsblock_t fsbno = XFS_B_TO_FSB(mp, offset); >> + xfs_filblks_t bc = XFS_B_TO_FSB(mp, len); >> + xfs_agnumber_t agno = XFS_FSB_TO_AGNO(mp, fsbno); >> + xfs_agblock_t agbno = XFS_FSB_TO_AGBNO(mp, fsbno); >> + int rc = 0; >> + >> + if (mp->m_rtdev_targp && mp->m_rtdev_targp->bt_bdev == bdev) { >> + xfs_warn(mp, "storage lost support not available for realtime device!"); >> + return 0; >> + } > > This ought to kill the fs when an external log device is configured: > > if (mp->m_logdev_targp && > mp->m_logdev_targp != mp->m_ddev_targp && > mp->m_logdev_targp->bt_bdev == bdev) { > xfs_error(mp, "ondisk log corrupt, shutting down fs!"); > xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_META); > return 0; > } > > Then, we need to check explicitly for rmap support: > > if (!xfs_sb_version_hasrmapbt(&mp->m_sb)) > return 0; > > so that we screen out filesystems that don't have rmap enabled. Ah... I was too negligent to think of this. That's very thoughtful of you. Thanks. > >> + rc = xfs_trans_alloc_empty(mp, &tp); >> + if (rc) >> + return rc; >> + >> + rc = xfs_alloc_read_agf(mp, tp, agno, 0, &agf_bp); >> + if (rc) >> + return rc; >> + >> + cur = xfs_rmapbt_init_cursor(mp, tp, agf_bp, agno); >> + >> + /* Construct a range for rmap query */ >> + memset(&rmap_low, 0, sizeof(rmap_low)); >> + memset(&rmap_high, 0xFF, sizeof(rmap_high)); >> + rmap_low.rm_startblock = rmap_high.rm_startblock = agbno; >> + rmap_low.rm_blockcount = rmap_high.rm_blockcount = bc; >> + >> + rc = xfs_rmap_query_range(cur, &rmap_low, &rmap_high, xfs_corrupt_helper, data); >> + if (rc == -ECANCELED) >> + rc = 0; > > I don't think anything returns ECANCELED here... Yes. Will remove it. -- Thanks, Ruan Shiyang. > > --D > >> + if (rc == -EFSCORRUPTED) >> + xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_META); >> + >> + xfs_btree_del_cursor(cur, rc); >> + xfs_trans_brelse(tp, agf_bp); >> + return rc; >> +} >> + >> static const struct super_operations xfs_super_operations = { >> .alloc_inode = xfs_fs_alloc_inode, >> .destroy_inode = xfs_fs_destroy_inode, >> @@ -1116,6 +1208,7 @@ static const struct super_operations xfs_super_operations = { >> .show_options = xfs_fs_show_options, >> .nr_cached_objects = xfs_fs_nr_cached_objects, >> .free_cached_objects = xfs_fs_free_cached_objects, >> + .corrupted_range = xfs_fs_corrupted_range, >> }; >> >> static int >> -- >> 2.29.2 >> >> >> > >