[PATCH v6 08/10] xfs: support multiple inode id filtering in eofblocks scan
Brian Foster
bfoster at redhat.com
Tue Nov 6 08:50:45 CST 2012
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 at redhat.com>
---
fs/xfs/xfs_icache.c | 24 +++++++++++++-----------
1 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
index 699d1b0..d7372b1 100644
--- a/fs/xfs/xfs_icache.c
+++ b/fs/xfs/xfs_icache.c
@@ -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);
--
1.7.7.6
More information about the xfs
mailing list