• Jan Kara's avatar
    quota: Fix quota corruption with generic/232 test · 4c6bb696
    Jan Kara authored
    Eric has reported that since commit d2faa415 "quota: Do not acquire
    dqio_sem for dquot overwrites in v2 format" test generic/232
    occasionally fails due to quota information being incorrect. Indeed that
    commit was too eager to remove dqio_sem completely from the path that
    just overwrites quota structure with updated information. Although that
    is innocent on its own, another process that inserts new quota structure
    to the same block can perform read-modify-write cycle of that block thus
    effectively discarding quota information update if they race in a wrong
    way.
    
    Fix the problem by acquiring dqio_sem for reading for overwrites of
    quota structure. Note that it *is* possible to completely avoid taking
    dqio_sem in the overwrite path however that will require modifying path
    inserting / deleting quota structures to avoid RMW cycles of the full
    block and for now it is not clear whether it is worth the hassle.
    
    Fixes: d2faa415Reported-and-tested-by: 's avatarEric Whitney <enwlinux@gmail.com>
    Signed-off-by: 's avatarJan Kara <jack@suse.cz>
    4c6bb696