mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-10 07:50:04 +00:00
xfs: support multiple inode id filtering in eofblocks scan
Enhance the eofblocks scan code to filter based on multiply specified inode id values. When multiple inode id values are specified, only inodes that match all id values are selected. Signed-off-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Mark Tinguely <tinguely@sgi.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
parent
3e3f9f5863
commit
1b5560488d
@ -1175,14 +1175,19 @@ xfs_inode_match_id(
|
||||
struct xfs_inode *ip,
|
||||
struct xfs_eofblocks *eofb)
|
||||
{
|
||||
if (eofb->eof_flags & XFS_EOF_FLAGS_UID)
|
||||
return ip->i_d.di_uid == eofb->eof_uid;
|
||||
else if (eofb->eof_flags & XFS_EOF_FLAGS_GID)
|
||||
return ip->i_d.di_gid == eofb->eof_gid;
|
||||
else if (eofb->eof_flags & XFS_EOF_FLAGS_PRID)
|
||||
return xfs_get_projid(ip) == eofb->eof_prid;
|
||||
if (eofb->eof_flags & XFS_EOF_FLAGS_UID &&
|
||||
ip->i_d.di_uid != eofb->eof_uid)
|
||||
return 0;
|
||||
|
||||
return 0;
|
||||
if (eofb->eof_flags & XFS_EOF_FLAGS_GID &&
|
||||
ip->i_d.di_gid != eofb->eof_gid)
|
||||
return 0;
|
||||
|
||||
if (eofb->eof_flags & XFS_EOF_FLAGS_PRID &&
|
||||
xfs_get_projid(ip) != eofb->eof_prid)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
STATIC int
|
||||
@ -1210,10 +1215,7 @@ xfs_inode_free_eofblocks(
|
||||
mapping_tagged(VFS_I(ip)->i_mapping, PAGECACHE_TAG_DIRTY))
|
||||
return 0;
|
||||
|
||||
if (eofb &&
|
||||
(eofb->eof_flags & (XFS_EOF_FLAGS_UID|XFS_EOF_FLAGS_GID|
|
||||
XFS_EOF_FLAGS_PRID)) &&
|
||||
!xfs_inode_match_id(ip, eofb))
|
||||
if (eofb && !xfs_inode_match_id(ip, eofb))
|
||||
return 0;
|
||||
|
||||
ret = xfs_free_eofblocks(ip->i_mount, ip, true);
|
||||
|
Loading…
x
Reference in New Issue
Block a user