• Jan Kara's avatar
    quota: Fix deadlock with suspend and quotas · dcdbed85
    Jan Kara authored
    This script causes a kernel deadlock:
    set -e
    DEVICE=/dev/vg1/linear
    lvchange -ay $DEVICE
    mkfs.ext3 $DEVICE
    mount -t ext3 -o usrquota,grpquota $DEVICE /mnt/test
    quotacheck -gu /mnt/test
    umount /mnt/test
    mount -t ext3 -o usrquota,grpquota $DEVICE /mnt/test
    quotaon /mnt/test
    dmsetup suspend $DEVICE
    setquota -u root 1 2 3 4 /mnt/test &
    sleep 1
    dmsetup resume $DEVICE
    
    setquota acquired semaphore s_umount for read and then tried to perform a
    transaction (and waits because the device is suspended).  dmsetup resume tries
    to acquire s_umount for write before resuming the device (and waits for
    setquota).
    
    Fix the deadlock by grabbing a thawed superblock for quota commands which need
    it.
    Reported-by: default avatarMikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    dcdbed85
quota.c 9.59 KB