From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751326AbdFBPoe (ORCPT ); Fri, 2 Jun 2017 11:44:34 -0400 Received: from mail-wr0-f195.google.com ([209.85.128.195]:34557 "EHLO mail-wr0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751162AbdFBPob (ORCPT ); Fri, 2 Jun 2017 11:44:31 -0400 From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Joern Engel , David Woodhouse , Brian Norris , Boris Brezillon , Marek Vasut , Richard Weinberger , Cyrille Pitchen , Artem Bityutskiy Cc: linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Pali=20Roh=C3=A1r?= Subject: [PATCH 5/5] ubi: Allow to use read-only UBI volume with not enough PEBs Date: Fri, 2 Jun 2017 17:43:42 +0200 Message-Id: <1496418222-23483-6-git-send-email-pali.rohar@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1496418222-23483-1-git-send-email-pali.rohar@gmail.com> References: <1496418222-23483-1-git-send-email-pali.rohar@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In read-only mode is skipped auto-resize. For pre-build images ready for auto-resize there can be reserved more PEBs as whole size of pre-build image. In read-only we do not do any write operation therefore this would allow to use read-only UBI volume which is not auto-resized yet. Signed-off-by: Pali Rohár --- drivers/mtd/ubi/vtbl.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/drivers/mtd/ubi/vtbl.c b/drivers/mtd/ubi/vtbl.c index 263743e..1d708c5 100644 --- a/drivers/mtd/ubi/vtbl.c +++ b/drivers/mtd/ubi/vtbl.c @@ -240,8 +240,10 @@ static int vtbl_check(const struct ubi_device *ubi, if (reserved_pebs > ubi->good_peb_count) { ubi_err(ubi, "too large reserved_pebs %d, good PEBs %d", reserved_pebs, ubi->good_peb_count); - err = 9; - goto bad; + if (!ubi->ro_mode) { + err = 9; + goto bad; + } } if (name_len > UBI_VOL_NAME_MAX) { @@ -652,10 +654,12 @@ static int init_volumes(struct ubi_device *ubi, if (ubi->corr_peb_count) ubi_err(ubi, "%d PEBs are corrupted and not used", ubi->corr_peb_count); - return -ENOSPC; + if (!ubi->ro_mode) + return -ENOSPC; + } else { + ubi->rsvd_pebs += reserved_pebs; + ubi->avail_pebs -= reserved_pebs; } - ubi->rsvd_pebs += reserved_pebs; - ubi->avail_pebs -= reserved_pebs; return 0; } -- 1.7.9.5