* Re: [Ext2-devel] [PATCH] fix ext3 mounts at 16T
2006-08-11 22:13 Eric Sandeen
@ 2006-08-11 22:29 ` Mingming Cao
2006-08-18 8:50 ` Andreas Dilger
2006-08-14 22:58 ` Andrew Morton
2006-08-16 11:45 ` Johann Lombardi
2 siblings, 1 reply; 11+ messages in thread
From: Mingming Cao @ 2006-08-11 22:29 UTC (permalink / raw)
To: Eric Sandeen; +Cc: ext2-devel, linux-kernel
On Fri, 2006-08-11 at 17:13 -0500, Eric Sandeen wrote:
> I figure before we get too fired up about 48 bits and ext4 let's fix 32 bits on ext3 :)
>
> I need to do some actual IO testing now, but this gets things mounting for a 16T ext3 filesystem.
> (patched up e2fsprogs is needed too, I'll send that off the kernel list)
>
> This patch fixes these issues in the kernel:
>
> o sbi->s_groups_count overflows in ext3_fill_super()
>
> sbi->s_groups_count = (le32_to_cpu(es->s_blocks_count) -
> le32_to_cpu(es->s_first_data_block) +
> EXT3_BLOCKS_PER_GROUP(sb) - 1) /
> EXT3_BLOCKS_PER_GROUP(sb);
>
> at 16T, s_blocks_count is already maxed out; adding EXT3_BLOCKS_PER_GROUP(sb) overflows it and
> groups_count comes out to 0. Not really what we want, and causes a failed mount.
>
> Feel free to check my math (actually, please do!), but changing it this way should work &
> avoid the overflow:
>
> (A + B - 1)/B changed to: ((A - 1)/B) + 1
>
> o ext3_check_descriptors() overflows range checks
Looks correct to me.:)
Mingming
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Ext2-devel] [PATCH] fix ext3 mounts at 16T
2006-08-14 22:58 ` Andrew Morton
@ 2006-08-14 23:02 ` Eric Sandeen
0 siblings, 0 replies; 11+ messages in thread
From: Eric Sandeen @ 2006-08-14 23:02 UTC (permalink / raw)
To: Andrew Morton; +Cc: ext2-devel, linux-kernel
Andrew Morton wrote:
> On Fri, 11 Aug 2006 17:13:14 -0500
> Eric Sandeen <esandeen@redhat.com> wrote:
>
>> (a similar patch could be done for ext2; does anyone in their right mind use ext2 at 16T?
>
> well, a bug's a bug. People might want to ue 16TB ext2 for comparative
> performance testing, or because they get their jollies from running fsck or
> something.
ext2 and ext3 have seemingly already diverged a bit, but I suppose no reason to
let it go further.
>> I'll send an ext2 patch doing the same thing if that's warranted)
>
> please, when you have nothing better to do ;)
Will do :)
-Eric
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Ext2-devel] [PATCH] fix ext3 mounts at 16T
2006-08-11 22:13 Eric Sandeen
2006-08-11 22:29 ` [Ext2-devel] " Mingming Cao
2006-08-14 22:58 ` Andrew Morton
@ 2006-08-16 11:45 ` Johann Lombardi
2 siblings, 0 replies; 11+ messages in thread
From: Johann Lombardi @ 2006-08-16 11:45 UTC (permalink / raw)
To: Eric Sandeen; +Cc: ext2-devel, linux-kernel
> static int ext3_check_descriptors (struct super_block * sb)
> {
> struct ext3_sb_info *sbi = EXT3_SB(sb);
> - ext3_fsblk_t block = le32_to_cpu(sbi->s_es->s_first_data_block);
> + ext3_fsblk_t first_block = le32_to_cpu(sbi->s_es->s_first_data_block);
> + ext3_fsblk_t last_block;
> struct ext3_group_desc * gdp = NULL;
> int desc_block = 0;
> int i;
> @@ -1141,12 +1142,16 @@ static int ext3_check_descriptors (struc
>
> for (i = 0; i < sbi->s_groups_count; i++)
> {
> + if (i == sbi->s_groups_count - 1)
> + last_block = sb->s_blocks_count - 1;
> + else
> + last = first + (EXT3_BLOCKS_PER_GROUP(sb) - 1);
I think it should be:
last_block = first_block + ...
Johann
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Ext2-devel] [PATCH] fix ext3 mounts at 16T
2006-08-11 22:29 ` [Ext2-devel] " Mingming Cao
@ 2006-08-18 8:50 ` Andreas Dilger
0 siblings, 0 replies; 11+ messages in thread
From: Andreas Dilger @ 2006-08-18 8:50 UTC (permalink / raw)
To: Mingming Cao; +Cc: Eric Sandeen, ext2-devel, linux-kernel
On Aug 11, 2006 15:29 -0700, Mingming Cao wrote:
> On Fri, 2006-08-11 at 17:13 -0500, Eric Sandeen wrote:
> > I figure before we get too fired up about 48 bits and ext4 let's fix 32 bits on ext3 :)
> >
> > I need to do some actual IO testing now, but this gets things mounting for a 16T ext3 filesystem.
> > (patched up e2fsprogs is needed too, I'll send that off the kernel list)
> >
> > This patch fixes these issues in the kernel:
> >
> > o sbi->s_groups_count overflows in ext3_fill_super()
> >
> > sbi->s_groups_count = (le32_to_cpu(es->s_blocks_count) -
> > le32_to_cpu(es->s_first_data_block) +
> > EXT3_BLOCKS_PER_GROUP(sb) - 1) /
> > EXT3_BLOCKS_PER_GROUP(sb);
> >
> > at 16T, s_blocks_count is already maxed out; adding EXT3_BLOCKS_PER_GROUP(sb) overflows it and
> > groups_count comes out to 0. Not really what we want, and causes a failed mount.
> >
> > Feel free to check my math (actually, please do!), but changing it this way should work &
> > avoid the overflow:
> >
> > (A + B - 1)/B changed to: ((A - 1)/B) + 1
> >
> > o ext3_check_descriptors() overflows range checks
This is generally not safe because of underflow, but it also isn't possible
to have a 0-block filesystem so it should be OK.
Cheers, Andreas
--
Andreas Dilger
Principal Software Engineer
Cluster File Systems, Inc.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Ext2-devel] [PATCH] fix ext3 mounts at 16T
@ 2006-08-18 9:15 sho
2006-08-18 14:53 ` Eric Sandeen
2006-08-18 17:33 ` Mingming Cao
0 siblings, 2 replies; 11+ messages in thread
From: sho @ 2006-08-18 9:15 UTC (permalink / raw)
To: esandeen; +Cc: ext2-devel, linux-kernel
Hi,
>I figure before we get too fired up about 48 bits and ext4 let's fix 32 bits on ext3 :)
>
>I need to do some actual IO testing now, but this gets things mounting for a 16T ext3
>filesystem.
>(patched up e2fsprogs is needed too, I'll send that off the kernel list)
>
>This patch fixes these issues in the kernel:
>
> o sbi->s_groups_count overflows in ext3_fill_super()
>
> sbi->s_groups_count = (le32_to_cpu(es->s_blocks_count) -
> le32_to_cpu(es->s_first_data_block) +
> EXT3_BLOCKS_PER_GROUP(sb) - 1) /
> EXT3_BLOCKS_PER_GROUP(sb);
>
> at 16T, s_blocks_count is already maxed out; adding EXT3_BLOCKS_PER_GROUP(sb) overflows it and
> groups_count comes out to 0. Not really what we want, and causes a failed mount.
>
> Feel free to check my math (actually, please do!), but changing it this way should work &
> avoid the overflow:
>
> (A + B - 1)/B changed to: ((A - 1)/B) + 1
>
> o ext3_check_descriptors() overflows range checks
I had done the same work for both ext3 and ext2,
and sent the patches to ext2-devel three months ago.
If you need, you can get them from the following URL.
The introduction for my patch set:
http://marc.theaimsgroup.com/?l=ext2-devel&m=114856080926308&w=2
The patch which fixes overflow problem on ext3:
http://marc.theaimsgroup.com/?l=ext2-devel&m=114856129220863&w=2
The patch which fixes overflow problem on ext2:
http://marc.theaimsgroup.com/?l=ext2-devel&m=114856135120693&w=2
I have reviewed your patch and found other place which might
cause overflow as below. If group_first_block is the first block of
the last group, overflow will occur. This has already been fixed
in my patch.
o ext3_try_to_allocate_with_rsv() in fs/ext3/balloc.c
if ((my_rsv->rsv_start >= group_first_block + EXT3_BLOCKS_PER_GROUP(sb))
|| (my_rsv->rsv_end < group_first_block))
BUG();
Cheers, Takashi
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Ext2-devel] [PATCH] fix ext3 mounts at 16T
2006-08-18 9:15 [Ext2-devel] [PATCH] fix ext3 mounts at 16T sho
@ 2006-08-18 14:53 ` Eric Sandeen
2006-08-18 17:33 ` Mingming Cao
1 sibling, 0 replies; 11+ messages in thread
From: Eric Sandeen @ 2006-08-18 14:53 UTC (permalink / raw)
To: sho; +Cc: esandeen, ext2-devel, linux-kernel
sho@tnes.nec.co.jp wrote:
> Hi,
>
> I had done the same work for both ext3 and ext2,
> and sent the patches to ext2-devel three months ago.
> If you need, you can get them from the following URL.
Thank you, I did not know that anyone else had done this work (I guess I should
have searched...!)
Thanks for the pointer, I will compare my patches to yours. I guess it can be
considered an independent review. :)
> I have reviewed your patch and found other place which might
> cause overflow as below. If group_first_block is the first block of
> the last group, overflow will occur. This has already been fixed
> in my patch.
I had that patch locally as well, but had not yet sent it out.
Thanks,
-Eric
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Ext2-devel] [PATCH] fix ext3 mounts at 16T
2006-08-18 9:15 [Ext2-devel] [PATCH] fix ext3 mounts at 16T sho
2006-08-18 14:53 ` Eric Sandeen
@ 2006-08-18 17:33 ` Mingming Cao
2006-08-18 17:39 ` Eric Sandeen
1 sibling, 1 reply; 11+ messages in thread
From: Mingming Cao @ 2006-08-18 17:33 UTC (permalink / raw)
To: sho; +Cc: esandeen, ext2-devel, linux-kernel
sho@tnes.nec.co.jp wrote:
> I have reviewed your patch and found other place which might
> cause overflow as below. If group_first_block is the first block of
> the last group, overflow will occur. This has already been fixed
> in my patch.
>
> o ext3_try_to_allocate_with_rsv() in fs/ext3/balloc.c
> if ((my_rsv->rsv_start >= group_first_block + EXT3_BLOCKS_PER_GROUP(sb))
> || (my_rsv->rsv_end < group_first_block))
> BUG();
>
Yes, this isn't being addressed in the current 2.6.18-rc4 kernel. I
think this is better than casting to unsigned long long:
- if ((my_rsv->rsv_start >= group_first_block + EXT3_BLOCKS_PER_GROUP(sb))
+ if ((my_rsv->rsv_start > group_first_block - 1 +
EXT3_BLOCKS_PER_GROUP(sb))
Thanks,
Mingming
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Ext2-devel] [PATCH] fix ext3 mounts at 16T
2006-08-18 17:33 ` Mingming Cao
@ 2006-08-18 17:39 ` Eric Sandeen
2006-08-18 18:53 ` Mingming Cao
2006-08-18 23:18 ` Andreas Dilger
0 siblings, 2 replies; 11+ messages in thread
From: Eric Sandeen @ 2006-08-18 17:39 UTC (permalink / raw)
To: Mingming Cao; +Cc: sho, ext2-devel, linux-kernel
Mingming Cao wrote:
> Yes, this isn't being addressed in the current 2.6.18-rc4 kernel. I
> think this is better than casting to unsigned long long:
>
> - if ((my_rsv->rsv_start >= group_first_block + EXT3_BLOCKS_PER_GROUP(sb))
> + if ((my_rsv->rsv_start > group_first_block - 1 + EXT3_BLOCKS_PER_GROUP(sb))
And there are a few more of these. The patch I currently have in my stack follows.
(personally I think
last = first + (count - 1)
is clearer than
last = first - 1 + count
but that's just my opinion...)
Thanks,
-Eric
Signed-off-by: Eric Sandeen <esandeen@redhat.com>
Index: linux-2.6.17/fs/ext3/balloc.c
===================================================================
--- linux-2.6.17.orig/fs/ext3/balloc.c
+++ linux-2.6.17/fs/ext3/balloc.c
@@ -168,7 +168,7 @@ goal_in_my_reservation(struct ext3_reser
ext3_fsblk_t group_first_block, group_last_block;
group_first_block = ext3_group_first_block_no(sb, group);
- group_last_block = group_first_block + EXT3_BLOCKS_PER_GROUP(sb) - 1;
+ group_last_block = group_first_block + (EXT3_BLOCKS_PER_GROUP(sb) - 1);
if ((rsv->_rsv_start > group_last_block) ||
(rsv->_rsv_end < group_first_block))
@@ -897,7 +897,7 @@ static int alloc_new_reservation(struct
spinlock_t *rsv_lock = &EXT3_SB(sb)->s_rsv_window_lock;
group_first_block = ext3_group_first_block_no(sb, group);
- group_end_block = group_first_block + EXT3_BLOCKS_PER_GROUP(sb) - 1;
+ group_end_block = group_first_block + (EXT3_BLOCKS_PER_GROUP(sb) - 1);
if (grp_goal < 0)
start_block = group_first_block;
@@ -1132,7 +1132,7 @@ ext3_try_to_allocate_with_rsv(struct sup
try_to_extend_reservation(my_rsv, sb,
*count-my_rsv->rsv_end + grp_goal - 1);
- if ((my_rsv->rsv_start >= group_first_block + EXT3_BLOCKS_PER_GROUP(sb))
+ if ((my_rsv->rsv_start > group_first_block + (EXT3_BLOCKS_PER_GROUP(sb) - 1))
|| (my_rsv->rsv_end < group_first_block))
BUG();
ret = ext3_try_to_allocate(sb, handle, group, bitmap_bh, grp_goal,
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Ext2-devel] [PATCH] fix ext3 mounts at 16T
2006-08-18 17:39 ` Eric Sandeen
@ 2006-08-18 18:53 ` Mingming Cao
2006-08-18 23:18 ` Andreas Dilger
1 sibling, 0 replies; 11+ messages in thread
From: Mingming Cao @ 2006-08-18 18:53 UTC (permalink / raw)
To: Eric Sandeen; +Cc: sho, ext2-devel, linux-kernel
On Fri, 2006-08-18 at 12:39 -0500, Eric Sandeen wrote:
> Mingming Cao wrote:
>
> > Yes, this isn't being addressed in the current 2.6.18-rc4 kernel. I
> > think this is better than casting to unsigned long long:
> >
> > - if ((my_rsv->rsv_start >= group_first_block + EXT3_BLOCKS_PER_GROUP(sb))
> > + if ((my_rsv->rsv_start > group_first_block - 1 + EXT3_BLOCKS_PER_GROUP(sb))
>
> And there are a few more of these. The patch I currently have in my stack follows.
> (personally I think
> last = first + (count - 1)
> is clearer than
> last = first - 1 + count
> but that's just my opinion...)
>
> Thanks,
>
ACK.
> -Eric
>
> Signed-off-by: Eric Sandeen <esandeen@redhat.com>
>
> Index: linux-2.6.17/fs/ext3/balloc.c
> ===================================================================
> --- linux-2.6.17.orig/fs/ext3/balloc.c
> +++ linux-2.6.17/fs/ext3/balloc.c
> @@ -168,7 +168,7 @@ goal_in_my_reservation(struct ext3_reser
> ext3_fsblk_t group_first_block, group_last_block;
>
> group_first_block = ext3_group_first_block_no(sb, group);
> - group_last_block = group_first_block + EXT3_BLOCKS_PER_GROUP(sb) - 1;
> + group_last_block = group_first_block + (EXT3_BLOCKS_PER_GROUP(sb) - 1);
>
> if ((rsv->_rsv_start > group_last_block) ||
> (rsv->_rsv_end < group_first_block))
> @@ -897,7 +897,7 @@ static int alloc_new_reservation(struct
> spinlock_t *rsv_lock = &EXT3_SB(sb)->s_rsv_window_lock;
>
> group_first_block = ext3_group_first_block_no(sb, group);
> - group_end_block = group_first_block + EXT3_BLOCKS_PER_GROUP(sb) - 1;
> + group_end_block = group_first_block + (EXT3_BLOCKS_PER_GROUP(sb) - 1);
>
> if (grp_goal < 0)
> start_block = group_first_block;
> @@ -1132,7 +1132,7 @@ ext3_try_to_allocate_with_rsv(struct sup
> try_to_extend_reservation(my_rsv, sb,
> *count-my_rsv->rsv_end + grp_goal - 1);
>
> - if ((my_rsv->rsv_start >= group_first_block + EXT3_BLOCKS_PER_GROUP(sb))
> + if ((my_rsv->rsv_start > group_first_block + (EXT3_BLOCKS_PER_GROUP(sb) - 1))
> || (my_rsv->rsv_end < group_first_block))
> BUG();
> ret = ext3_try_to_allocate(sb, handle, group, bitmap_bh, grp_goal,
>
>
>
> -------------------------------------------------------------------------
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> Ext2-devel mailing list
> Ext2-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/ext2-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Ext2-devel] [PATCH] fix ext3 mounts at 16T
2006-08-18 17:39 ` Eric Sandeen
2006-08-18 18:53 ` Mingming Cao
@ 2006-08-18 23:18 ` Andreas Dilger
2006-08-18 23:56 ` Eric Sandeen
1 sibling, 1 reply; 11+ messages in thread
From: Andreas Dilger @ 2006-08-18 23:18 UTC (permalink / raw)
To: Eric Sandeen; +Cc: Mingming Cao, sho, ext2-devel, linux-kernel
On Aug 18, 2006 12:39 -0500, Eric Sandeen wrote:
> @@ -168,7 +168,7 @@ goal_in_my_reservation(struct ext3_reser
> ext3_fsblk_t group_first_block, group_last_block;
>
> group_first_block = ext3_group_first_block_no(sb, group);
> - group_last_block = group_first_block + EXT3_BLOCKS_PER_GROUP(sb) - 1;
> + group_last_block = group_first_block + (EXT3_BLOCKS_PER_GROUP(sb) - 1);
>
> if ((rsv->_rsv_start > group_last_block) ||
> (rsv->_rsv_end < group_first_block))
> @@ -897,7 +897,7 @@ static int alloc_new_reservation(struct
> spinlock_t *rsv_lock = &EXT3_SB(sb)->s_rsv_window_lock;
>
> group_first_block = ext3_group_first_block_no(sb, group);
> - group_end_block = group_first_block + EXT3_BLOCKS_PER_GROUP(sb) - 1;
> + group_end_block = group_first_block + (EXT3_BLOCKS_PER_GROUP(sb) - 1);
>
> if (grp_goal < 0)
> start_block = group_first_block;
I don't see how these can make a difference? Surely, if the intermediate
sum overflows it will then underflow when "- 1" is done? Not that I mind,
per-se, just curious why you think this fixes anything.
Cheers, Andreas
--
Andreas Dilger
Principal Software Engineer
Cluster File Systems, Inc.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Ext2-devel] [PATCH] fix ext3 mounts at 16T
2006-08-18 23:18 ` Andreas Dilger
@ 2006-08-18 23:56 ` Eric Sandeen
0 siblings, 0 replies; 11+ messages in thread
From: Eric Sandeen @ 2006-08-18 23:56 UTC (permalink / raw)
To: Eric Sandeen, Mingming Cao, sho, ext2-devel, linux-kernel
Andreas Dilger wrote:
> On Aug 18, 2006 12:39 -0500, Eric Sandeen wrote:
>> @@ -168,7 +168,7 @@ goal_in_my_reservation(struct ext3_reser
>> ext3_fsblk_t group_first_block, group_last_block;
>>
>> group_first_block = ext3_group_first_block_no(sb, group);
>> - group_last_block = group_first_block + EXT3_BLOCKS_PER_GROUP(sb) - 1;
>> + group_last_block = group_first_block + (EXT3_BLOCKS_PER_GROUP(sb) - 1);
>>
>> if ((rsv->_rsv_start > group_last_block) ||
>> (rsv->_rsv_end < group_first_block))
>> @@ -897,7 +897,7 @@ static int alloc_new_reservation(struct
>> spinlock_t *rsv_lock = &EXT3_SB(sb)->s_rsv_window_lock;
>>
>> group_first_block = ext3_group_first_block_no(sb, group);
>> - group_end_block = group_first_block + EXT3_BLOCKS_PER_GROUP(sb) - 1;
>> + group_end_block = group_first_block + (EXT3_BLOCKS_PER_GROUP(sb) - 1);
>>
>> if (grp_goal < 0)
>> start_block = group_first_block;
>
> I don't see how these can make a difference? Surely, if the intermediate
> sum overflows it will then underflow when "- 1" is done? Not that I mind,
> per-se, just curious why you think this fixes anything.
Well, you're right, if it overflows then it will underflow again. And I've not
observed any actual failures, and I don't expect to. But personally I guess I'd
rather avoid the whole overflow in the first place... maybe I'm being silly. :)
If you think it's unnecessary code churn then we can not make this change...
-Eric
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2006-08-18 23:57 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-18 9:15 [Ext2-devel] [PATCH] fix ext3 mounts at 16T sho
2006-08-18 14:53 ` Eric Sandeen
2006-08-18 17:33 ` Mingming Cao
2006-08-18 17:39 ` Eric Sandeen
2006-08-18 18:53 ` Mingming Cao
2006-08-18 23:18 ` Andreas Dilger
2006-08-18 23:56 ` Eric Sandeen
-- strict thread matches above, loose matches on Subject: below --
2006-08-11 22:13 Eric Sandeen
2006-08-11 22:29 ` [Ext2-devel] " Mingming Cao
2006-08-18 8:50 ` Andreas Dilger
2006-08-14 22:58 ` Andrew Morton
2006-08-14 23:02 ` [Ext2-devel] " Eric Sandeen
2006-08-16 11:45 ` Johann Lombardi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox