[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20120709103747.5270084d@pixies.home.jungo.com>
Date: Mon, 9 Jul 2012 10:37:47 +0300
From: Shmulik Ladkani <shmulik.ladkani@...il.com>
To: Richard Weinberger <richard@....at>
Cc: linux-mtd@...ts.infradead.org, linux-kernel@...r.kernel.org,
adrian.hunter@...el.com, Heinz.Egger@...utronix.de,
thomas.wucher@...utronix.de, tglx@...utronix.de,
tim.bird@...sony.com, Marius.Mazarel@...l.ro,
artem.bityutskiy@...ux.intel.com, nyoushchenko@...sta.com
Subject: Re: UBI fastmap updates
Hi Richard,
On Sun, 08 Jul 2012 14:07:41 +0200 Richard Weinberger <richard@....at> wrote:
> > + /* TODO: in the new locking scheme, produce_free_peb is
> > + * called under wl_lock taken.
> > + * so when returning, should reacquire the lock
> > + */
>
> Which new locking scheme?
I am diffing linux-ubi fastmap HEAD against its fork point (vanilla
ubi), that's 6b16351..d41a140 on linux-ubi.
Which gives the following diff in produce_free_pebs:
@@ -261,7 +266,6 @@ static int produce_free_peb(struct ubi_device *ubi)
{
int err;
- spin_lock(&ubi->wl_lock);
while (!ubi->free.rb_node) {
spin_unlock(&ubi->wl_lock);
@@ -272,7 +276,6 @@ static int produce_free_peb(struct ubi_device *ubi)
spin_lock(&ubi->wl_lock);
}
- spin_unlock(&ubi->wl_lock);
return 0;
}
Which is probably okay, since you obtain the lock in the new
'ubi_refill_pools', which calls produce_free_peb:
+void ubi_refill_pools(struct ubi_device *ubi)
+{
+ spin_lock(&ubi->wl_lock);
+ refill_wl_pool(ubi);
+ refill_wl_user_pool(ubi);
+ spin_unlock(&ubi->wl_lock);
+}
However if 'do_work' fails within 'produce_free_peb', you return the
error but leave wl_lock unlocked - where it is expected to be locked
(otherwise, ubi_refill_pools will unlock it again):
static int produce_free_peb(struct ubi_device *ubi)
{
int err;
while (!ubi->free.rb_node) {
spin_unlock(&ubi->wl_lock);
dbg_wl("do one work synchronously");
err = do_work(ubi);
if (err)
return err;
spin_lock(&ubi->wl_lock);
}
return 0;
}
Regards,
Shmulik
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists