• Dave Chinner's avatar
    xfs: null unused quota inodes when quota is on · 03e01349
    Dave Chinner authored
    When quota is on, it is expected that unused quota inodes have a
    value of NULLFSINO. The changes to support a separate project quota
    in 3.12 broken this rule for non-project quota inode enabled
    filesystem, as the code now refuses to write the group quota inode
    if neither group or project quotas are enabled. This regression was
    introduced by commit d892d586 ("xfs: Start using pquotaino from the
    superblock").
    
    In this case, we should be writing NULLFSINO rather than nothing to
    ensure that we leave the group quota inode in a valid state while
    quotas are enabled.
    
    Failure to do so doesn't cause a current kernel to break - the
    separate project quota inodes introduced translation code to always
    treat a zero inode as NULLFSINO. This was introduced by commit
    01026297 ("xfs: Initialize all quota inodes to be NULLFSINO") with is
    also in 3.12 but older kernels do not do this and hence taking a
    filesystem back to an older kernel can result in quotas failing
    initialisation at mount time. When that happens, we see this in
    dmesg:
    
    [ 1649.215390] XFS (sdb): Mounting Filesystem
    [ 1649.316894] XFS (sdb): Failed to initialize disk quotas.
    [ 1649.316902] XFS (sdb): Ending clean mount
    
    By ensuring that we write NULLFSINO to quota inodes that aren't
    active, we avoid this problem. We have to be really careful when
    determining if the quota inodes are active or not, because we don't
    want to write a NULLFSINO if the quota inodes are active and we
    simply aren't updating them.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
    Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
    03e01349
xfs_sb.c 24.8 KB