@@ -875,6 +875,43 @@ xfs_last_rt_bmblock(
875
875
return bmbno ;
876
876
}
877
877
878
+ /*
879
+ * Allocate space to the bitmap and summary files, as necessary.
880
+ */
881
+ static int
882
+ xfs_growfs_rt_alloc_blocks (
883
+ struct xfs_mount * mp ,
884
+ xfs_rfsblock_t nrblocks ,
885
+ xfs_agblock_t rextsize ,
886
+ xfs_extlen_t * nrbmblocks )
887
+ {
888
+ struct xfs_inode * rbmip = mp -> m_rbmip ;
889
+ struct xfs_inode * rsumip = mp -> m_rsumip ;
890
+ xfs_rtxnum_t nrextents = div_u64 (nrblocks , rextsize );
891
+ xfs_extlen_t orbmblocks ;
892
+ xfs_extlen_t orsumblocks ;
893
+ xfs_extlen_t nrsumblocks ;
894
+ int error ;
895
+
896
+ /*
897
+ * Get the old block counts for bitmap and summary inodes.
898
+ * These can't change since other growfs callers are locked out.
899
+ */
900
+ orbmblocks = XFS_B_TO_FSB (mp , rbmip -> i_disk_size );
901
+ orsumblocks = XFS_B_TO_FSB (mp , rsumip -> i_disk_size );
902
+
903
+ * nrbmblocks = xfs_rtbitmap_blockcount (mp , nrextents );
904
+ nrsumblocks = xfs_rtsummary_blockcount (mp ,
905
+ xfs_compute_rextslog (nrextents ) + 1 , * nrbmblocks );
906
+
907
+ error = xfs_rtfile_initialize_blocks (rbmip , orbmblocks ,
908
+ * nrbmblocks , NULL );
909
+ if (error )
910
+ return error ;
911
+ return xfs_rtfile_initialize_blocks (rsumip , orsumblocks ,
912
+ nrsumblocks , NULL );
913
+ }
914
+
878
915
/*
879
916
* Grow the realtime area of the filesystem.
880
917
*/
@@ -889,8 +926,6 @@ xfs_growfs_rt(
889
926
xfs_extlen_t nrbmblocks ; /* new number of rt bitmap blocks */
890
927
xfs_rtxnum_t nrextents ; /* new number of realtime extents */
891
928
xfs_extlen_t nrsumblocks ; /* new number of summary blocks */
892
- xfs_extlen_t rbmblocks ; /* current number of rt bitmap blocks */
893
- xfs_extlen_t rsumblocks ; /* current number of rt summary blks */
894
929
uint8_t * rsum_cache ; /* old summary cache */
895
930
xfs_agblock_t old_rextsize = mp -> m_sb .sb_rextsize ;
896
931
@@ -963,21 +998,8 @@ xfs_growfs_rt(
963
998
goto out_unlock ;
964
999
}
965
1000
966
- /*
967
- * Get the old block counts for bitmap and summary inodes.
968
- * These can't change since other growfs callers are locked out.
969
- */
970
- rbmblocks = XFS_B_TO_FSB (mp , mp -> m_rbmip -> i_disk_size );
971
- rsumblocks = XFS_B_TO_FSB (mp , mp -> m_rsumip -> i_disk_size );
972
- /*
973
- * Allocate space to the bitmap and summary files, as necessary.
974
- */
975
- error = xfs_rtfile_initialize_blocks (mp -> m_rbmip , rbmblocks ,
976
- nrbmblocks , NULL );
977
- if (error )
978
- goto out_unlock ;
979
- error = xfs_rtfile_initialize_blocks (mp -> m_rsumip , rsumblocks ,
980
- nrsumblocks , NULL );
1001
+ error = xfs_growfs_rt_alloc_blocks (mp , in -> newblocks , in -> extsize ,
1002
+ & nrbmblocks );
981
1003
if (error )
982
1004
goto out_unlock ;
983
1005
0 commit comments