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=-10.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_2 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 96096C4338F for ; Mon, 16 Aug 2021 13:44:53 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 2938363282 for ; Mon, 16 Aug 2021 13:44:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 2938363282 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Lop3KLT/GWFnJi2KOCRr039GatcNA07svAr8p3by19k=; b=2AIpBsDrHS5Mw0 ThwMuO2x/ZRNPb1pDvXe2O5ZczC/MkHjojOhF6Lb9BFBAZfaGoT8z+9I7wyDBErUCa8C6tl1Zjnd5 uXaecLCDy/ajdPXU2HvmvIQ63gpk3UYvetmpkNQoFus3a31pNX7oVb4RwXqT/n1tmrnIixmFpkApj PUJgIZ0gCm54Q7Gh3ukX5L7N2rroP7mvi5ffED1OcN6WDG7+s3Sv/wDOoG5sbivPqpv4nUUac9VSq AnXwsl/tO03dIRB8Dz7YKQ1qPnux0TTpzhaX6INW8oxZJW333wJc/3xhTIEoYP1wDfOEOpeHyiJUr XNsezydHZti6yA8Jy15g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mFcuH-00HA4m-94; Mon, 16 Aug 2021 13:44:01 +0000 Received: from relay10.mail.gandi.net ([217.70.178.230]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mFcuD-00HA3b-NS for linux-mtd@lists.infradead.org; Mon, 16 Aug 2021 13:44:00 +0000 Received: (Authenticated sender: miquel.raynal@bootlin.com) by relay10.mail.gandi.net (Postfix) with ESMTPSA id D145B240004; Mon, 16 Aug 2021 13:43:53 +0000 (UTC) Date: Mon, 16 Aug 2021 15:43:52 +0200 From: Miquel Raynal To: Zhihao Cheng Cc: , , , , , Subject: Re: [PATCH 1/2] mtd: mtdconcat: Judge callback function existence getting from master for each partition Message-ID: <20210816154352.54237a67@xps13> In-Reply-To: <9955e32c-615a-f02c-abc3-a7b613bf34ee@huawei.com> References: <20210731023243.3977104-1-chengzhihao1@huawei.com> <20210731023243.3977104-2-chengzhihao1@huawei.com> <20210806212857.240e0c1f@xps13> <27c67e42-f275-fc50-64e5-d80233130f7e@huawei.com> <20210807123243.7661e4e3@xps13> <9955e32c-615a-f02c-abc3-a7b613bf34ee@huawei.com> Organization: Bootlin X-Mailer: Claws Mail 3.17.7 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210816_064358_064703_EE3BE6EA X-CRM114-Status: GOOD ( 28.94 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SGkgWmhpaGFvLAoKWmhpaGFvIENoZW5nIDxjaGVuZ3poaWhhbzFAaHVhd2VpLmNvbT4gd3JvdGUg b24gVHVlLCAxMCBBdWcgMjAyMQoxOTozNTowMiArMDgwMDoKCj4g5ZyoIDIwMjEvOC83IDE4OjMy LCBNaXF1ZWwgUmF5bmFsIOWGmemBkzoKPiBIaSBNaXF1ZWwsCj4gPiBIaSBaaGloYW8sCj4gPgo+ ID4gWmhpaGFvIENoZW5nIDxjaGVuZ3poaWhhbzFAaHVhd2VpLmNvbT4gd3JvdGUgb24gU2F0LCA3 IEF1ZyAyMDIxCj4gPiAxMDoxNTo0NiArMDgwMDoKPiA+ICAKPiA+PiDlnKggMjAyMS84LzcgMzoy OCwgTWlxdWVsIFJheW5hbCDlhpnpgZM6Cj4gPj4gSGkgTWlxdWVsLCAgCj4gPj4+IEhpIFpoaWhh bywKPiA+Pj4KPiA+Pj4gWmhpaGFvIENoZW5nIDxjaGVuZ3poaWhhbzFAaHVhd2VpLmNvbT4gd3Jv dGUgb24gU2F0LCAzMSBKdWwgMjAyMQo+ID4+PiAxMDozMjo0MiArMDgwMDoKPiA+Pj4gQEAgLTcy MSwxNCArNzI0LDE1IEBAIHN0cnVjdCBtdGRfaW5mbyAqbXRkX2NvbmNhdF9jcmVhdGUoc3RydWN0 IG10ZF9pbmZvICpzdWJkZXZbXSwJLyogc3ViZGV2aWNlcyB0byBjCj4gPj4+ICAgIAkJCQkgICAg c3ViZGV2W2ldLT5mbGFncyAmIE1URF9XUklURUFCTEU7Cj4gPj4+ICAgIAkJfSAgCj4gPj4+ICAg ID4gKwkJc3ViZGV2X21hc3RlciA9IG10ZF9nZXRfbWFzdGVyKHN1YmRldltpXSk7ICAKPiA+Pj4g ICAgCQljb25jYXQtPm10ZC5zaXplICs9IHN1YmRldltpXS0+c2l6ZTsKPiA+Pj4gICAgCQljb25j YXQtPm10ZC5lY2Nfc3RhdHMuYmFkYmxvY2tzICs9Cj4gPj4+ICAgIAkJCXN1YmRldltpXS0+ZWNj X3N0YXRzLmJhZGJsb2NrczsKPiA+Pj4gICAgCQlpZiAoY29uY2F0LT5tdGQud3JpdGVzaXplICAg IT0gIHN1YmRldltpXS0+d3JpdGVzaXplIHx8Cj4gPj4+ICAgIAkJICAgIGNvbmNhdC0+bXRkLnN1 YnBhZ2Vfc2Z0ICE9IHN1YmRldltpXS0+c3VicGFnZV9zZnQgfHwKPiA+Pj4gICAgCQkgICAgY29u Y2F0LT5tdGQub29ic2l6ZSAgICAhPSAgc3ViZGV2W2ldLT5vb2JzaXplIHx8Cj4gPj4+IC0JCSAg ICAhY29uY2F0LT5tdGQuX3JlYWRfb29iICAhPSAhc3ViZGV2W2ldLT5fcmVhZF9vb2IgfHwKPiA+ Pj4gLQkJICAgICFjb25jYXQtPm10ZC5fd3JpdGVfb29iICE9ICFzdWJkZXZbaV0tPl93cml0ZV9v b2IpIHsKPiA+Pj4gKwkJICAgICFjb25jYXQtPm10ZC5fcmVhZF9vb2IgICE9ICFzdWJkZXZfbWFz dGVyLT5fcmVhZF9vb2IgfHwKPiA+Pj4gKwkJICAgICFjb25jYXQtPm10ZC5fd3JpdGVfb29iICE9 ICFzdWJkZXZfbWFzdGVyLT5fd3JpdGVfb29iKSB7Cj4gPj4+IERvIHlvdSByZWFsbHkgbmVlZCB0 aGlzIGNoYW5nZT8gIAo+ID4+IEkgdGhpbmsgYm90aCAiIWNvbmNhdC0+bXRkLl9yZWFkX29vYiAh PSAhc3ViZGV2W2ldLT5fcmVhZF9vb2IiIGFuZCAiIWNvbmNhdC0+bXRkLl93cml0ZV9vb2IgIT0g IXN1YmRldltpXS0+X3dyaXRlX29vYiIgbmVlZCB0byBiZSBtb2RpZmllZCBvdGhlcndpc2UgY29u Y2F0ZW5hdGluZyBnb2VzIGZhaWx1cmUuCj4gPj4KPiA+PiBJIHRob3VnaHQgdGhlcmUgZXhpc3Rz IHR3byBwcm9ibGVtczoKPiA+Pgo+ID4+ICAgwqAgMS4gV3JvbmcgY2FsbGJhY2sgZmV0Y2hpbmcg aW4gbXRkIHBhcnRpdGlvbiBkZXZpY2UKPiA+Pgo+ID4+ICAgwqAgMi4gV2FybmluZyBmb3IgZXhp c3RlbmNlIG9mIF9yZWFkIGFuZCBfcmVhZF9vb2IgYXQgdGhlIHNhbWUgdGltZQo+ID4+Cj4gPj4g c28gSSBzb2x2ZWQgdGhlbSBpbiB0d28gc3RlcHMgdG8gbWFrZSBoaXN0b3J5IGNvbW1pdCBsb2dz IGEgYml0IGNsZWFyLgo+ID4+Cj4gPj4gVGhvdWdoIHRoZXNlIHR3byBwYXRjaGVzIGNhbiBiZSBj b21iaW5lZCB0byBvbmUuICAKPiA+IE5vIHBsZWFzZSBrZWVwIHRoZSBzcGxpdC4KPiA+Cj4gPiBX aGF0IEkgbWVhbiBoZXJlIGlzIHRoYXQgSSBkb24ndCB0aGluayB5b3VyIGZpeCBpcyB2YWxpZC4g TWF5YmUgd2UKPiA+IHNob3VsZCBwcm9wYWdhdGUgdGhlc2UgY2FsbGJhY2tzIGFzIHdlbGwgaW5z dGVhZCBvZiB0cnlpbmcgdG8gaGFjayBpbnRvCj4gPiB0aGlzIGNvbmRpdGlvbi4gSSBkb24ndCBz ZWUgd2h5IHlvdSBzaG91bGQgY2hlY2sgYWdhaW5zdCBzdWJkZXZbaV0gZm9yCj4gPiBoYWxmIG9m IHRoZSBjYWxsYmFja3MgYW5kIGNoZWNrIGZvciBzdWJkZXZfbWFzdGVyIGZvciB0aGUgbGFzdCB0 d28uICAKPiAKPiBJIGhhdmUgdGhlIGZvbGxvd2luZyB1bmRlcnN0YW5kaW5nIG9mIG10ZDoKPiAK PiAxLiBUaGUgZXhpc3RlbmNlIG9mIG10ZCBwYXJ0aXRpb24gZGV2aWNlJ3MgY2FsbGJhY2tzKHdo YXQgY2FuIG10ZCBkbywgX3JlYWQsIF93cml0ZSwgX3JlYWRfb29iLCBldGMuKSBpcyBkZWNpZGVk IGJ5IG10ZCBtYXN0ZXIgZGV2aWNlLiBBbGwgbXRkIGNvbW1vbiBmdW5jdGlvbnMgKG10ZF9yZWFk LCBtdGRfcmVhZF9vb2IpIHBhc3MgbWFzdGVyIG10ZCBkZXZpY2UgcmF0aGVyIHRoYW4gcGFydGl0 aW9uIG10ZCBkZXZpY2UgYXMgcGFyYW1ldGVyLCBiZWNhdXNlIG5hbmRfY2hpcChpbml0aWFsaXpl ZCBhcyBtYXN0ZXIgbXRkIGRldmljZSkgcHJvY2VzcyByZXF1ZXN0cy7CoCBTbyB0aGVyZSBhcmUg dHdvIHN0ZXBzIGluIG10ZCBjb21tb24gZnVuY3Rpb246IGZldGNoIG1hc3RlciBtdGQgZGV2aWNl OyBpbnZva2UgbWFzdGVyIG10ZCBkZXZpY2VzJ3MgY2FsbGJhY2sgYW5kIHBhc3MgaW4gbWFzdGVy IG10ZCBkZXZpY2UuCj4gCj4gIMKgIFByb3BvZ2F0aW5nIGNhbGxiYWNrcyB0byBwYXJ0aXRpb24g bXRkIGRldmljZSBtYXkgYnJpbmcgc29tZSBpbXBlcmZlY3Rpb25zOgo+IAo+ICDCoCBBLiBObyBh ZGFwdGlvbnMgdG8gbXRkIGNvbW1vbiBmdW5jdGlvbnM6IHBhcnRpdGlvbiBtdGQgZGV2aWNlJ3Mg Y2FsbGJhY2tzIHdpbGwgbmV2ZXIgYmUgaW52b2tlZCwgdGhleSBhcmUgb25seSB1c2VkIHRvIGp1 ZGdlIHdoZXRoZXIgYXNzaWdpbiBjb25jYXRlbmF0ZWQgZGV2aWNlJ3MgY2FsbGJhY2sgd2hpbGUg Y29uY2F0ZW5hdGluZy4gTG9va3Mgd2VpcmQuCj4gCj4gIMKgIEBAIC04Niw2ICs4Niw2MSBAQCBz dGF0aWMgc3RydWN0IG10ZF9pbmZvICphbGxvY2F0ZV9wYXJ0aXRpb24oc3RydWN0IG10ZF9pbmZv ICpwYXJlbnQsCj4gIMKgwqDCoMKgwqDCoMKgIGNoaWxkLT5wYXJ0Lm9mZnNldCA9IHBhcnQtPm9m ZnNldDsKPiAgwqDCoMKgwqDCoMKgwqAgSU5JVF9MSVNUX0hFQUQoJmNoaWxkLT5wYXJ0aXRpb25z KTsKPiAKPiArwqDCoMKgwqDCoMKgIGlmIChwYXJlbnQtPl9yZWFkKQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGNoaWxkLT5fcmVhZCA9IHBhcmVudC0+X3JlYWQ7Cj4gK8KgwqDCoMKg wqDCoCBpZiAocGFyZW50LT5fd3JpdGUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y2hpbGQtPl93cml0ZSA9IHBhcmVudC0+X3dyaXRlOwo+IFsuLi5dCj4gK8KgwqDCoMKgwqDCoCBp ZiAocGFyZW50LT5fcmVhZF9vb2IpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2hp bGQtPl9yZWFkX29vYiA9IHBhcmVudC0+X3JlYWRfb29iOwo+ICvCoMKgwqDCoMKgwqAgaWYgKHBh cmVudC0+X3dyaXRlX29vYikKPiAKPiAKPiAgwqAgQi4gUmUtaW1wb3J0IHJlbW92ZWQgcGFydGl0 aW9uIG10ZCBkZXZpY2UncyBjYWxsYmFja3MgYW5kIGFkYXB0IG10ZCBjb21tb24gZnVuY3Rpb25z OiBDdXJyZW50IGltcGxlbWVudGlvbiBpcyBzaW1wbGllciB0aGFuIHRoZSB2ZXJzaW9uIGJlZm9y ZSA0NmI1ODg5Y2MyYzU0KCJtdGQ6IGltcGxlbWVudCBwcm9wZXIgcGFydGl0aW9uIGhhbmRsaW5n IikuIEFkYXB0aW5nIG10ZCBjb21tb24gZnVuY3Rpb25zIGlzIGEgcmlza3kgdGhpbmcsIHdoaWNo IGNvdWxkIGVmZmVjdCBvdGhlciBtb2R1bGVzLCBzaG91bGQgd2UgZG8gdGhhdD8KPiAKPiArc3Rh dGljIGludCBwYXJ0X3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXpl X3QgbGVuLAo+ICvCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90ICpyZXRsZW4sIHVf Y2hhciAqYnVmKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBt dGRfdG9fcGFydChtdGQpOwo+ICvCoMKgwqDCoMKgwqAgc3RydWN0IG10ZF9lY2Nfc3RhdHMgc3Rh dHM7Cj4gK8KgwqDCoMKgwqDCoCBpbnQgcmVzOwo+ICsKPiArIMKgwqDCoMKgIHN0YXRzID0gcGFy dC0+cGFyZW50LT5lY2Nfc3RhdHM7Cj4gK8KgwqDCoMKgwqDCoCByZXMgPSBwYXJ0LT5wYXJlbnQt Pl9yZWFkKHBhcnQtPnBhcmVudCwgZnJvbSArIHBhcnQtPm9mZnNldCwgbGVuLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldGxlbiwgYnVmKTsKPiArwqDCoMKgwqDCoMKgIGlmICh1bmxpa2VseShtdGRfaXNfZWNjZXJy KHJlcykpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG10ZC0+ZWNjX3N0YXRzLmZh aWxlZCArPQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBw YXJ0LT5wYXJlbnQtPmVjY19zdGF0cy5mYWlsZWQgLSBzdGF0cy5mYWlsZWQ7Cj4gK8KgwqDCoMKg wqDCoCBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbXRkLT5lY2Nfc3RhdHMu Y29ycmVjdGVkICs9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHBhcnQtPnBhcmVudC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCAtIHN0YXRzLmNvcnJlY3RlZDsK PiArwqDCoMKgwqDCoMKgIHJldHVybiByZXM7Cj4gK30KPiAKPiAgwqBzdGF0aWMgaW50IG10ZF9y ZWFkX29vYl9zdGQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAo+ICDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IG10 ZF9vb2Jfb3BzICpvcHMpCj4gIMKgewo+IC3CoMKgwqDCoMKgwqAgc3RydWN0IG10ZF9pbmZvICpt YXN0ZXIgPSBtdGRfZ2V0X21hc3RlcihtdGQpOwo+ICDCoMKgwqDCoMKgwqDCoCBpbnQgcmV0Owo+ IAo+IC3CoMKgwqDCoMKgwqAgZnJvbSA9IG10ZF9nZXRfbWFzdGVyX29mcyhtdGQsIGZyb20pOwo+ IC3CoMKgwqDCoMKgwqAgaWYgKG1hc3Rlci0+X3JlYWRfb29iKQo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldCA9IG1hc3Rlci0+X3JlYWRfb29iKG1hc3RlciwgZnJvbSwgb3BzKTsK PiArwqDCoMKgwqDCoMKgIGlmIChtdGQtPl9yZWFkX29vYikKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXQgPSBtdGQtPl9yZWFkX29vYihtdGQsIGZyb20sIG9wcyk7Cj4gIMKgwqDC oMKgwqDCoMKgIGVsc2UKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBtYXN0 ZXItPl9yZWFkKG1hc3RlciwgZnJvbSwgb3BzLT5sZW4sICZvcHMtPnJldGxlbiwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBtdGQtPl9yZWFkKG10ZCwgZnJvbSwgb3BzLT5s ZW4sICZvcHMtPnJldGxlbiwKPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcHMtPmRhdGJ1Zik7Cj4gCj4gCj4g Mi4gQ2hlY2tpbmcgYWdhaW5zdCBzdWJkZXZbaV0gZm9yIGRhdGEgbWVtYmVycyBhbmQgY2hlY2sg YWdhaW5zdCBzdWJkZXZfbWFzdGVyIGZvciB0aGUgY2FsbGJhY2tzIGxvb2tzIHdlaXJkLiBJIG1v ZGlmaWVkIGl0IGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgcGFydGl0aW9uIG10ZCBkZXZp Y2UnIGNhbGxiYWNrcyBpbmhlcml0IGZyb20gbWFzdGVyIG10ZCBkZXZpY2UgYnV0IGRhdGEgbWVt YmVycyhuYW1lLCBzaXplKSBtYXkgbm90LiBNYXliZSBJIHNob3VsZCBhZGQgc29tZSBjb21tZW50 IHRvIGV4cGxhaW4gd2h5IGNoZWNraW5nIGFnYWluc3Qgc3ViZGV2W2ldIGZvciBkYXRhIG1lbWJl cnMgYW5kIGNoZWNraW5nIGFnYWluc3Qgc3ViZGV2X21hc3RlciBmb3IgdGhlIGNhbGxiYWNrcy4K PiAKPiAKPiBTbywgd2hpY2ggbWV0aG9kIGlzIGJldHRlcj8gQW55IG90aGVyIG1ldGhvZD8KPiAK Ckkgc2VlIHlvdXIgcG9pbnQsIGFjdHVhbGx5IG15IGNvbmNlcm4gd2FzIGFib3V0IGNoZWNraW5n IGhhbGYgb2YgdGhlCipjYWxsYmFja3MqIGZyb20gYSBwYXJ0aWN1bGFyIGRldmljZSwgYW5kIHRo ZSBvdGhlciBoYWxmIGZyb20gYW5vdGhlcgpkZXZpY2UgKGVnLiB0aGUgbWFzdGVyKSBidXQgYXMg eW91IHN0YXRlZCBpdCBoZXJlLCB3ZSBjaGVjayB0aGUKY2FsbGJhY2tzIG9mIHRoZSBtYXN0ZXIg YnV0IHRoZSAiZGF0YSBtZW1iZXJzIiBhcyB5b3UgY2FsbCB0aGVtIGZyb20KdGhlIHN1YmRldmlj ZSwgd2hpY2ggSSB0aGluayBpcyBmaW5lLiBTbyBJIGd1ZXNzIEknbGwgdGFrZSB0aGVzZQpjaGFu Z2VzIGFzIHRoZXkgY3VycmVudGx5IGFyZS4KClRoYW5rcywKTWlxdcOobAoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4IE1URCBkaXNj dXNzaW9uIG1haWxpbmcgbGlzdApodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2xpbnV4LW10ZC8K 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=-10.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_2 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 C9428C432BE for ; Mon, 16 Aug 2021 13:44:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B2196632CC for ; Mon, 16 Aug 2021 13:44:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237389AbhHPNoh convert rfc822-to-8bit (ORCPT ); Mon, 16 Aug 2021 09:44:37 -0400 Received: from relay10.mail.gandi.net ([217.70.178.230]:34077 "EHLO relay10.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239572AbhHPNo1 (ORCPT ); Mon, 16 Aug 2021 09:44:27 -0400 Received: (Authenticated sender: miquel.raynal@bootlin.com) by relay10.mail.gandi.net (Postfix) with ESMTPSA id D145B240004; Mon, 16 Aug 2021 13:43:53 +0000 (UTC) Date: Mon, 16 Aug 2021 15:43:52 +0200 From: Miquel Raynal To: Zhihao Cheng Cc: , , , , , Subject: Re: [PATCH 1/2] mtd: mtdconcat: Judge callback function existence getting from master for each partition Message-ID: <20210816154352.54237a67@xps13> In-Reply-To: <9955e32c-615a-f02c-abc3-a7b613bf34ee@huawei.com> References: <20210731023243.3977104-1-chengzhihao1@huawei.com> <20210731023243.3977104-2-chengzhihao1@huawei.com> <20210806212857.240e0c1f@xps13> <27c67e42-f275-fc50-64e5-d80233130f7e@huawei.com> <20210807123243.7661e4e3@xps13> <9955e32c-615a-f02c-abc3-a7b613bf34ee@huawei.com> Organization: Bootlin X-Mailer: Claws Mail 3.17.7 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Zhihao, Zhihao Cheng wrote on Tue, 10 Aug 2021 19:35:02 +0800: > 在 2021/8/7 18:32, Miquel Raynal 写道: > Hi Miquel, > > Hi Zhihao, > > > > Zhihao Cheng wrote on Sat, 7 Aug 2021 > > 10:15:46 +0800: > > > >> 在 2021/8/7 3:28, Miquel Raynal 写道: > >> Hi Miquel, > >>> Hi Zhihao, > >>> > >>> Zhihao Cheng wrote on Sat, 31 Jul 2021 > >>> 10:32:42 +0800: > >>> @@ -721,14 +724,15 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to c > >>> subdev[i]->flags & MTD_WRITEABLE; > >>> } > >>> > + subdev_master = mtd_get_master(subdev[i]); > >>> concat->mtd.size += subdev[i]->size; > >>> concat->mtd.ecc_stats.badblocks += > >>> subdev[i]->ecc_stats.badblocks; > >>> if (concat->mtd.writesize != subdev[i]->writesize || > >>> concat->mtd.subpage_sft != subdev[i]->subpage_sft || > >>> concat->mtd.oobsize != subdev[i]->oobsize || > >>> - !concat->mtd._read_oob != !subdev[i]->_read_oob || > >>> - !concat->mtd._write_oob != !subdev[i]->_write_oob) { > >>> + !concat->mtd._read_oob != !subdev_master->_read_oob || > >>> + !concat->mtd._write_oob != !subdev_master->_write_oob) { > >>> Do you really need this change? > >> I think both "!concat->mtd._read_oob != !subdev[i]->_read_oob" and "!concat->mtd._write_oob != !subdev[i]->_write_oob" need to be modified otherwise concatenating goes failure. > >> > >> I thought there exists two problems: > >> > >>   1. Wrong callback fetching in mtd partition device > >> > >>   2. Warning for existence of _read and _read_oob at the same time > >> > >> so I solved them in two steps to make history commit logs a bit clear. > >> > >> Though these two patches can be combined to one. > > No please keep the split. > > > > What I mean here is that I don't think your fix is valid. Maybe we > > should propagate these callbacks as well instead of trying to hack into > > this condition. I don't see why you should check against subdev[i] for > > half of the callbacks and check for subdev_master for the last two. > > I have the following understanding of mtd: > > 1. The existence of mtd partition device's callbacks(what can mtd do, _read, _write, _read_oob, etc.) is decided by mtd master device. All mtd common functions (mtd_read, mtd_read_oob) pass master mtd device rather than partition mtd device as parameter, because nand_chip(initialized as master mtd device) process requests.  So there are two steps in mtd common function: fetch master mtd device; invoke master mtd devices's callback and pass in master mtd device. > >   Propogating callbacks to partition mtd device may bring some imperfections: > >   A. No adaptions to mtd common functions: partition mtd device's callbacks will never be invoked, they are only used to judge whether assigin concatenated device's callback while concatenating. Looks weird. > >   @@ -86,6 +86,61 @@ static struct mtd_info *allocate_partition(struct mtd_info *parent, >         child->part.offset = part->offset; >         INIT_LIST_HEAD(&child->partitions); > > +       if (parent->_read) > +               child->_read = parent->_read; > +       if (parent->_write) > +               child->_write = parent->_write; > [...] > +       if (parent->_read_oob) > +               child->_read_oob = parent->_read_oob; > +       if (parent->_write_oob) > > >   B. Re-import removed partition mtd device's callbacks and adapt mtd common functions: Current implemention is simplier than the version before 46b5889cc2c54("mtd: implement proper partition handling"). Adapting mtd common functions is a risky thing, which could effect other modules, should we do that? > > +static int part_read(struct mtd_info *mtd, loff_t from, size_t len, > +               size_t *retlen, u_char *buf) > +{ > +       struct mtd_part *part = mtd_to_part(mtd); > +       struct mtd_ecc_stats stats; > +       int res; > + > +      stats = part->parent->ecc_stats; > +       res = part->parent->_read(part->parent, from + part->offset, len, > +                                 retlen, buf); > +       if (unlikely(mtd_is_eccerr(res))) > +               mtd->ecc_stats.failed += > +                       part->parent->ecc_stats.failed - stats.failed; > +       else > +               mtd->ecc_stats.corrected += > +                       part->parent->ecc_stats.corrected - stats.corrected; > +       return res; > +} > >  static int mtd_read_oob_std(struct mtd_info *mtd, loff_t from, >                             struct mtd_oob_ops *ops) >  { > -       struct mtd_info *master = mtd_get_master(mtd); >         int ret; > > -       from = mtd_get_master_ofs(mtd, from); > -       if (master->_read_oob) > -               ret = master->_read_oob(master, from, ops); > +       if (mtd->_read_oob) > +               ret = mtd->_read_oob(mtd, from, ops); >         else > -               ret = master->_read(master, from, ops->len, &ops->retlen, > +               ret = mtd->_read(mtd, from, ops->len, &ops->retlen, >                                     ops->datbuf); > > > 2. Checking against subdev[i] for data members and check against subdev_master for the callbacks looks weird. I modified it based on the assumption that partition mtd device' callbacks inherit from master mtd device but data members(name, size) may not. Maybe I should add some comment to explain why checking against subdev[i] for data members and checking against subdev_master for the callbacks. > > > So, which method is better? Any other method? > I see your point, actually my concern was about checking half of the *callbacks* from a particular device, and the other half from another device (eg. the master) but as you stated it here, we check the callbacks of the master but the "data members" as you call them from the subdevice, which I think is fine. So I guess I'll take these changes as they currently are. Thanks, Miquèl