xfs: add finobt support to growfs
Add finobt support to growfs. Initialize the agi root/level fields and the root finobt block. Signed-off-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
		
					parent
					
						
							
								3efa4ffd58
							
						
					
				
			
			
				commit
				
					
						a3fa516dd8
					
				
			
		
					 1 changed files with 32 additions and 0 deletions
				
			
		|  | @ -316,6 +316,10 @@ xfs_growfs_data_private( | |||
| 		agi->agi_dirino = cpu_to_be32(NULLAGINO); | ||||
| 		if (xfs_sb_version_hascrc(&mp->m_sb)) | ||||
| 			uuid_copy(&agi->agi_uuid, &mp->m_sb.sb_uuid); | ||||
| 		if (xfs_sb_version_hasfinobt(&mp->m_sb)) { | ||||
| 			agi->agi_free_root = cpu_to_be32(XFS_FIBT_BLOCK(mp)); | ||||
| 			agi->agi_free_level = cpu_to_be32(1); | ||||
| 		} | ||||
| 		for (bucket = 0; bucket < XFS_AGI_UNLINKED_BUCKETS; bucket++) | ||||
| 			agi->agi_unlinked[bucket] = cpu_to_be32(NULLAGINO); | ||||
| 
 | ||||
|  | @ -407,6 +411,34 @@ xfs_growfs_data_private( | |||
| 		xfs_buf_relse(bp); | ||||
| 		if (error) | ||||
| 			goto error0; | ||||
| 
 | ||||
| 		/*
 | ||||
| 		 * FINO btree root block | ||||
| 		 */ | ||||
| 		if (xfs_sb_version_hasfinobt(&mp->m_sb)) { | ||||
| 			bp = xfs_growfs_get_hdr_buf(mp, | ||||
| 				XFS_AGB_TO_DADDR(mp, agno, XFS_FIBT_BLOCK(mp)), | ||||
| 				BTOBB(mp->m_sb.sb_blocksize), 0, | ||||
| 				&xfs_inobt_buf_ops); | ||||
| 			if (!bp) { | ||||
| 				error = ENOMEM; | ||||
| 				goto error0; | ||||
| 			} | ||||
| 
 | ||||
| 			if (xfs_sb_version_hascrc(&mp->m_sb)) | ||||
| 				xfs_btree_init_block(mp, bp, XFS_FIBT_CRC_MAGIC, | ||||
| 						     0, 0, agno, | ||||
| 						     XFS_BTREE_CRC_BLOCKS); | ||||
| 			else | ||||
| 				xfs_btree_init_block(mp, bp, XFS_FIBT_MAGIC, 0, | ||||
| 						     0, agno, 0); | ||||
| 
 | ||||
| 			error = xfs_bwrite(bp); | ||||
| 			xfs_buf_relse(bp); | ||||
| 			if (error) | ||||
| 				goto error0; | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| 	xfs_trans_agblocks_delta(tp, nfree); | ||||
| 	/*
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Brian Foster
				Brian Foster