Message ID | 518426F0.1000103@redhat.com |
---|---|
State | Not Applicable, archived |
Headers | show |
----- Original Message ----- > s_blockfile_groups is used to limit allocations for non-extent > files to block groups with block numbers less than 2^32. > However, it's not updated when the filesystem is resized online, > so the new groups are unavailable to non-extent files until a remount. > > Fix this by updating the value in ext4_update_super() at > resize time. > > Signed-off-by: Eric Sandeen <sandeen@redhat.com> > --- > > diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c > index c169477..1357260 100644 > --- a/fs/ext4/resize.c > +++ b/fs/ext4/resize.c > @@ -1341,6 +1341,8 @@ static void ext4_update_super(struct super_block *sb, > > /* Update the global fs size fields */ > sbi->s_groups_count += flex_gd->count; > + sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count, > + (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb))); > > /* Update the reserved block counts only once the new group is > * active. */ > > -- > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Good catch Eric - this would have prevented the bug in ext4_mb_regular_allocator() too. Looks good to me. -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 5/5/13 7:36 PM, Lachlan McIlroy wrote: > ----- Original Message ----- >> s_blockfile_groups is used to limit allocations for non-extent >> files to block groups with block numbers less than 2^32. >> However, it's not updated when the filesystem is resized online, >> so the new groups are unavailable to non-extent files until a remount. >> >> Fix this by updating the value in ext4_update_super() at >> resize time. >> >> Signed-off-by: Eric Sandeen <sandeen@redhat.com> >> --- >> >> diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c >> index c169477..1357260 100644 >> --- a/fs/ext4/resize.c >> +++ b/fs/ext4/resize.c >> @@ -1341,6 +1341,8 @@ static void ext4_update_super(struct super_block *sb, >> >> /* Update the global fs size fields */ >> sbi->s_groups_count += flex_gd->count; >> + sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count, >> + (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb))); >> >> /* Update the reserved block counts only once the new group is >> * active. */ >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> > > Good catch Eric - this would have prevented the bug in > ext4_mb_regular_allocator() too. Looks good to me. Yep - at least until the filesystem grows > 16TB :) -Eric -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, May 03, 2013 at 04:06:56PM -0500, Eric Sandeen wrote: > s_blockfile_groups is used to limit allocations for non-extent > files to block groups with block numbers less than 2^32. > However, it's not updated when the filesystem is resized online, > so the new groups are unavailable to non-extent files until a remount. > > Fix this by updating the value in ext4_update_super() at > resize time. > > Signed-off-by: Eric Sandeen <sandeen@redhat.com> I sent out a patch about two weeks ago, which has since been accepted into Linus's tree as commit c5c72d814cf0. It's been marked for the for backporting into the stable trees. Cheers, - Ted commit c5c72d814cf0f650010337c73638b25e6d14d2d4 Author: Theodore Ts'o <tytso@mit.edu> Date: Sun Apr 21 20:19:43 2013 -0400 ext4: fix online resizing for ext3-compat file systems Commit fb0a387dcdc restricts block allocations for indirect-mapped files to block groups less than s_blockfile_groups. However, the online resizing code wasn't setting s_blockfile_groups, so the newly added block groups were not available for non-extent mapped files. Reported-by: Eric Sandeen <sandeen@redhat.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Cc: stable@vger.kernel.org -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On May 5, 2013, at 10:06 PM, "Theodore Ts'o" <tytso@mit.edu> wrote: > On Fri, May 03, 2013 at 04:06:56PM -0500, Eric Sandeen wrote: >> s_blockfile_groups is used to limit allocations for non-extent >> files to block groups with block numbers less than 2^32. >> However, it's not updated when the filesystem is resized online, >> so the new groups are unavailable to non-extent files until a remount. >> >> Fix this by updating the value in ext4_update_super() at >> resize time. >> >> Signed-off-by: Eric Sandeen <sandeen@redhat.com> > > I sent out a patch about two weeks ago, which has since been accepted > into Linus's tree as commit c5c72d814cf0. It's been marked for the > for backporting into the stable trees. > Argh, so you did! One demerit for me for forgetting, and another for patching an old tree.... Thanks, Eric > Cheers, > > - Ted > > commit c5c72d814cf0f650010337c73638b25e6d14d2d4 > Author: Theodore Ts'o <tytso@mit.edu> > Date: Sun Apr 21 20:19:43 2013 -0400 > > ext4: fix online resizing for ext3-compat file systems > > Commit fb0a387dcdc restricts block allocations for indirect-mapped > files to block groups less than s_blockfile_groups. However, the > online resizing code wasn't setting s_blockfile_groups, so the newly > added block groups were not available for non-extent mapped files. > > Reported-by: Eric Sandeen <sandeen@redhat.com> > Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> > Cc: stable@vger.kernel.org -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c index c169477..1357260 100644 --- a/fs/ext4/resize.c +++ b/fs/ext4/resize.c @@ -1341,6 +1341,8 @@ static void ext4_update_super(struct super_block *sb, /* Update the global fs size fields */ sbi->s_groups_count += flex_gd->count; + sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count, + (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb))); /* Update the reserved block counts only once the new group is * active. */
s_blockfile_groups is used to limit allocations for non-extent files to block groups with block numbers less than 2^32. However, it's not updated when the filesystem is resized online, so the new groups are unavailable to non-extent files until a remount. Fix this by updating the value in ext4_update_super() at resize time. Signed-off-by: Eric Sandeen <sandeen@redhat.com> --- -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html