mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-04-13 09:59:31 +00:00
xfs: refactor eofb matching into a single helper
Refactor the two eofb-matching logics into a single helper so that we don't repeat ourselves. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
8921a0fda5
commit
a91bf9928e
1 changed files with 34 additions and 28 deletions
|
@ -1456,6 +1456,36 @@ xfs_inode_match_id_union(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Is this inode @ip eligible for eof/cow block reclamation, given some
|
||||||
|
* filtering parameters @eofb? The inode is eligible if @eofb is null or
|
||||||
|
* if the predicate functions match.
|
||||||
|
*/
|
||||||
|
static bool
|
||||||
|
xfs_inode_matches_eofb(
|
||||||
|
struct xfs_inode *ip,
|
||||||
|
struct xfs_eofblocks *eofb)
|
||||||
|
{
|
||||||
|
int match;
|
||||||
|
|
||||||
|
if (!eofb)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (eofb->eof_flags & XFS_EOF_FLAGS_UNION)
|
||||||
|
match = xfs_inode_match_id_union(ip, eofb);
|
||||||
|
else
|
||||||
|
match = xfs_inode_match_id(ip, eofb);
|
||||||
|
if (!match)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* skip the inode if the file size is too small */
|
||||||
|
if ((eofb->eof_flags & XFS_EOF_FLAGS_MINFILESIZE) &&
|
||||||
|
XFS_ISIZE(ip) < eofb->eof_min_file_size)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
STATIC int
|
STATIC int
|
||||||
xfs_inode_free_eofblocks(
|
xfs_inode_free_eofblocks(
|
||||||
struct xfs_inode *ip,
|
struct xfs_inode *ip,
|
||||||
|
@ -1463,7 +1493,6 @@ xfs_inode_free_eofblocks(
|
||||||
{
|
{
|
||||||
struct xfs_eofblocks *eofb = args;
|
struct xfs_eofblocks *eofb = args;
|
||||||
bool wait;
|
bool wait;
|
||||||
int match;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
wait = eofb && (eofb->eof_flags & XFS_EOF_FLAGS_SYNC);
|
wait = eofb && (eofb->eof_flags & XFS_EOF_FLAGS_SYNC);
|
||||||
|
@ -1482,20 +1511,9 @@ xfs_inode_free_eofblocks(
|
||||||
if (!wait && mapping_tagged(VFS_I(ip)->i_mapping, PAGECACHE_TAG_DIRTY))
|
if (!wait && mapping_tagged(VFS_I(ip)->i_mapping, PAGECACHE_TAG_DIRTY))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (eofb) {
|
if (!xfs_inode_matches_eofb(ip, eofb))
|
||||||
if (eofb->eof_flags & XFS_EOF_FLAGS_UNION)
|
|
||||||
match = xfs_inode_match_id_union(ip, eofb);
|
|
||||||
else
|
|
||||||
match = xfs_inode_match_id(ip, eofb);
|
|
||||||
if (!match)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* skip the inode if the file size is too small */
|
|
||||||
if (eofb->eof_flags & XFS_EOF_FLAGS_MINFILESIZE &&
|
|
||||||
XFS_ISIZE(ip) < eofb->eof_min_file_size)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the caller is waiting, return -EAGAIN to keep the background
|
* If the caller is waiting, return -EAGAIN to keep the background
|
||||||
* scanner moving and revisit the inode in a subsequent pass.
|
* scanner moving and revisit the inode in a subsequent pass.
|
||||||
|
@ -1737,26 +1755,14 @@ xfs_inode_free_cowblocks(
|
||||||
void *args)
|
void *args)
|
||||||
{
|
{
|
||||||
struct xfs_eofblocks *eofb = args;
|
struct xfs_eofblocks *eofb = args;
|
||||||
int match;
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (!xfs_prep_free_cowblocks(ip))
|
if (!xfs_prep_free_cowblocks(ip))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (eofb) {
|
if (!xfs_inode_matches_eofb(ip, eofb))
|
||||||
if (eofb->eof_flags & XFS_EOF_FLAGS_UNION)
|
|
||||||
match = xfs_inode_match_id_union(ip, eofb);
|
|
||||||
else
|
|
||||||
match = xfs_inode_match_id(ip, eofb);
|
|
||||||
if (!match)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* skip the inode if the file size is too small */
|
|
||||||
if (eofb->eof_flags & XFS_EOF_FLAGS_MINFILESIZE &&
|
|
||||||
XFS_ISIZE(ip) < eofb->eof_min_file_size)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Free the CoW blocks */
|
/* Free the CoW blocks */
|
||||||
xfs_ilock(ip, XFS_IOLOCK_EXCL);
|
xfs_ilock(ip, XFS_IOLOCK_EXCL);
|
||||||
xfs_ilock(ip, XFS_MMAPLOCK_EXCL);
|
xfs_ilock(ip, XFS_MMAPLOCK_EXCL);
|
||||||
|
|
Loading…
Add table
Reference in a new issue