
From: <achurch@achurch.org> (Andrew Church)

The following patch fixes a bug in the processing of the sb= (alternate
superblock) mount option for ext2: when changing the device block size, the
given superblock is ignored and the code reverts to using block 1.


---

 25-akpm/fs/ext2/super.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff -puN fs/ext2/super.c~ext2-alternate-sb-mount-fix fs/ext2/super.c
--- 25/fs/ext2/super.c~ext2-alternate-sb-mount-fix	2004-04-06 21:20:00.730489128 -0700
+++ 25-akpm/fs/ext2/super.c	2004-04-06 21:20:00.735488368 -0700
@@ -564,8 +564,9 @@ static int ext2_fill_super(struct super_
 	struct ext2_sb_info * sbi;
 	struct ext2_super_block * es;
 	struct inode *root;
-	unsigned long block, sb_block = 1;
-	unsigned long logic_sb_block = get_sb_block(&data);
+	unsigned long block;
+	unsigned long sb_block = get_sb_block(&data);
+	unsigned long logic_sb_block;
 	unsigned long offset = 0;
 	unsigned long def_mount_opts;
 	int blocksize = BLOCK_SIZE;
@@ -598,6 +599,8 @@ static int ext2_fill_super(struct super_
 	if (blocksize != BLOCK_SIZE) {
 		logic_sb_block = (sb_block*BLOCK_SIZE) / blocksize;
 		offset = (sb_block*BLOCK_SIZE) % blocksize;
+	} else {
+		logic_sb_block = sb_block;
 	}
 
 	if (!(bh = sb_bread(sb, logic_sb_block))) {

_
