From: Tristan Lelong <tristan.lelong@blunderer.org>
To: linux-mtd@lists.infradead.org
Subject: make offline logfs image and some BUG()
Date: Mon, 19 Nov 2012 14:31:32 -0500 [thread overview]
Message-ID: <50AA8914.2090009@blunderer.org> (raw)
[-- Attachment #1: Type: text/plain, Size: 1097 bytes --]
Hi,
I am trying to use logfs for a project I am currently working on. The
kernel version I used is 2.6.37 with some patch from TI DM8168.
I search on the internet for an offline way to create a logfs image from
a directory (like mkfs.jffs2), and the only way seems to be using the
block2mtd kernel module. Does anybody confirm that?
Also I encountered two BUG():
- The first is already documented on some mailing lists: it is the one
that it appears when doing umount -> call to map_invalidatepage.
I was able to apply the attached patch1 to fix this, but I still see
call to this function. I guess I might miss something.
- The other one is when mounting a filesystem that detects a previous
incomplete write: it BUG() because it cannot find any free segment.
Trying to understand what is happening, I realized that during the
mount, the function that adds segment to the free list is called after
the function that check the filesystem. I modified this like in the
following patch2 and it seems to work fine.
Does anybody have any thoughts about that?
Thanks a lo
---
618FE3EF
[-- Attachment #2: patch1 --]
[-- Type: text/plain, Size: 1551 bytes --]
Index: super.c
===================================================================
--- super.c (revision 24035)
+++ super.c (working copy)
@@ -511,6 +510,7 @@
/* Alias entries slow down mount, so evict as many as possible */
sync_filesystem(sb);
logfs_write_anchor(sb);
+ free_areas(sb);
/*
* From this point on alias entries are simply dropped - and any
Index: segment.c
===================================================================
--- segment.c (revision 24035)
+++ segment.c (working copy)
@@ -841,6 +841,16 @@
kfree(area);
}
+void free_areas(struct super_block *sb)
+{
+ struct logfs_super *super = logfs_super(sb);
+ int i;
+
+ for_each_area(i)
+ free_area(super->s_area[i]);
+ free_area(super->s_journal_area);
+}
+
static struct logfs_area *alloc_area(struct super_block *sb)
{
struct logfs_area *area;
@@ -923,10 +933,6 @@
void logfs_cleanup_areas(struct super_block *sb)
{
struct logfs_super *super = logfs_super(sb);
- int i;
btree_grim_visitor128(&super->s_object_alias_tree, 0, kill_alias);
- for_each_area(i)
- free_area(super->s_area[i]);
- free_area(super->s_journal_area);
}
Index: logfs.h
===================================================================
--- logfs.h (revision 24035)
+++ logfs.h (working copy)
@@ -594,6 +594,7 @@
void logfs_sync_area(struct logfs_area *area);
void logfs_sync_segments(struct super_block *sb);
void freeseg(struct super_block *sb, u32 segno);
+void free_areas(struct super_block *sb);
/* area handling */
int logfs_init_areas(struct super_block *sb);
[-- Attachment #3: patch2 --]
[-- Type: text/plain, Size: 578 bytes --]
Index: super.c
===================================================================
--- super.c (revision 24035)
+++ super.c (working copy)
@@ -308,14 +308,13 @@
if (err)
return err;
+ /* Do one GC pass before any data gets dirtied */
+ logfs_gc_pass(sb);
+
/* Check areas for trailing unaccounted data */
err = logfs_check_areas(sb);
if (err)
return err;
-
- /* Do one GC pass before any data gets dirtied */
- logfs_gc_pass(sb);
-
/* after all initializations are done, replay the journal
* for rw-mounts, if necessary */
err = logfs_replay_journal(sb);
next reply other threads:[~2012-11-19 19:31 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-19 19:31 Tristan Lelong [this message]
2012-11-22 10:53 ` make offline logfs image and some BUG() Artem Bityutskiy
2012-11-22 10:53 ` Artem Bityutskiy
2012-11-22 16:56 ` prasad
2012-11-22 16:56 ` prasad
2012-11-22 16:59 ` prasad
2012-11-22 16:59 ` prasad
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=50AA8914.2090009@blunderer.org \
--to=tristan.lelong@blunderer.org \
--cc=linux-mtd@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.