2002-02-20 13:01:32

by Chris Mason

[permalink] [raw]
Subject: [PATCH] sb_read problem in hpfs


Hi guys,

hpfs_read_super triggers calls to sb_bread (through hpfs_map_sector)
before setting s_blocksize. This leads to a BUG() in grow_buffers.

This patch was tested lightly, hpfs_read_super completes
properly when an hpfs FS is not present.

-chris

--- suse.4/fs/hpfs/super.c Tue, 19 Feb 2002 08:55:47 -0500
+++ suse.4(w)/fs/hpfs/super.c Tue, 19 Feb 2002 22:28:37 -0500
@@ -410,6 +410,8 @@
/*s->s_hpfs_mounting = 1;*/
dev = s->s_dev;
set_blocksize(dev, 512);
+ s->s_blocksize = 512;
+ s->s_blocksize_bits = 9;
s->s_hpfs_fs_size = -1;
if (!(bootblock = hpfs_map_sector(s, 0, &bh0, 0))) goto bail1;
if (!(superblock = hpfs_map_sector(s, 16, &bh1, 1))) goto bail2;
@@ -436,8 +438,6 @@

/* Fill superblock stuff */
s->s_magic = HPFS_SUPER_MAGIC;
- s->s_blocksize = 512;
- s->s_blocksize_bits = 9;
s->s_op = &hpfs_sops;

s->s_hpfs_root = superblock->root;


2002-02-20 13:11:53

by Alexander Viro

[permalink] [raw]
Subject: Re: [PATCH] sb_read problem in hpfs



On Wed, 20 Feb 2002, Chris Mason wrote:

>
> Hi guys,
>
> hpfs_read_super triggers calls to sb_bread (through hpfs_map_sector)
> before setting s_blocksize. This leads to a BUG() in grow_buffers.

Fsck. Merge problems when backporting to 2.4 - thanks for spotting.
Yes, patch is correct. I'll look through the rest of thing and see
what else is missing.

> This patch was tested lightly, hpfs_read_super completes
> properly when an hpfs FS is not present.
>
> -chris
>
> --- suse.4/fs/hpfs/super.c Tue, 19 Feb 2002 08:55:47 -0500
> +++ suse.4(w)/fs/hpfs/super.c Tue, 19 Feb 2002 22:28:37 -0500
> @@ -410,6 +410,8 @@
> /*s->s_hpfs_mounting = 1;*/
> dev = s->s_dev;
> set_blocksize(dev, 512);
> + s->s_blocksize = 512;
> + s->s_blocksize_bits = 9;
> s->s_hpfs_fs_size = -1;
> if (!(bootblock = hpfs_map_sector(s, 0, &bh0, 0))) goto bail1;
> if (!(superblock = hpfs_map_sector(s, 16, &bh1, 1))) goto bail2;
> @@ -436,8 +438,6 @@
>
> /* Fill superblock stuff */
> s->s_magic = HPFS_SUPER_MAGIC;
> - s->s_blocksize = 512;
> - s->s_blocksize_bits = 9;
> s->s_op = &hpfs_sops;
>
> s->s_hpfs_root = superblock->root;
>
>