Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 289779 Details for
Bug 425955
resize2fs online resize fails with small journal
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
patch from upstream
ext3-resize-transaction.patch (text/plain), 4.39 KB, created by
Bryn M. Reeves
on 2007-12-17 12:59:43 UTC
(
hide
)
Description:
patch from upstream
Filename:
MIME Type:
Creator:
Bryn M. Reeves
Created:
2007-12-17 12:59:43 UTC
Size:
4.39 KB
patch
obsolete
>commit 1ad6ecf9146e85ccb4e0bce70b91a93f57145c72 >Author: Eric Sandeen <sandeen@redhat.com> >Date: Tue Oct 16 23:30:28 2007 -0700 > > ext3: lighten up resize transaction requirements > > When resizing online, setup_new_group_blocks attempts to reserve a > potentially very large transaction, depending on the current filesystem > geometry. For some journal sizes, there may not be enough room for this > transaction, and the online resize will fail. > > The patch below resizes & restarts the transaction as necessary while > setting up the new group, and should work with even the smallest journal. > > Tested with something like: > > [root@newbox ~]# dd if=/dev/zero of=fsfile bs=1024 count=32768 > [root@newbox ~]# mkfs.ext3 -b 1024 fsfile 16384 > [root@newbox ~]# mount -o loop fsfile mnt/ > [root@newbox ~]# resize2fs /dev/loop0 > resize2fs 1.40.2 (12-Jul-2007) > Filesystem at /dev/loop0 is mounted on /root/mnt; on-line resizing required > old desc_blocks = 1, new_desc_blocks = 1 > Performing an on-line resize of /dev/loop0 to 32768 (1k) blocks. > resize2fs: No space left on device While trying to add group #2 > [root@newbox ~]# dmesg | tail -n 1 > JBD: resize2fs wants too many credits (258 > 256) > [root@newbox ~]# > > With the below change, it works. > > [akpm@linux-foundation.org: coding-style fixes] > Signed-off-by: Eric Sandeen <sandeen@redhat.com> > Acked-by: Andreas Dilger <adilger@clusterfs.com> > Cc: <linux-ext4@vger.kernel.org> > Signed-off-by: Andrew Morton <akpm@linux-foundation.org> > Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> > >diff --git a/fs/ext3/resize.c b/fs/ext3/resize.c >index a4693c0..771f7ad 100644 >--- a/fs/ext3/resize.c >+++ b/fs/ext3/resize.c >@@ -154,6 +154,34 @@ static void mark_bitmap_end(int start_bit, int end_bit, char *bitmap) > } > > /* >+ * If we have fewer than thresh credits, extend by EXT3_MAX_TRANS_DATA. >+ * If that fails, restart the transaction & regain write access for the >+ * buffer head which is used for block_bitmap modifications. >+ */ >+static int extend_or_restart_transaction(handle_t *handle, int thresh, >+ struct buffer_head *bh) >+{ >+ int err; >+ >+ if (handle->h_buffer_credits >= thresh) >+ return 0; >+ >+ err = ext3_journal_extend(handle, EXT3_MAX_TRANS_DATA); >+ if (err < 0) >+ return err; >+ if (err) { >+ err = ext3_journal_restart(handle, EXT3_MAX_TRANS_DATA); >+ if (err) >+ return err; >+ err = ext3_journal_get_write_access(handle, bh); >+ if (err) >+ return err; >+ } >+ >+ return 0; >+} >+ >+/* > * Set up the block and inode bitmaps, and the inode table for the new group. > * This doesn't need to be part of the main transaction, since we are only > * changing blocks outside the actual filesystem. We still do journaling to >@@ -175,8 +203,9 @@ static int setup_new_group_blocks(struct super_block *sb, > int i; > int err = 0, err2; > >- handle = ext3_journal_start_sb(sb, reserved_gdb + gdblocks + >- 2 + sbi->s_itb_per_group); >+ /* This transaction may be extended/restarted along the way */ >+ handle = ext3_journal_start_sb(sb, EXT3_MAX_TRANS_DATA); >+ > if (IS_ERR(handle)) > return PTR_ERR(handle); > >@@ -203,6 +232,10 @@ static int setup_new_group_blocks(struct super_block *sb, > > ext3_debug("update backup group %#04lx (+%d)\n", block, bit); > >+ err = extend_or_restart_transaction(handle, 1, bh); >+ if (err) >+ goto exit_bh; >+ > gdb = sb_getblk(sb, block); > if (!gdb) { > err = -EIO; >@@ -228,6 +261,10 @@ static int setup_new_group_blocks(struct super_block *sb, > > ext3_debug("clear reserved block %#04lx (+%d)\n", block, bit); > >+ err = extend_or_restart_transaction(handle, 1, bh); >+ if (err) >+ goto exit_bh; >+ > if (IS_ERR(gdb = bclean(handle, sb, block))) { > err = PTR_ERR(bh); > goto exit_bh; >@@ -249,6 +286,11 @@ static int setup_new_group_blocks(struct super_block *sb, > struct buffer_head *it; > > ext3_debug("clear inode block %#04lx (+%d)\n", block, bit); >+ >+ err = extend_or_restart_transaction(handle, 1, bh); >+ if (err) >+ goto exit_bh; >+ > if (IS_ERR(it = bclean(handle, sb, block))) { > err = PTR_ERR(it); > goto exit_bh; >@@ -257,6 +299,11 @@ static int setup_new_group_blocks(struct super_block *sb, > brelse(it); > ext3_set_bit(bit, bh->b_data); > } >+ >+ err = extend_or_restart_transaction(handle, 2, bh); >+ if (err) >+ goto exit_bh; >+ > mark_bitmap_end(input->blocks_count, EXT3_BLOCKS_PER_GROUP(sb), > bh->b_data); > ext3_journal_dirty_metadata(handle, bh);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 425955
: 289779