From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752124AbbDLRJR (ORCPT ); Sun, 12 Apr 2015 13:09:17 -0400 Received: from a.ns.miles-group.at ([95.130.255.143]:65275 "EHLO radon.swed.at" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751598AbbDLRJO (ORCPT ); Sun, 12 Apr 2015 13:09:14 -0400 Message-ID: <552AA6B7.3070806@nod.at> Date: Sun, 12 Apr 2015 19:09:11 +0200 From: Richard Weinberger User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Boris Brezillon CC: linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, dedekind1@gmail.com Subject: Re: [PATCH 4/4] UBI: Implement bitrot checking References: <1427631197-23610-1-git-send-email-richard@nod.at> <1427631197-23610-5-git-send-email-richard@nod.at> <20150412190119.7f0f7c64@bbrezillon> In-Reply-To: <20150412190119.7f0f7c64@bbrezillon> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Am 12.04.2015 um 19:01 schrieb Boris Brezillon: > Hi Richard, > > After the 'coding style related'/'useless' comments, now comes a real > question related to the approach you've taken :-). > > On Sun, 29 Mar 2015 14:13:17 +0200 > Richard Weinberger wrote: > > [...] >> + >> +/** >> + * ubi_wl_trigger_bitrot_check - triggers a re-read of all physical erase >> + * blocks. >> + * @ubi: UBI device description object >> + */ >> +void ubi_wl_trigger_bitrot_check(struct ubi_device *ubi) >> +{ >> + int i; >> + struct ubi_wl_entry *e; >> + >> + ubi_msg(ubi, "Running a full read check"); >> + >> + for (i = 0; i < ubi->peb_count; i++) { >> + spin_lock(&ubi->wl_lock); >> + e = ubi->lookuptbl[i]; >> + spin_unlock(&ubi->wl_lock); >> + if (e) { >> + atomic_inc(&ubi->bit_rot_work); >> + schedule_bitrot_check(ubi, e); >> + } >> + } > > Do we really need to create a ubi_work per PEB ? > Couldn't we create a single work being rescheduled inside the worker > function (after updating the ubi_wl_entry of course). Currently the UBI worker thread handles one PEB per ubi_work. I didn't wanted to break that pattern. The downside of that approach is that we need more memory. A few KiB per run. I'm not sure if I understood your idea. You mean that we schedule one check for PEB N and this work will re-schedule again a work for PEB N+1? Using that approach we can safe memory, yes. But is it worth the hassle? I'd like to avoid works which schedule again other works. In the current way it is clear where the work is scheduled and how much. > I'm pretty sure I'm missing something obvious that you'll probably > point out ;-). No no, it is a very good question. Thanks, //richard