[PATCH] Force remount read-only of jffs2 when the garbage collector dies Signed-off-by: Michael Trimarchi --- fs/jffs2/background.c | 21 +++++++++++++++++++++ 1 files changed, 21 insertions(+), 0 deletions(-) diff --git a/fs/jffs2/background.c b/fs/jffs2/background.c index 8adebd3..669b35e 100644 --- a/fs/jffs2/background.c +++ b/fs/jffs2/background.c @@ -70,6 +70,7 @@ void jffs2_stop_garbage_collect_thread(struct jffs2_sb_info *c) static int jffs2_garbage_collect_thread(void *_c) { struct jffs2_sb_info *c = _c; + struct super_block *sb; daemonize("jffs2_gcd_mtd%d", c->mtd->index); allow_signal(SIGKILL); @@ -145,5 +146,25 @@ static int jffs2_garbage_collect_thread(void *_c) spin_lock(&c->erase_completion_lock); c->gc_task = NULL; spin_unlock(&c->erase_completion_lock); + + sb = c->os_priv; + BUG_ON(sb == NULL); + + /* The garbage collect is died. Try to remount the fs + * read-only + */ + down_read(&sb->s_umount); + if (sb->s_root && sb->s_mtd && !(sb->s_flags & MS_RDONLY)) { + /* + * ->remount_fs needs lock_kernel(). + * + * What lock protects sb->s_flags?? + */ + lock_kernel(); + do_remount_sb(sb, MS_RDONLY, NULL, 1); + unlock_kernel(); + } + drop_super(sb); + complete_and_exit(&c->gc_thread_exit, 0); } -- 1.5.3.6