xfs
[Top] [All Lists]

[PATCH 11/18] xfs: reduce min. inode allocation space requirement for sp

To: xfs@xxxxxxxxxxx
Subject: [PATCH 11/18] xfs: reduce min. inode allocation space requirement for sparse inode chunks
From: Brian Foster <bfoster@xxxxxxxxxx>
Date: Thu, 24 Jul 2014 10:23:01 -0400
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1406211788-63206-1-git-send-email-bfoster@xxxxxxxxxx>
References: <1406211788-63206-1-git-send-email-bfoster@xxxxxxxxxx>
xfs_ialloc_ag_select() iterates through the allocation groups looking
for free inodes or free space to determine whether to allow an inode
allocation to proceed. If no free inodes are available, it assumes that
an AG must have an extent longer than mp->m_ialloc_blks.

Sparse inode chunk support currently allows for allocations as small as
the cluster size. If sparse inodes are supported, use the cluster
alignment as a minimum extent size limit to determine whether an inode
chunk allocation attempt can proceed.

Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx>
---
 fs/xfs/libxfs/xfs_ialloc.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/fs/xfs/libxfs/xfs_ialloc.c b/fs/xfs/libxfs/xfs_ialloc.c
index 4dd45c2..4e98a21 100644
--- a/fs/xfs/libxfs/xfs_ialloc.c
+++ b/fs/xfs/libxfs/xfs_ialloc.c
@@ -770,9 +770,15 @@ xfs_ialloc_ag_select(
 
                /*
                 * Is there enough free space for the file plus a block of
-                * inodes? (if we need to allocate some)?
+                * inodes? (if we need to allocate some)? If sparse inode chunks
+                * are supported, we only require an extent of length equal to
+                * the cluster size.
                 */
-               ineed = mp->m_ialloc_blks;
+               if (xfs_sb_version_hassparseinodes(&mp->m_sb))
+                       ineed = xfs_ialloc_cluster_alignment(mp);
+               else
+                       ineed = mp->m_ialloc_blks;
+
                longest = pag->pagf_longest;
                if (!longest)
                        longest = pag->pagf_flcount > 0;
-- 
1.8.3.1

<Prev in Thread] Current Thread [Next in Thread>