Skip to content

Commit

Permalink
xfs: support multiple inode id filtering in eofblocks scan
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Brian Foster authored and Ben Myers committed Nov 8, 2012
1 parent 3e3f9f5 commit 1b55604
Showing 1 changed file with 13 additions and 11 deletions.
24 changes: 13 additions & 11 deletions fs/xfs/xfs_icache.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 1b55604

Please sign in to comment.