Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp3641541imm; Mon, 2 Jul 2018 02:56:40 -0700 (PDT) X-Google-Smtp-Source: ADUXVKI9tJx4ppjfxgvbwURB+wDKIokzxDyfRfB9r/utkdkl7+ynC0ouf2sQpdJR1pWIuLyzeH6I X-Received: by 2002:a17:902:3303:: with SMTP id a3-v6mr25163529plc.209.1530525400624; Mon, 02 Jul 2018 02:56:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530525400; cv=none; d=google.com; s=arc-20160816; b=0CB+H7vi6kHH1w2/HGUtoEAeiDip9wU4K+xZDwuEA5asw5wuWyBgcdNx36MaD3ouC4 x0dZD/tQp1G4R+UQk7u8bBDjo3/UfYY1pw5r4vIE8WULcE8n58474Jq0kxOSDUIUCGEU bx4MIkLGG+geKIy3V24T+8dFXkT+1wS/4MVW+lKENIPDXOW4SYzSs/4dGAjk9bFcYiZ9 huK4OaU9h9fPbrf9fuQ5qYhjybLzJdThyRJUEhgEd3ZH+/nbLp+nvJWfG77KzQh8b880 jNZhgpbScMZBoIepogeVllno8fKqZ/9nBo6KZFc9FHDpjCtJLxRg3/kAB5vGuQ8SbUAZ e6hA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=qoIltrQvHtfjdW57YuT5lzxghkR2lmbR9ES06pgENmU=; b=N89ubninAQ3jlVFpuWZxOJMT3J5OqmPJ6zjnir1j27/n3L+nOfiov/tKDQPRAXXX90 eanvj1fATS8tiBcE9d8cERXh0hKoSBBCzyOAK49LY4cAutBc84NJQTV2CDIH2fpEydWK RGsvHa+YK+7yMNDIpLhVL1kKdTncn9XVqPo1pneBqxBR+FdxbfLwLNfRAenH4jmyZs10 EEVn6PfDbNYSYyDvSY+wTnGCL1cwXohhwfKPO0lMYXnYpMA3rvManJp7OGIacIR8k8+Z oQfDBun2yf0RFuWNYTUgr92sawIT8B0JfAI+6LwA41vkaZpQoRfKKqjumanwLgxyC+Ar aBig== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e72-v6si16464675pfd.352.2018.07.02.02.56.25; Mon, 02 Jul 2018 02:56:40 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754538AbeGBJoo (ORCPT + 99 others); Mon, 2 Jul 2018 05:44:44 -0400 Received: from mail.bootlin.com ([62.4.15.54]:50829 "EHLO mail.bootlin.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753183AbeGBJoh (ORCPT ); Mon, 2 Jul 2018 05:44:37 -0400 Received: by mail.bootlin.com (Postfix, from userid 110) id 74768207D4; Mon, 2 Jul 2018 11:44:35 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mail.bootlin.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,SHORTCIRCUIT, URIBL_BLOCKED shortcircuit=ham autolearn=disabled version=3.4.0 Received: from localhost.localdomain (AAubervilliers-681-1-39-106.w90-88.abo.wanadoo.fr [90.88.158.106]) by mail.bootlin.com (Postfix) with ESMTPSA id 2E0BF20741; Mon, 2 Jul 2018 11:44:25 +0200 (CEST) From: Quentin Schulz To: dedekind1@gmail.com, richard@nod.at, dwmw2@infradead.org, computersforpeace@gmail.com, boris.brezillon@bootlin.com, marek.vasut@gmail.com Cc: linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, Quentin Schulz Subject: [PATCH v5 1/2] ubi: provide a way to skip CRC checks Date: Mon, 2 Jul 2018 11:43:50 +0200 Message-Id: <328390941d1e1d3cbd94a9a36622809f8ab4d483.1530524405.git-series.quentin.schulz@bootlin.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Some users of static UBI volumes implement their own integrity check, thus making the volume CRC check done at open time useless. For instance, this is the case when one use the ubiblock + dm-verity + squashfs combination, where dm-verity already checks integrity of the block device but this time at the block granularity instead of verifying the whole volume. Skipping this test drastically improves the boot-time. Suggested-by: Boris Brezillon Signed-off-by: Quentin Schulz Reviewed-by: Boris Brezillon Reviewed-by: Richard Weinberger --- drivers/mtd/ubi/kapi.c | 2 +- drivers/mtd/ubi/ubi-media.h | 6 ++++++ drivers/mtd/ubi/ubi.h | 4 ++++ drivers/mtd/ubi/vmt.c | 9 +++++++++ drivers/mtd/ubi/vtbl.c | 3 +++ 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/ubi/kapi.c b/drivers/mtd/ubi/kapi.c index d4b2e87..e9e9ecb 100644 --- a/drivers/mtd/ubi/kapi.c +++ b/drivers/mtd/ubi/kapi.c @@ -202,7 +202,7 @@ struct ubi_volume_desc *ubi_open_volume(int ubi_num, int vol_id, int mode) desc->mode = mode; mutex_lock(&ubi->ckvol_mutex); - if (!vol->checked) { + if (!vol->checked && !vol->skip_check) { /* This is the first open - check the volume */ err = ubi_check_volume(ubi, vol_id); if (err < 0) { diff --git a/drivers/mtd/ubi/ubi-media.h b/drivers/mtd/ubi/ubi-media.h index 195ff8c..b5fe8f8 100644 --- a/drivers/mtd/ubi/ubi-media.h +++ b/drivers/mtd/ubi/ubi-media.h @@ -45,6 +45,11 @@ enum { * Volume flags used in the volume table record. * * @UBI_VTBL_AUTORESIZE_FLG: auto-resize this volume + * @UBI_VTBL_SKIP_CRC_CHECK_FLG: skip the CRC check done on a static volume at + * open time. Should only be set on volumes that + * are used by upper layers doing this kind of + * check. Main use-case for this flag is + * boot-time reduction * * %UBI_VTBL_AUTORESIZE_FLG flag can be set only for one volume in the volume * table. UBI automatically re-sizes the volume which has this flag and makes @@ -76,6 +81,7 @@ enum { */ enum { UBI_VTBL_AUTORESIZE_FLG = 0x01, + UBI_VTBL_SKIP_CRC_CHECK_FLG = 0x02, }; /* diff --git a/drivers/mtd/ubi/ubi.h b/drivers/mtd/ubi/ubi.h index f5ba97c..d47b9e4 100644 --- a/drivers/mtd/ubi/ubi.h +++ b/drivers/mtd/ubi/ubi.h @@ -327,6 +327,9 @@ struct ubi_eba_leb_desc { * atomic LEB change * * @eba_tbl: EBA table of this volume (LEB->PEB mapping) + * @skip_check: %1 if CRC check of this static volume should be skipped. + * Directly reflects the presence of the + * %UBI_VTBL_SKIP_CRC_CHECK_FLG flag in the vtbl entry * @checked: %1 if this static volume was checked * @corrupted: %1 if the volume is corrupted (static volumes only) * @upd_marker: %1 if the update marker is set for this volume @@ -374,6 +377,7 @@ struct ubi_volume { void *upd_buf; struct ubi_eba_table *eba_tbl; + unsigned int skip_check:1; unsigned int checked:1; unsigned int corrupted:1; unsigned int upd_marker:1; diff --git a/drivers/mtd/ubi/vmt.c b/drivers/mtd/ubi/vmt.c index 0be5167..e2606a4 100644 --- a/drivers/mtd/ubi/vmt.c +++ b/drivers/mtd/ubi/vmt.c @@ -299,6 +299,10 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req) vtbl_rec.vol_type = UBI_VID_DYNAMIC; else vtbl_rec.vol_type = UBI_VID_STATIC; + + if (vol->skip_check) + vtbl_rec.flags |= UBI_VTBL_SKIP_CRC_CHECK_FLG; + memcpy(vtbl_rec.name, vol->name, vol->name_len); err = ubi_change_vtbl_record(ubi, vol_id, &vtbl_rec); @@ -733,6 +737,11 @@ static int self_check_volume(struct ubi_device *ubi, int vol_id) ubi_err(ubi, "bad used_bytes"); goto fail; } + + if (vol->skip_check) { + ubi_err(ubi, "bad skip_check"); + goto fail; + } } else { if (vol->used_ebs < 0 || vol->used_ebs > vol->reserved_pebs) { ubi_err(ubi, "bad used_ebs"); diff --git a/drivers/mtd/ubi/vtbl.c b/drivers/mtd/ubi/vtbl.c index 94d7a86..2c133cd 100644 --- a/drivers/mtd/ubi/vtbl.c +++ b/drivers/mtd/ubi/vtbl.c @@ -560,6 +560,9 @@ static int init_volumes(struct ubi_device *ubi, vol->name[vol->name_len] = '\0'; vol->vol_id = i; + if (vtbl[i].flags & UBI_VTBL_SKIP_CRC_CHECK_FLG) + vol->skip_check = 1; + if (vtbl[i].flags & UBI_VTBL_AUTORESIZE_FLG) { /* Auto re-size flag may be set only for one volume */ if (ubi->autoresize_vol_id != -1) { -- git-series 0.9.1