• A
    gfs2: fix quota refresh race in do_glock() · 30133177
    Abhi Das 提交于
    quotad periodically syncs in-memory quotas to the ondisk quota file
    and sets the QDF_REFRESH flag so that a subsequent read of a synced
    quota is re-read from disk.
    
    gfs2_quota_lock() checks for this flag and sets a 'force' bit to
    force re-read from disk if requested. However, there is a race
    condition here. It is possible for gfs2_quota_lock() to find the
    QDF_REFRESH flag unset (i.e force=0) and quotad comes in immediately
    after and syncs the relevant quota and sets the QDF_REFRESH flag.
    gfs2_quota_lock() resumes with force=0 and uses the stale in-memory
    quota usage values that result in miscalculations.
    
    This patch fixes this race by moving the check for the QDF_REFRESH
    flag check further out into the gfs2_quota_lock() process, i.e, in
    do_glock(), under the protection of the quota glock.
    Signed-off-by: NAbhi Das <adas@redhat.com>
    Signed-off-by: NBob Peterson <rpeterso@redhat.com>
    Acked-by: NSteven Whitehouse <swhiteho@redhat.com>
    30133177
quota.c 40.1 KB