mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	ext4: use sb_issue_zeroout in setup_new_group_blocks
Use sb_issue_zeroout to zero out inode table and descriptor table blocks instead of old approach which involves journaling. Signed-off-by: Lukas Czerner <lczerner@redhat.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
		
							parent
							
								
									857ac889cc
								
							
						
					
					
						commit
						a31437b85a
					
				
					 1 changed files with 13 additions and 33 deletions
				
			
		| 
						 | 
				
			
			@ -226,23 +226,13 @@ static int setup_new_group_blocks(struct super_block *sb,
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	/* Zero out all of the reserved backup group descriptor table blocks */
 | 
			
		||||
	for (i = 0, bit = gdblocks + 1, block = start + bit;
 | 
			
		||||
	     i < reserved_gdb; i++, block++, bit++) {
 | 
			
		||||
		struct buffer_head *gdb;
 | 
			
		||||
	ext4_debug("clear inode table blocks %#04llx -> %#04llx\n",
 | 
			
		||||
			block, sbi->s_itb_per_group);
 | 
			
		||||
	err = sb_issue_zeroout(sb, gdblocks + start + 1, reserved_gdb,
 | 
			
		||||
			       GFP_NOFS, BLKDEV_IFL_WAIT);
 | 
			
		||||
	if (err)
 | 
			
		||||
		goto exit_bh;
 | 
			
		||||
 | 
			
		||||
		ext4_debug("clear reserved block %#04llx (+%d)\n", block, bit);
 | 
			
		||||
 | 
			
		||||
		if ((err = extend_or_restart_transaction(handle, 1, bh)))
 | 
			
		||||
			goto exit_bh;
 | 
			
		||||
 | 
			
		||||
		if (IS_ERR(gdb = bclean(handle, sb, block))) {
 | 
			
		||||
			err = PTR_ERR(gdb);
 | 
			
		||||
			goto exit_bh;
 | 
			
		||||
		}
 | 
			
		||||
		ext4_handle_dirty_metadata(handle, NULL, gdb);
 | 
			
		||||
		ext4_set_bit(bit, bh->b_data);
 | 
			
		||||
		brelse(gdb);
 | 
			
		||||
	}
 | 
			
		||||
	ext4_debug("mark block bitmap %#04llx (+%llu)\n", input->block_bitmap,
 | 
			
		||||
		   input->block_bitmap - start);
 | 
			
		||||
	ext4_set_bit(input->block_bitmap - start, bh->b_data);
 | 
			
		||||
| 
						 | 
				
			
			@ -251,23 +241,13 @@ static int setup_new_group_blocks(struct super_block *sb,
 | 
			
		|||
	ext4_set_bit(input->inode_bitmap - start, bh->b_data);
 | 
			
		||||
 | 
			
		||||
	/* Zero out all of the inode table blocks */
 | 
			
		||||
	for (i = 0, block = input->inode_table, bit = block - start;
 | 
			
		||||
	     i < sbi->s_itb_per_group; i++, bit++, block++) {
 | 
			
		||||
		struct buffer_head *it;
 | 
			
		||||
 | 
			
		||||
		ext4_debug("clear inode block %#04llx (+%d)\n", block, bit);
 | 
			
		||||
 | 
			
		||||
		if ((err = extend_or_restart_transaction(handle, 1, bh)))
 | 
			
		||||
			goto exit_bh;
 | 
			
		||||
 | 
			
		||||
		if (IS_ERR(it = bclean(handle, sb, block))) {
 | 
			
		||||
			err = PTR_ERR(it);
 | 
			
		||||
			goto exit_bh;
 | 
			
		||||
		}
 | 
			
		||||
		ext4_handle_dirty_metadata(handle, NULL, it);
 | 
			
		||||
		brelse(it);
 | 
			
		||||
		ext4_set_bit(bit, bh->b_data);
 | 
			
		||||
	}
 | 
			
		||||
	block = input->inode_table;
 | 
			
		||||
	ext4_debug("clear inode table blocks %#04llx -> %#04llx\n",
 | 
			
		||||
			block, sbi->s_itb_per_group);
 | 
			
		||||
	err = sb_issue_zeroout(sb, block, sbi->s_itb_per_group,
 | 
			
		||||
			       GFP_NOFS, BLKDEV_IFL_WAIT);
 | 
			
		||||
	if (err)
 | 
			
		||||
		goto exit_bh;
 | 
			
		||||
 | 
			
		||||
	if ((err = extend_or_restart_transaction(handle, 2, bh)))
 | 
			
		||||
		goto exit_bh;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue