All of lore.kernel.org
 help / color / mirror / Atom feed
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);

             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.