Patchwork [LogFS] Return -EINVAL if filesystem image doesn't match

login
register
mail settings
Submitter Jörn Engel
Date April 27, 2010, 11:48 a.m.
Message ID <20100427114816.GE13859@logfs.org>
Download mbox | patch
Permalink /patch/51056/
State New
Headers show

Comments

Jörn Engel - April 27, 2010, 11:48 a.m.
On Tue, 27 April 2010 13:40:04 +0200, Jörn Engel wrote:
> On Tue, 27 April 2010 13:31:11 +0200, Paolo Minazzi wrote:
> > 
> > > If you add "rootfstype=romfs" to the command line, does the problem
> > > still exist?
> > 
> > Jorn , you are right.
> > It seems work....
> > please wait....
> 
> Ok, I'm pretty sure that logfs returns -EIO where it should return
> -EINVAL.  If filesystems are tried in alphabetical order, logfs comes
> first and -EIO tells the kernel to stop trying and panic, essentially.
> 
> Will cook up a patch...

Does the patch below solve the problem for you (without the explicit
"rootfstype=romfs")?

Jörn
Paolo Minazzi - April 27, 2010, 12:53 p.m.
> Does the patch below solve the problem for you (without the explicit
> "rootfstype=romfs")?
>
> Jörn
>
> --
> One of my most productive days was throwing away 1000 lines of code.
> -- Ken Thompson.
>
>
> Signed-off-by: Joern Engel <joern@logfs.org>
> ---
>  fs/logfs/super.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/fs/logfs/super.c b/fs/logfs/super.c
> index 5866ee6..f649038 100644
> --- a/fs/logfs/super.c
> +++ b/fs/logfs/super.c
> @@ -413,7 +413,7 @@ static int __logfs_read_sb(struct super_block *sb)
>
>        page = find_super_block(sb);
>        if (!page)
> -               return -EIO;
> +               return -EINVAL;
>
>        ds = page_address(page);
>        super->s_size = be64_to_cpu(ds->ds_filesystem_size);

The above patch solve the problem for me.
Now I can mount root without rootfstype=romfs

Bye,
Paolo

Patch

diff --git a/fs/logfs/super.c b/fs/logfs/super.c
index 5866ee6..f649038 100644
--- a/fs/logfs/super.c
+++ b/fs/logfs/super.c
@@ -413,7 +413,7 @@  static int __logfs_read_sb(struct super_block *sb)
 
 	page = find_super_block(sb);
 	if (!page)
-		return -EIO;
+		return -EINVAL;
 
 	ds = page_address(page);
 	super->s_size = be64_to_cpu(ds->ds_filesystem_size);