mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
527eeb43e5
While running xfstest 280, we occasionally got such error: setquota: Cannot set quota for user 0 from kernel on /dev/mapper/xfstests-disk1: No such device setquota: Cannot write quota for 0 on /dev/mapper/xfstests-disk1: No such device setquota calls syscall quotactl, and the kernel will wait for the filesystem to unfreeze and then performs command. Then kernel will double check if the device is still mounted. If not, an ENODEV will be thrown. While in the testcase, unfreeze and umount might be so close that the device got umounted before quotactl is performed. Reported-by: Stanislav Kholmanskikh <stanislav.kholmanskikh@oracle.com> Signed-off-by: Guangyu Sun <guangyu.sun@oracle.com> Reviewed-by: Eric Sandeen <sandeen@redaht.com> Signed-off-by: Rich Johnston <rjohnston@sgi.com>
74 lines
1.8 KiB
Bash
Executable File
74 lines
1.8 KiB
Bash
Executable File
#! /bin/bash
|
|
# FS QA Test No. 280
|
|
#
|
|
# Test quota vs. suspend/freeze deadlock,
|
|
# dcdbed85 quota: Fix deadlock with suspend and quotas
|
|
#
|
|
#-----------------------------------------------------------------------
|
|
# Copyright (c) 2012 Red Hat, Inc. All Rights Reserved.
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License as
|
|
# published by the Free Software Foundation.
|
|
#
|
|
# This program is distributed in the hope that it would be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write the Free Software Foundation,
|
|
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
#-----------------------------------------------------------------------
|
|
#
|
|
|
|
seq=`basename $0`
|
|
seqres=$RESULT_DIR/$seq
|
|
echo "QA output created by $seq"
|
|
|
|
here=`pwd`
|
|
tmp=/tmp/$$
|
|
status=1 # failure is the default!
|
|
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
|
|
_cleanup()
|
|
{
|
|
cd /
|
|
rm -f $tmp.*
|
|
}
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common/rc
|
|
. ./common/filter
|
|
. ./common/quota
|
|
|
|
_require_scratch
|
|
_require_quota
|
|
_require_freeze
|
|
|
|
# real QA test starts here
|
|
|
|
# Modify as appropriate.
|
|
_supported_os Linux
|
|
_supported_fs generic
|
|
|
|
rm -f $seqres.full
|
|
|
|
umount $SCRATCH_DEV 2>/dev/null
|
|
_scratch_mkfs >> $seqres.full 2>&1
|
|
_scratch_mount "-o usrquota,grpquota"
|
|
quotacheck -u -g $SCRATCH_MNT 2>/dev/null
|
|
quotaon $SCRATCH_MNT 2>/dev/null
|
|
xfs_freeze -f $SCRATCH_MNT
|
|
setquota -u root 1 2 3 4 $SCRATCH_MNT &
|
|
sleep 1
|
|
xfs_freeze -u $SCRATCH_MNT
|
|
sleep 1
|
|
umount $SCRATCH_DEV
|
|
|
|
# Failure comes in the form of a deadlock.
|
|
|
|
# success, all done
|
|
status=0
|
|
exit
|