From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from b.ns.miles-group.at ([95.130.255.144] helo=radon.swed.at) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1VHFWu-0000zV-5d for linux-mtd@lists.infradead.org; Wed, 04 Sep 2013 16:02:05 +0000 Message-ID: <52275960.20309@nod.at> Date: Wed, 04 Sep 2013 18:01:36 +0200 From: Richard Weinberger MIME-Version: 1.0 To: David Mosberger-Tang Subject: Re: [PATCH] UBI: fix refill_wl_user_pool() References: <1377511730-14834-1-git-send-email-richard@nod.at> <5226ED69.8080506@nod.at> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: "linux-mtd@lists.infradead.org" List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , David, Am 04.09.2013 17:50, schrieb David Mosberger-Tang: > Richard, > > Is there more background on the bug this patch fixes? > We are working on root-causing an issue where a UBIFS write fails with > ENOSPC, even though there is no plausible reason that the filesystem > should be out of space. The ENOSPC errors persist across multiple > reboots, only to disappear magically later on. We haven't found a > reliable way to reproduce this so far, so we're still tapping a bit in > the dark. The said patch fixes an issue if your Kernel was build with experimental Fastmap support. If you have CONFIG_MTD_UBI_FASTMAP=n you are not affected. Fastmap uses two pools of available PEBs. Every time a pool is filled with used PEBs it writes out a new fastmap to the flash. The bug in refill_wl_user_pool() was that the function did not try hard enough to get a free PEB and failed too early with -ENOSPC. Thanks, //richard > --david > > On Wed, Sep 4, 2013 at 2:20 AM, Richard Weinberger wrote: >> Am 26.08.2013 12:08, schrieb Richard Weinberger: >>> If no free PEBs are available refill_wl_user_pool() must not >>> return with -ENOSPC immediately. >>> It has to block till produce_free_peb() produced a free PEB. >>> >>> Reported-and-Tested-by: Richard Genoud >>> Signed-off-by: Richard Weinberger >>> --- >>> drivers/mtd/ubi/wl.c | 4 ---- >>> 1 file changed, 4 deletions(-) >>> >>> diff --git a/drivers/mtd/ubi/wl.c b/drivers/mtd/ubi/wl.c >>> index c95bfb1..02317c1 100644 >>> --- a/drivers/mtd/ubi/wl.c >>> +++ b/drivers/mtd/ubi/wl.c >>> @@ -599,10 +599,6 @@ static void refill_wl_user_pool(struct ubi_device *ubi) >>> return_unused_pool_pebs(ubi, pool); >>> >>> for (pool->size = 0; pool->size < pool->max_size; pool->size++) { >>> - if (!ubi->free.rb_node || >>> - (ubi->free_count - ubi->beb_rsvd_pebs < 1)) >>> - break; >>> - >>> pool->pebs[pool->size] = __wl_get_peb(ubi); >>> if (pool->pebs[pool->size] < 0) >>> break; >>> >> >> Artem, please don't forget do apply this patch. >> >> Thanks, >> //richard >> >> ______________________________________________________ >> Linux MTD discussion mailing list >> http://lists.infradead.org/mailman/listinfo/linux-mtd/