patch-2.4.21 linux-2.4.21/fs/reiserfs/stree.c
Next file: linux-2.4.21/fs/reiserfs/super.c
Previous file: linux-2.4.21/fs/reiserfs/namei.c
Back to the patch index
Back to the overall index
- Lines: 22
- Date:
2003-06-13 07:51:37.000000000 -0700
- Orig file:
linux-2.4.20/fs/reiserfs/stree.c
- Orig date:
2002-11-28 15:53:15.000000000 -0800
diff -urN linux-2.4.20/fs/reiserfs/stree.c linux-2.4.21/fs/reiserfs/stree.c
@@ -1125,6 +1125,21 @@
journal_mark_dirty (th, p_s_sb, p_s_bh);
inode->i_blocks -= p_s_sb->s_blocksize / 512;
reiserfs_free_block(th, tmp);
+ /* In case of big fragmentation it is possible that each block
+ freed will cause dirtying of one more bitmap and then we will
+ quickly overflow our transaction space. This is a
+ counter-measure against that scenario */
+ if (journal_transaction_should_end(th, th->t_blocks_allocated)) {
+ int orig_len_alloc = th->t_blocks_allocated ;
+ pathrelse(p_s_path) ;
+
+ journal_end(th, p_s_sb, orig_len_alloc) ;
+ journal_begin(th, p_s_sb, orig_len_alloc) ;
+ reiserfs_update_inode_transaction(inode) ;
+ need_research = 1;
+ break;
+ }
+
if ( item_moved (&s_ih, p_s_path) ) {
need_research = 1;
break ;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)