xfs: implement the GETFSMAP ioctl

Introduce a new ioctl that uses the reverse mapping btree to return
information about the physical layout of the filesystem.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
This commit is contained in:
Darrick J. Wong 2017-03-28 14:56:37 -07:00
parent fb3c3de2f6
commit e89c041338
12 changed files with 1048 additions and 0 deletions

View file

@ -262,6 +262,28 @@ xfs_trans_alloc(
return 0;
}
/*
* Create an empty transaction with no reservation. This is a defensive
* mechanism for routines that query metadata without actually modifying
* them -- if the metadata being queried is somehow cross-linked (think a
* btree block pointer that points higher in the tree), we risk deadlock.
* However, blocks grabbed as part of a transaction can be re-grabbed.
* The verifiers will notice the corrupt block and the operation will fail
* back to userspace without deadlocking.
*
* Note the zero-length reservation; this transaction MUST be cancelled
* without any dirty data.
*/
int
xfs_trans_alloc_empty(
struct xfs_mount *mp,
struct xfs_trans **tpp)
{
struct xfs_trans_res resv = {0};
return xfs_trans_alloc(mp, &resv, 0, 0, XFS_TRANS_NO_WRITECOUNT, tpp);
}
/*
* Record the indicated change to the given field for application
* to the file system's superblock when the transaction commits.