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.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, 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 E9ED2C4338F for ; Fri, 6 Aug 2021 19:27:38 +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 5BB4D61164 for ; Fri, 6 Aug 2021 19:27:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 5BB4D61164 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=s5PKRYBF18x6UfHTW3U9VD1EXnBknzd7u+2KewAWdjA=; b=ThPRmcvppCMOVP ZLtgMlhdxHGV/j9OYZw63JfF3Y/CWsznaH4aXiFkMLa1tOGTXhAR2A8FbUU6//hYstm+uk72HEElf WawMuPzhi9jyfm3+9AJh4xMtarNueNHVznIhUsVMgmVSGA4+RBG6RlN4DoKB4Z1lqDW8CNpJXkUpS 4+/g7I9NJtfnqcUKTIBtaca47S7/17JJcHerKNBrBeqYyKZvtW8b2Zecs1YpCeVRTSJ2xKp27ywm7 aQied0RQiEnU8t4h1PgUAO8dlrta2hgS8HTg5bQZhNiVrLMXboPwnBny4iRtsYfnYVkXP20an/BS2 kRgBYKWeDIR9PXLAnO/A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mC5Um-00DIIl-0k; Fri, 06 Aug 2021 19:27:04 +0000 Received: from relay3-d.mail.gandi.net ([217.70.183.195]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mC5Ui-00DIIP-Bd for linux-mtd@lists.infradead.org; Fri, 06 Aug 2021 19:27:02 +0000 Received: (Authenticated sender: miquel.raynal@bootlin.com) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 669B360005; Fri, 6 Aug 2021 19:26:56 +0000 (UTC) Date: Fri, 6 Aug 2021 21:26:55 +0200 From: Miquel Raynal To: Zhihao Cheng Cc: , , , , , Subject: Re: [PATCH 2/2] mtd: mtdconcat: Remove concat_{read|write}_oob Message-ID: <20210806212655.16e4d03d@xps13> In-Reply-To: <20210731023243.3977104-3-chengzhihao1@huawei.com> References: <20210731023243.3977104-1-chengzhihao1@huawei.com> <20210731023243.3977104-3-chengzhihao1@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-20210806_122700_699696_C3C0EE90 X-CRM114-Status: GOOD ( 24.63 ) 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 SGkgWmhpaGFvLAoKUmljaGFyZCwgYSBxdWVzdGlvbiBmb3IgeW91IGJlbG93IDopCgpaaGloYW8g Q2hlbmcgPGNoZW5nemhpaGFvMUBodWF3ZWkuY29tPiB3cm90ZSBvbiBTYXQsIDMxIEp1bCAyMDIx CjEwOjMyOjQzICswODAwOgoKPiBTaW5jZSAyNDMxYzRmNWI0NmMzKCJtdGQ6IEltcGxlbWVudCBt dGRfe3JlYWQsd3JpdGV9KCkgYXMgd3JhcHBlcnMKPiBhcm91bmQgbXRkX3tyZWFkLHdyaXRlfV9v b2IoKSIpIGRvbid0IGFsbG93IF93cml0ZXxfcmVhZCBhbmQKPiBfd3JpdGVfb29ifF9yZWFkX29v YiBleGlzdGluZyBhdCB0aGUgc2FtZSB0aW1lLiBXZSBzaG91bGQgc3RvcCB0aGVzZQo+IHR3byBj YWxsYmFjayBmdW5jdGlvbnMgYXNzaWduaW5nLCBvdGhlcndpc2UgZm9sbG93aW5nIHdhcm5pbmcg b2NjdXJzCj4gd2hpbGUgbWFraW5nIGNvbmNhdGVuYXRlZCBkZXZpY2U6Cj4gCj4gICBXQVJOSU5H OiBDUFU6IDIgUElEOiA2NzI4IGF0IGRyaXZlcnMvbXRkL210ZGNvcmUuYzo1OTUKPiAgIGFkZF9t dGRfZGV2aWNlKzB4N2YvMHg3YjAKPiAKPiBGaXhlczogMjQzMWM0ZjViNDZjMygibXRkOiBJbXBs ZW1lbnQgbXRkX3tyZWFkLHdyaXRlfSgpIGFyb3VuZCAuLi4iKQo+IFNpZ25lZC1vZmYtYnk6IFpo aWhhbyBDaGVuZyA8Y2hlbmd6aGloYW8xQGh1YXdlaS5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvbXRk L210ZGNvbmNhdC5jIHwgMTEzICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KPiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxMTIgZGVsZXRpb25zKC0pCj4g Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jIGIvZHJpdmVycy9tdGQvbXRk Y29uY2F0LmMKPiBpbmRleCBlYTEzMGVlYjU0ZDUuLjk4ZDFjNzljZjUxZCAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL210ZC9tdGRjb25jYXQuYwo+ICsrKyBiL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5j Cj4gQEAgLTI1NiwxMTAgKzI1Niw2IEBAIGNvbmNhdF93cml0ZXYoc3RydWN0IG10ZF9pbmZvICpt dGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLAo+ICAJcmV0dXJuIGVycjsKPiAgfQo+ICAKPiAt c3RhdGljIGludAo+IC1jb25jYXRfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZf dCBmcm9tLCBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKPiAtewo+IC0Jc3RydWN0IG10ZF9jb25j YXQgKmNvbmNhdCA9IENPTkNBVChtdGQpOwo+IC0Jc3RydWN0IG10ZF9vb2Jfb3BzIGRldm9wcyA9 ICpvcHM7Cj4gLQlpbnQgaSwgZXJyLCByZXQgPSAwOwo+IC0KPiAtCW9wcy0+cmV0bGVuID0gb3Bz LT5vb2JyZXRsZW4gPSAwOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBjb25jYXQtPm51bV9zdWJk ZXY7IGkrKykgewo+IC0JCXN0cnVjdCBtdGRfaW5mbyAqc3ViZGV2ID0gY29uY2F0LT5zdWJkZXZb aV07Cj4gLQo+IC0JCWlmIChmcm9tID49IHN1YmRldi0+c2l6ZSkgewo+IC0JCQlmcm9tIC09IHN1 YmRldi0+c2l6ZTsKPiAtCQkJY29udGludWU7Cj4gLQkJfQo+IC0KPiAtCQkvKiBwYXJ0aWFsIHJl YWQgPyAqLwo+IC0JCWlmIChmcm9tICsgZGV2b3BzLmxlbiA+IHN1YmRldi0+c2l6ZSkKPiAtCQkJ ZGV2b3BzLmxlbiA9IHN1YmRldi0+c2l6ZSAtIGZyb207Cj4gLQo+IC0JCWVyciA9IG10ZF9yZWFk X29vYihzdWJkZXYsIGZyb20sICZkZXZvcHMpOwo+IC0JCW9wcy0+cmV0bGVuICs9IGRldm9wcy5y ZXRsZW47Cj4gLQkJb3BzLT5vb2JyZXRsZW4gKz0gZGV2b3BzLm9vYnJldGxlbjsKPiAtCj4gLQkJ LyogU2F2ZSBpbmZvcm1hdGlvbiBhYm91dCBiaXRmbGlwcyEgKi8KPiAtCQlpZiAodW5saWtlbHko ZXJyKSkgewo+IC0JCQlpZiAobXRkX2lzX2VjY2VycihlcnIpKSB7Cj4gLQkJCQltdGQtPmVjY19z dGF0cy5mYWlsZWQrKzsKPiAtCQkJCXJldCA9IGVycjsKPiAtCQkJfSBlbHNlIGlmIChtdGRfaXNf Yml0ZmxpcChlcnIpKSB7Cj4gLQkJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQrKzsKPiAtCQkJ CS8qIERvIG5vdCBvdmVyd3JpdGUgLUVCQURNU0cgISEgKi8KPiAtCQkJCWlmICghcmV0KQo+IC0J CQkJCXJldCA9IGVycjsKPiAtCQkJfSBlbHNlCj4gLQkJCQlyZXR1cm4gZXJyOwo+IC0JCX0KPiAt Cj4gLQkJaWYgKGRldm9wcy5kYXRidWYpIHsKPiAtCQkJZGV2b3BzLmxlbiA9IG9wcy0+bGVuIC0g b3BzLT5yZXRsZW47Cj4gLQkJCWlmICghZGV2b3BzLmxlbikKPiAtCQkJCXJldHVybiByZXQ7Cj4g LQkJCWRldm9wcy5kYXRidWYgKz0gZGV2b3BzLnJldGxlbjsKPiAtCQl9Cj4gLQkJaWYgKGRldm9w cy5vb2JidWYpIHsKPiAtCQkJZGV2b3BzLm9vYmxlbiA9IG9wcy0+b29ibGVuIC0gb3BzLT5vb2Jy ZXRsZW47Cj4gLQkJCWlmICghZGV2b3BzLm9vYmxlbikKPiAtCQkJCXJldHVybiByZXQ7Cj4gLQkJ CWRldm9wcy5vb2JidWYgKz0gb3BzLT5vb2JyZXRsZW47Cj4gLQkJfQo+IC0KPiAtCQlmcm9tID0g MDsKPiAtCX0KPiAtCXJldHVybiAtRUlOVkFMOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50Cj4gLWNv bmNhdF93cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc3RydWN0IG10 ZF9vb2Jfb3BzICpvcHMpCj4gLXsKPiAtCXN0cnVjdCBtdGRfY29uY2F0ICpjb25jYXQgPSBDT05D QVQobXRkKTsKPiAtCXN0cnVjdCBtdGRfb29iX29wcyBkZXZvcHMgPSAqb3BzOwo+IC0JaW50IGks IGVycjsKPiAtCj4gLQlpZiAoIShtdGQtPmZsYWdzICYgTVREX1dSSVRFQUJMRSkpCj4gLQkJcmV0 dXJuIC1FUk9GUzsKPiAtCj4gLQlvcHMtPnJldGxlbiA9IG9wcy0+b29icmV0bGVuID0gMDsKPiAt Cj4gLQlmb3IgKGkgPSAwOyBpIDwgY29uY2F0LT5udW1fc3ViZGV2OyBpKyspIHsKPiAtCQlzdHJ1 Y3QgbXRkX2luZm8gKnN1YmRldiA9IGNvbmNhdC0+c3ViZGV2W2ldOwo+IC0KPiAtCQlpZiAodG8g Pj0gc3ViZGV2LT5zaXplKSB7Cj4gLQkJCXRvIC09IHN1YmRldi0+c2l6ZTsKPiAtCQkJY29udGlu dWU7Cj4gLQkJfQo+IC0KPiAtCQkvKiBwYXJ0aWFsIHdyaXRlID8gKi8KPiAtCQlpZiAodG8gKyBk ZXZvcHMubGVuID4gc3ViZGV2LT5zaXplKQo+IC0JCQlkZXZvcHMubGVuID0gc3ViZGV2LT5zaXpl IC0gdG87Cj4gLQo+IC0JCWVyciA9IG10ZF93cml0ZV9vb2Ioc3ViZGV2LCB0bywgJmRldm9wcyk7 Cj4gLQkJb3BzLT5yZXRsZW4gKz0gZGV2b3BzLnJldGxlbjsKPiAtCQlvcHMtPm9vYnJldGxlbiAr PSBkZXZvcHMub29icmV0bGVuOwo+IC0JCWlmIChlcnIpCj4gLQkJCXJldHVybiBlcnI7Cj4gLQo+ IC0JCWlmIChkZXZvcHMuZGF0YnVmKSB7Cj4gLQkJCWRldm9wcy5sZW4gPSBvcHMtPmxlbiAtIG9w cy0+cmV0bGVuOwo+IC0JCQlpZiAoIWRldm9wcy5sZW4pCj4gLQkJCQlyZXR1cm4gMDsKPiAtCQkJ ZGV2b3BzLmRhdGJ1ZiArPSBkZXZvcHMucmV0bGVuOwo+IC0JCX0KPiAtCQlpZiAoZGV2b3BzLm9v YmJ1Zikgewo+IC0JCQlkZXZvcHMub29ibGVuID0gb3BzLT5vb2JsZW4gLSBvcHMtPm9vYnJldGxl bjsKPiAtCQkJaWYgKCFkZXZvcHMub29ibGVuKQo+IC0JCQkJcmV0dXJuIDA7Cj4gLQkJCWRldm9w cy5vb2JidWYgKz0gZGV2b3BzLm9vYnJldGxlbjsKPiAtCQl9Cj4gLQkJdG8gPSAwOwo+IC0JfQo+ IC0JcmV0dXJuIC1FSU5WQUw7Cj4gLX0KPiAtCj4gIHN0YXRpYyBpbnQgY29uY2F0X2VyYXNlKHN0 cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpCj4gIHsKPiAgCXN0 cnVjdCBtdGRfY29uY2F0ICpjb25jYXQgPSBDT05DQVQobXRkKTsKPiBAQCAtNjg0LDEwICs1ODAs NiBAQCBzdHJ1Y3QgbXRkX2luZm8gKm10ZF9jb25jYXRfY3JlYXRlKHN0cnVjdCBtdGRfaW5mbyAq c3ViZGV2W10sCS8qIHN1YmRldmljZXMgdG8gYwo+ICAJc3ViZGV2X21hc3RlciA9IG10ZF9nZXRf bWFzdGVyKHN1YmRldlswXSk7Cj4gIAlpZiAoc3ViZGV2X21hc3Rlci0+X3dyaXRldikKPiAgCQlj b25jYXQtPm10ZC5fd3JpdGV2ID0gY29uY2F0X3dyaXRldjsKPiAtCWlmIChzdWJkZXZfbWFzdGVy LT5fcmVhZF9vb2IpCj4gLQkJY29uY2F0LT5tdGQuX3JlYWRfb29iID0gY29uY2F0X3JlYWRfb29i Owo+IC0JaWYgKHN1YmRldl9tYXN0ZXItPl93cml0ZV9vb2IpCj4gLQkJY29uY2F0LT5tdGQuX3dy aXRlX29vYiA9IGNvbmNhdF93cml0ZV9vb2I7CgpBY3R1YWxseSBJIGFtIG5vdCBzdXJlIF9yZWFk fHdyaXRlX29vYigpIGlzIHRoZSByaWdodCBjYWxsYmFjayB0bwpyZW1vdmUuCgpSaWNoYXJkLCB3 aGF0IGlzIHlvdXIgaW5wdXQgb24gdGhpcz8gU2hhbGwgd2UgcmVtb3ZlIF9yZWFkfHdyaXRlKCkK aW5zdGVhZD8gSSBkb24ndCByZW1lbWJlciB0aGUgZXhhY3QgcmF0aW9uYWxlIGJlaGluZCB0aGVz ZSB0d28gaGVscGVycy4KCj4gIAlpZiAoc3ViZGV2X21hc3Rlci0+X2Jsb2NrX2lzYmFkKQo+ICAJ CWNvbmNhdC0+bXRkLl9ibG9ja19pc2JhZCA9IGNvbmNhdF9ibG9ja19pc2JhZDsKPiAgCWlmIChz dWJkZXZfbWFzdGVyLT5fYmxvY2tfbWFya2JhZCkKPiBAQCAtNzI0LDE1ICs2MTYsMTIgQEAgc3Ry dWN0IG10ZF9pbmZvICptdGRfY29uY2F0X2NyZWF0ZShzdHJ1Y3QgbXRkX2luZm8gKnN1YmRldltd LAkvKiBzdWJkZXZpY2VzIHRvIGMKPiAgCQkJCSAgICBzdWJkZXZbaV0tPmZsYWdzICYgTVREX1dS SVRFQUJMRTsKPiAgCQl9Cj4gIAo+IC0JCXN1YmRldl9tYXN0ZXIgPSBtdGRfZ2V0X21hc3Rlcihz dWJkZXZbaV0pOwo+ICAJCWNvbmNhdC0+bXRkLnNpemUgKz0gc3ViZGV2W2ldLT5zaXplOwo+ICAJ CWNvbmNhdC0+bXRkLmVjY19zdGF0cy5iYWRibG9ja3MgKz0KPiAgCQkJc3ViZGV2W2ldLT5lY2Nf c3RhdHMuYmFkYmxvY2tzOwo+ICAJCWlmIChjb25jYXQtPm10ZC53cml0ZXNpemUgICAhPSAgc3Vi ZGV2W2ldLT53cml0ZXNpemUgfHwKPiAgCQkgICAgY29uY2F0LT5tdGQuc3VicGFnZV9zZnQgIT0g c3ViZGV2W2ldLT5zdWJwYWdlX3NmdCB8fAo+IC0JCSAgICBjb25jYXQtPm10ZC5vb2JzaXplICAg ICE9ICBzdWJkZXZbaV0tPm9vYnNpemUgfHwKPiAtCQkgICAgIWNvbmNhdC0+bXRkLl9yZWFkX29v YiAgIT0gIXN1YmRldl9tYXN0ZXItPl9yZWFkX29vYiB8fAo+IC0JCSAgICAhY29uY2F0LT5tdGQu X3dyaXRlX29vYiAhPSAhc3ViZGV2X21hc3Rlci0+X3dyaXRlX29vYikgewo+ICsJCSAgICBjb25j YXQtPm10ZC5vb2JzaXplICAgICE9ICBzdWJkZXZbaV0tPm9vYnNpemUpIHsKPiAgCQkJa2ZyZWUo Y29uY2F0KTsKPiAgCQkJcHJpbnRrKCJJbmNvbXBhdGlibGUgT09CIG9yIEVDQyBkYXRhIG9uIFwi JXNcIlxuIiwKPiAgCQkJICAgICAgIHN1YmRldltpXS0+bmFtZSk7CgpUaGFua3MsCk1pcXXDqGwK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpM aW51eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCg== 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,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 0A7FFC4338F for ; Fri, 6 Aug 2021 19:27:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D568561164 for ; Fri, 6 Aug 2021 19:27:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243883AbhHFT1Q convert rfc822-to-8bit (ORCPT ); Fri, 6 Aug 2021 15:27:16 -0400 Received: from relay3-d.mail.gandi.net ([217.70.183.195]:59579 "EHLO relay3-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243805AbhHFT1P (ORCPT ); Fri, 6 Aug 2021 15:27:15 -0400 Received: (Authenticated sender: miquel.raynal@bootlin.com) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 669B360005; Fri, 6 Aug 2021 19:26:56 +0000 (UTC) Date: Fri, 6 Aug 2021 21:26:55 +0200 From: Miquel Raynal To: Zhihao Cheng Cc: , , , , , Subject: Re: [PATCH 2/2] mtd: mtdconcat: Remove concat_{read|write}_oob Message-ID: <20210806212655.16e4d03d@xps13> In-Reply-To: <20210731023243.3977104-3-chengzhihao1@huawei.com> References: <20210731023243.3977104-1-chengzhihao1@huawei.com> <20210731023243.3977104-3-chengzhihao1@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, Richard, a question for you below :) Zhihao Cheng wrote on Sat, 31 Jul 2021 10:32:43 +0800: > Since 2431c4f5b46c3("mtd: Implement mtd_{read,write}() as wrappers > around mtd_{read,write}_oob()") don't allow _write|_read and > _write_oob|_read_oob existing at the same time. We should stop these > two callback functions assigning, otherwise following warning occurs > while making concatenated device: > > WARNING: CPU: 2 PID: 6728 at drivers/mtd/mtdcore.c:595 > add_mtd_device+0x7f/0x7b0 > > Fixes: 2431c4f5b46c3("mtd: Implement mtd_{read,write}() around ...") > Signed-off-by: Zhihao Cheng > --- > drivers/mtd/mtdconcat.c | 113 +--------------------------------------- > 1 file changed, 1 insertion(+), 112 deletions(-) > > diff --git a/drivers/mtd/mtdconcat.c b/drivers/mtd/mtdconcat.c > index ea130eeb54d5..98d1c79cf51d 100644 > --- a/drivers/mtd/mtdconcat.c > +++ b/drivers/mtd/mtdconcat.c > @@ -256,110 +256,6 @@ concat_writev(struct mtd_info *mtd, const struct kvec *vecs, > return err; > } > > -static int > -concat_read_oob(struct mtd_info *mtd, loff_t from, struct mtd_oob_ops *ops) > -{ > - struct mtd_concat *concat = CONCAT(mtd); > - struct mtd_oob_ops devops = *ops; > - int i, err, ret = 0; > - > - ops->retlen = ops->oobretlen = 0; > - > - for (i = 0; i < concat->num_subdev; i++) { > - struct mtd_info *subdev = concat->subdev[i]; > - > - if (from >= subdev->size) { > - from -= subdev->size; > - continue; > - } > - > - /* partial read ? */ > - if (from + devops.len > subdev->size) > - devops.len = subdev->size - from; > - > - err = mtd_read_oob(subdev, from, &devops); > - ops->retlen += devops.retlen; > - ops->oobretlen += devops.oobretlen; > - > - /* Save information about bitflips! */ > - if (unlikely(err)) { > - if (mtd_is_eccerr(err)) { > - mtd->ecc_stats.failed++; > - ret = err; > - } else if (mtd_is_bitflip(err)) { > - mtd->ecc_stats.corrected++; > - /* Do not overwrite -EBADMSG !! */ > - if (!ret) > - ret = err; > - } else > - return err; > - } > - > - if (devops.datbuf) { > - devops.len = ops->len - ops->retlen; > - if (!devops.len) > - return ret; > - devops.datbuf += devops.retlen; > - } > - if (devops.oobbuf) { > - devops.ooblen = ops->ooblen - ops->oobretlen; > - if (!devops.ooblen) > - return ret; > - devops.oobbuf += ops->oobretlen; > - } > - > - from = 0; > - } > - return -EINVAL; > -} > - > -static int > -concat_write_oob(struct mtd_info *mtd, loff_t to, struct mtd_oob_ops *ops) > -{ > - struct mtd_concat *concat = CONCAT(mtd); > - struct mtd_oob_ops devops = *ops; > - int i, err; > - > - if (!(mtd->flags & MTD_WRITEABLE)) > - return -EROFS; > - > - ops->retlen = ops->oobretlen = 0; > - > - for (i = 0; i < concat->num_subdev; i++) { > - struct mtd_info *subdev = concat->subdev[i]; > - > - if (to >= subdev->size) { > - to -= subdev->size; > - continue; > - } > - > - /* partial write ? */ > - if (to + devops.len > subdev->size) > - devops.len = subdev->size - to; > - > - err = mtd_write_oob(subdev, to, &devops); > - ops->retlen += devops.retlen; > - ops->oobretlen += devops.oobretlen; > - if (err) > - return err; > - > - if (devops.datbuf) { > - devops.len = ops->len - ops->retlen; > - if (!devops.len) > - return 0; > - devops.datbuf += devops.retlen; > - } > - if (devops.oobbuf) { > - devops.ooblen = ops->ooblen - ops->oobretlen; > - if (!devops.ooblen) > - return 0; > - devops.oobbuf += devops.oobretlen; > - } > - to = 0; > - } > - return -EINVAL; > -} > - > static int concat_erase(struct mtd_info *mtd, struct erase_info *instr) > { > struct mtd_concat *concat = CONCAT(mtd); > @@ -684,10 +580,6 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to c > subdev_master = mtd_get_master(subdev[0]); > if (subdev_master->_writev) > concat->mtd._writev = concat_writev; > - if (subdev_master->_read_oob) > - concat->mtd._read_oob = concat_read_oob; > - if (subdev_master->_write_oob) > - concat->mtd._write_oob = concat_write_oob; Actually I am not sure _read|write_oob() is the right callback to remove. Richard, what is your input on this? Shall we remove _read|write() instead? I don't remember the exact rationale behind these two helpers. > if (subdev_master->_block_isbad) > concat->mtd._block_isbad = concat_block_isbad; > if (subdev_master->_block_markbad) > @@ -724,15 +616,12 @@ 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_master->_read_oob || > - !concat->mtd._write_oob != !subdev_master->_write_oob) { > + concat->mtd.oobsize != subdev[i]->oobsize) { > kfree(concat); > printk("Incompatible OOB or ECC data on \"%s\"\n", > subdev[i]->name); Thanks, Miquèl