• Jie Liu's avatar
    xfs: fix false assertion at xfs_qm_vop_create_dqattach · 37eb9706
    Jie Liu authored
    After the previous fix, there still has another ASSERT failure if turning
    off any type of quota while fsstress is running at the same time.
    
    Backtrace in this case:
    
    [   50.867897] XFS: Assertion failed: XFS_IS_GQUOTA_ON(mp), file: fs/xfs/xfs_qm.c, line: 2118
    [   50.867924] ------------[ cut here ]------------
    ... <snip>
    [   50.867957] Kernel BUG at ffffffffa0b55a32 [verbose debug info unavailable]
    [   50.867999] invalid opcode: 0000 [#1] SMP
    [   50.869407] Call Trace:
    [   50.869446]  [<ffffffffa0bc408a>] xfs_qm_vop_create_dqattach+0x19a/0x2d0 [xfs]
    [   50.869512]  [<ffffffffa0b9cc45>] xfs_create+0x5c5/0x6a0 [xfs]
    [   50.869564]  [<ffffffffa0b5307c>] xfs_vn_mknod+0xac/0x1d0 [xfs]
    [   50.869615]  [<ffffffffa0b531d6>] xfs_vn_mkdir+0x16/0x20 [xfs]
    [   50.869655]  [<ffffffff811becd5>] vfs_mkdir+0x95/0x130
    [   50.869689]  [<ffffffff811bf63a>] SyS_mkdirat+0xaa/0xe0
    [   50.869723]  [<ffffffff811bf689>] SyS_mkdir+0x19/0x20
    [   50.869757]  [<ffffffff8170f7dd>] system_call_fastpath+0x1a/0x1f
    [   50.869793] Code: 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 55 48 89 <snip>
    [   50.870003] RIP  [<ffffffffa0b55a32>] assfail+0x22/0x30 [xfs]
    [   50.870050]  RSP <ffff88002941fd60>
    [   50.879251] ---[ end trace c93a2b342341c65b ]---
    
    We're hitting the ASSERT(XFS_IS_*QUOTA_ON(mp)) in xfs_qm_vop_create_dqattach(),
    however the assertion itself is not right IMHO.  While performing quota off, we
    firstly clear the XFS_*QUOTA_ACTIVE bit(s) from struct xfs_mount without taking
    any special locks, see xfs_qm_scall_quotaoff().  Hence there is no guarantee
    that the desired quota is still active.
    Signed-off-by: default avatarJie Liu <jeff.liu@oracle.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarBen Myers <bpm@sgi.com>
    37eb9706
xfs_qm.c 50.4 KB