mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-05 06:08:22 +00:00
xfs: xfs_iflush_cluster has range issues
xfs_iflush_cluster() does a gang lookup on the radix tree, meaning it can find inodes beyond the current cluster if there is sparse cache population. gang lookups return results in ascending index order, so stop trying to cluster inodes once the first inode outside the cluster mask is detected. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
8a17d7dded
commit
5a90e53e81
1 changed files with 11 additions and 2 deletions
|
@ -3207,11 +3207,20 @@ xfs_iflush_cluster(
|
|||
*/
|
||||
spin_lock(&iq->i_flags_lock);
|
||||
if (!iq->i_ino ||
|
||||
__xfs_iflags_test(iq, XFS_ISTALE) ||
|
||||
(XFS_INO_TO_AGINO(mp, iq->i_ino) & mask) != first_index) {
|
||||
__xfs_iflags_test(iq, XFS_ISTALE)) {
|
||||
spin_unlock(&iq->i_flags_lock);
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Once we fall off the end of the cluster, no point checking
|
||||
* any more inodes in the list because they will also all be
|
||||
* outside the cluster.
|
||||
*/
|
||||
if ((XFS_INO_TO_AGINO(mp, iq->i_ino) & mask) != first_index) {
|
||||
spin_unlock(&iq->i_flags_lock);
|
||||
break;
|
||||
}
|
||||
spin_unlock(&iq->i_flags_lock);
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Reference in a new issue