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);
 | 
							agi->agi_dirino = cpu_to_be32(NULLAGINO);
 | 
				
			||||||
		if (xfs_sb_version_hascrc(&mp->m_sb))
 | 
							if (xfs_sb_version_hascrc(&mp->m_sb))
 | 
				
			||||||
			uuid_copy(&agi->agi_uuid, &mp->m_sb.sb_uuid);
 | 
								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++)
 | 
							for (bucket = 0; bucket < XFS_AGI_UNLINKED_BUCKETS; bucket++)
 | 
				
			||||||
			agi->agi_unlinked[bucket] = cpu_to_be32(NULLAGINO);
 | 
								agi->agi_unlinked[bucket] = cpu_to_be32(NULLAGINO);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -407,6 +411,34 @@ xfs_growfs_data_private(
 | 
				
			||||||
		xfs_buf_relse(bp);
 | 
							xfs_buf_relse(bp);
 | 
				
			||||||
		if (error)
 | 
							if (error)
 | 
				
			||||||
			goto error0;
 | 
								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);
 | 
						xfs_trans_agblocks_delta(tp, nfree);
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue