On 09/20/12 08:32, Carlos Maiolino wrote:
xfs_ialloc_next_ag() currently resets m_agirotor when it is equal to m_maxagi:
if (++mp->m_agirotor == mp->m_maxagi)
mp->m_agirotor = 0;
But, if for some reason mp->m_maxagi changes to a lower value than current
m_agirotor, this condition will never be true, causing m_agirotor to exceed the
maximum allowed value (m_maxagi).
This implies mainly during lookups for xfs_perag structs in its radix tree,
since the agno value used for the lookup is based on m_agirotor. An out-of-range
m_agirotor may cause a lookup failure which in case will return NULL.
As an example, the value of m_maxagi is decreased during inode64->inode32
remount process, case where I've found this problem.
Signed-off-by: Carlos Maiolino<cmaiolino@xxxxxxxxxx>
---
Looks good.
Reviewed-by: Mark Tinguely <tinguely@xxxxxxx>
|