UBIFS: allow for racing between GC and TNC
The TNC mutex is unlocked prematurely when reading leaf nodes with non-hashed keys. This is unsafe because the node may be moved by garbage collection and the eraseblock unmapped, although that has never actually happened during stress testing. This patch fixes the flaw by detecting the race and retrying with the TNC mutex locked. Signed-off-by: Adrian Hunter <ext-adrian.hunter@nokia.com>
This commit is contained in:

zatwierdzone przez
Artem Bityutskiy

rodzic
761e29f3bb
commit
601c0bc467
@@ -344,6 +344,12 @@ int ubifs_garbage_collect_leb(struct ubifs_info *c, struct ubifs_lprops *lp)
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
/* Allow for races with TNC */
|
||||
c->gced_lnum = lnum;
|
||||
smp_wmb();
|
||||
c->gc_seq += 1;
|
||||
smp_wmb();
|
||||
|
||||
if (c->gc_lnum == -1) {
|
||||
c->gc_lnum = lnum;
|
||||
err = LEB_RETAINED;
|
||||
|
Reference in New Issue
Block a user