xfs: introduce the CoW fork
Introduce a new in-core fork for storing copy-on-write delalloc reservations and allocated extents that are in the process of being written out. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
@@ -1263,9 +1263,10 @@ out_cur:
|
||||
*/
|
||||
static bool
|
||||
xfs_rmap_update_is_needed(
|
||||
struct xfs_mount *mp)
|
||||
struct xfs_mount *mp,
|
||||
int whichfork)
|
||||
{
|
||||
return xfs_sb_version_hasrmapbt(&mp->m_sb);
|
||||
return xfs_sb_version_hasrmapbt(&mp->m_sb) && whichfork != XFS_COW_FORK;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1311,7 +1312,7 @@ xfs_rmap_map_extent(
|
||||
int whichfork,
|
||||
struct xfs_bmbt_irec *PREV)
|
||||
{
|
||||
if (!xfs_rmap_update_is_needed(mp))
|
||||
if (!xfs_rmap_update_is_needed(mp, whichfork))
|
||||
return 0;
|
||||
|
||||
return __xfs_rmap_add(mp, dfops, XFS_RMAP_MAP, ip->i_ino,
|
||||
@@ -1327,7 +1328,7 @@ xfs_rmap_unmap_extent(
|
||||
int whichfork,
|
||||
struct xfs_bmbt_irec *PREV)
|
||||
{
|
||||
if (!xfs_rmap_update_is_needed(mp))
|
||||
if (!xfs_rmap_update_is_needed(mp, whichfork))
|
||||
return 0;
|
||||
|
||||
return __xfs_rmap_add(mp, dfops, XFS_RMAP_UNMAP, ip->i_ino,
|
||||
@@ -1343,7 +1344,7 @@ xfs_rmap_convert_extent(
|
||||
int whichfork,
|
||||
struct xfs_bmbt_irec *PREV)
|
||||
{
|
||||
if (!xfs_rmap_update_is_needed(mp))
|
||||
if (!xfs_rmap_update_is_needed(mp, whichfork))
|
||||
return 0;
|
||||
|
||||
return __xfs_rmap_add(mp, dfops, XFS_RMAP_CONVERT, ip->i_ino,
|
||||
@@ -1362,7 +1363,7 @@ xfs_rmap_alloc_extent(
|
||||
{
|
||||
struct xfs_bmbt_irec bmap;
|
||||
|
||||
if (!xfs_rmap_update_is_needed(mp))
|
||||
if (!xfs_rmap_update_is_needed(mp, XFS_DATA_FORK))
|
||||
return 0;
|
||||
|
||||
bmap.br_startblock = XFS_AGB_TO_FSB(mp, agno, bno);
|
||||
@@ -1386,7 +1387,7 @@ xfs_rmap_free_extent(
|
||||
{
|
||||
struct xfs_bmbt_irec bmap;
|
||||
|
||||
if (!xfs_rmap_update_is_needed(mp))
|
||||
if (!xfs_rmap_update_is_needed(mp, XFS_DATA_FORK))
|
||||
return 0;
|
||||
|
||||
bmap.br_startblock = XFS_AGB_TO_FSB(mp, agno, bno);
|
||||
|
||||
Reference in New Issue
Block a user