}
run_test 41 "Test mtime rule for PCC-RO open attach with O_RDONLY mode"
+test_99() {
+ local loopfile="$TMP/$tfile"
+ local mntpt="/mnt/pcc.$tdir"
+ local hsm_root="$mntpt/$tdir"
+ local file=$DIR/$tfile
+
+ setup_loopdev $SINGLEAGT $loopfile $mntpt 60
+ do_facet $SINGLEAGT mkdir $hsm_root || error "mkdir $hsm_root failed"
+ setup_pcc_mapping $SINGLEAGT \
+ "projid={0}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1"
+ do_facet $SINGLEAGT $LCTL pcc list $MOUNT
+
+ do_facet $SINGLEAGT dd if=/dev/zero of=$file bs=1M count=50 ||
+ error "Write $file failed"
+
+ local rpid
+ local rpid2
+ local wpid
+ local upid
+ local dpid
+ local lpcc_path
+
+ lpcc_path=$(lpcc_fid2path $hsm_root $file)
+ (
+ while [ ! -e $DIR/sanity-pcc.42.lck ]; do
+ do_facet $SINGLEAGT dd if=/dev/zero of=$file bs=1M count=50 conv=notrunc ||
+ error "failed to write $file"
+ sleep 0.$((RANDOM % 4 + 1))
+ done
+ )&
+ wpid=$!
+
+ (
+ while [ ! -e $DIR/sanity-pcc.42.lck ]; do
+ do_facet $SINGLEAGT dd if=$file of=/dev/null bs=1M count=50 ||
+ error "failed to write $file"
+ sleep 0.$((RANDOM % 4 + 1))
+ done
+ )&
+ rpid=$!
+
+ (
+ while [ ! -e $DIR/sanity-pcc.42.lck ]; do
+ do_facet $SINGLEAGT $MMAP_CAT $file > /dev/null ||
+ error "failed to mmap_cat $file"
+ sleep 0.$((RANDOM % 4 + 1))
+ done
+ )&
+ rpid2=$!
+
+ (
+ while [ ! -e $DIR/sanity-pcc.42.lck ]; do
+ echo "Unlink $lpcc_path"
+ do_facet $SINGLEAGT unlink $lpcc_path
+ sleep 1
+ done
+ true
+ )&
+ upid=$!
+
+ (
+ while [ ! -e $DIR/sanity-pcc.42.lck ]; do
+ echo "Detach $file ..."
+ do_facet $SINGLEAGT $LFS pcc detach $file
+ sleep 0.$((RANDOM % 8 + 1))
+ done
+ )&
+ dpid=$!
+
+ sleep 60
+ touch $DIR/sanity-pcc.42.lck
+ wait $wpid || error "$?: write failed"
+ wait $rpid || error "$?: read failed"
+ wait $rpid2 || error "$?: read2 failed"
+ wait $upid || error "$?: unlink failed"
+ wait $dpid || error "$?: detach failed"
+
+ do_facet $SINGLEAGT $LFS pcc detach $file
+}
+run_test 99 "race among unlink | mmap read | write | detach for PCC-RO file"
+
test_100() {
local loopfile="$TMP/$tfile"
local mntpt="/mnt/pcc.$tdir"