]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: refcount btree add more reserved blocks
authorDarrick J. Wong <darrick.wong@oracle.com>
Tue, 25 Oct 2016 00:49:22 +0000 (11:49 +1100)
committerDave Chinner <david@fromorbit.com>
Tue, 25 Oct 2016 00:49:22 +0000 (11:49 +1100)
Source kernel commit: af30dfa14411e9df0e69c6e46e8c6c467b88229d

Since XFS reserves a small amount of space in each AG as the minimum
free space needed for an operation, save some more space in case we
touch the refcount btree.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
libxfs/xfs_alloc.c
libxfs/xfs_format.h

index 5f46460e5ec02cae85567ff317a733fa4762d36d..ee72d137f5ddcced669e5a95ff089a2db9094a73 100644 (file)
@@ -48,10 +48,23 @@ STATIC int xfs_alloc_ag_vextent_size(xfs_alloc_arg_t *);
 STATIC int xfs_alloc_ag_vextent_small(xfs_alloc_arg_t *,
                xfs_btree_cur_t *, xfs_agblock_t *, xfs_extlen_t *, int *);
 
+unsigned int
+xfs_refc_block(
+       struct xfs_mount        *mp)
+{
+       if (xfs_sb_version_hasrmapbt(&mp->m_sb))
+               return XFS_RMAP_BLOCK(mp) + 1;
+       if (xfs_sb_version_hasfinobt(&mp->m_sb))
+               return XFS_FIBT_BLOCK(mp) + 1;
+       return XFS_IBT_BLOCK(mp) + 1;
+}
+
 xfs_extlen_t
 xfs_prealloc_blocks(
        struct xfs_mount        *mp)
 {
+       if (xfs_sb_version_hasreflink(&mp->m_sb))
+               return xfs_refc_block(mp) + 1;
        if (xfs_sb_version_hasrmapbt(&mp->m_sb))
                return XFS_RMAP_BLOCK(mp) + 1;
        if (xfs_sb_version_hasfinobt(&mp->m_sb))
index 04af78129782de68efbbaccce749bd4e237ec5cb..8910602d2d23f904506a9ab5940eb55d1da3e460 100644 (file)
@@ -1455,6 +1455,8 @@ typedef __be32 xfs_rmap_ptr_t;
  */
 #define        XFS_REFC_CRC_MAGIC      0x52334643      /* 'R3FC' */
 
+unsigned int xfs_refc_block(struct xfs_mount *mp);
+
 
 /*
  * BMAP Btree format definitions