[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <52F592F2.6010008@huawei.com>
Date: Sat, 8 Feb 2014 10:14:10 +0800
From: Li Zefan <lizefan@...wei.com>
To: Andrew Morton <akpm@...ux-foundation.org>
CC: LKML <linux-kernel@...r.kernel.org>, <dwmw2@...radead.org>,
<linux-mtd@...ts.infradead.org>
Subject: [PATCH 1/3] jffs2: fix unbalanced locking
This was found by our internal debugging feature on runtime, but this
bug won't lead to deadlock, as the structure that this lock is embedded
in is freed on error.
Cc: <stable@...r.kernel.org>
Signed-off-by: Li Zefan <lizefan@...wei.com>
---
fs/jffs2/readinode.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/fs/jffs2/readinode.c b/fs/jffs2/readinode.c
index 386303d..8261021 100644
--- a/fs/jffs2/readinode.c
+++ b/fs/jffs2/readinode.c
@@ -1143,6 +1143,7 @@ static int jffs2_do_read_inode_internal(struct jffs2_sb_info *c,
JFFS2_ERROR("cannot read nodes for ino %u, returned error is %d\n", f->inocache->ino, ret);
if (f->inocache->state == INO_STATE_READING)
jffs2_set_inocache_state(c, f->inocache, INO_STATE_CHECKEDABSENT);
+ mutex_unlock(&f->sem);
return ret;
}
@@ -1159,6 +1160,7 @@ static int jffs2_do_read_inode_internal(struct jffs2_sb_info *c,
jffs2_free_tmp_dnode_info(rii.mdata_tn);
rii.mdata_tn = NULL;
}
+ mutex_unlock(&f->sem);
return ret;
}
@@ -1183,6 +1185,7 @@ static int jffs2_do_read_inode_internal(struct jffs2_sb_info *c,
if (!rii.fds) {
if (f->inocache->state == INO_STATE_READING)
jffs2_set_inocache_state(c, f->inocache, INO_STATE_CHECKEDABSENT);
+ mutex_unlock(&f->sem);
return -EIO;
}
JFFS2_NOTICE("but it has children so we fake some modes for it\n");
--
1.8.0.2
--
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