struct ll_file_data *fd;
ktime_t kstart = ktime_get();
int rc = 0;
+
ENTRY;
CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p), flags %o\n",
GOTO(out_och_free, rc);
}
- rc = pcc_file_open(inode, file);
- if (rc)
- GOTO(out_och_free, rc);
-
mutex_unlock(&lli->lli_och_mutex);
+ /* It is not from atomic_open(). */
+ if (it == &oit) {
+ rc = pcc_file_open(inode, file);
+ if (rc)
+ GOTO(out_och_free, rc);
+ }
+
/* lockless for direct IO so that it can do IO in parallel */
if (file->f_flags & O_DIRECT)
fd->fd_flags |= LL_FILE_LOCKLESS_IO;
local mntpt=$3
local size=${4:-50}
- do_facet $facet mkdir -p $mntpt || error "mkdir -p $hsm_root failed"
+ do_facet $facet mkdir -p $mntpt || error "mkdir -p $mntpt failed"
stack_trap "do_facet $facet rm -rf $mntpt" EXIT
do_facet $facet dd if=/dev/zero of=$file bs=1M count=$size
stack_trap "do_facet $facet rm -f $file" EXIT
}
run_test 10d "Test RO-PCC with group quota on loop PCC device"
+test_usrgrp_edquot() {
+ local loopfile="$TMP/$tfile"
+ local mntpt="/mnt/pcc.$tdir"
+ local hsm_root="$mntpt/$tdir"
+ local file=$DIR/$tfile
+ local id=$RUNAS_ID
+ local ug=$1
+
+ [[ $ug == "g" ]] && id=$RUNAS_GID
+ setup_loopdev $SINGLEAGT $loopfile $mntpt 50
+ do_facet $SINGLEAGT quotacheck -c$ug $mntpt ||
+ error "quotacheck -c$ug $mntpt failed"
+ do_facet $SINGLEAGT quotaon -$ug $mntpt ||
+ error "quotaon -$ug $mntpt failed"
+ do_facet $SINGLEAGT setquota -$ug $id 0 4096 0 0 $mntpt ||
+ error "setquota -$ug $id on $mntpt failed"
+ do_facet $SINGLEAGT repquota -${ug}vs $mntpt
+ do_facet $SINGLEAGT mkdir $hsm_root || error "mkdir $hsm_root failed"
+ setup_pcc_mapping $SINGLEAGT \
+ "${ug}id={$id}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1"
+ do_facet $SINGLEAGT $LCTL pcc list $MOUNT
+
+ dd if=/dev/zero of=$file bs=1M count=2 ||
+ error "dd write $file failed"
+ chown $RUNAS_ID:$RUNAS_GID $file ||
+ error "chown $RUNAS_ID:$RUNAS_GID $file failed"
+ do_facet $SINGLEAGT $RUNAS dd if=$file of=/dev/null bs=1M count=2 ||
+ error "dd read $file failed"
+ check_lpcc_state $file "readonly"
+ $LFS getstripe -v $file
+ do_facet $SINGLEAGT dd if=/dev/zero of=$file bs=1M count=5 ||
+ error "dd write $file failed"
+ check_lpcc_state $file "none"
+ do_facet $SINGLEAGT $RUNAS dd if=$file of=/dev/null bs=1M count=5 ||
+ error "dd read $file failed"
+ do_facet $SINGLEAGT $LFS pcc state $file
+ $LFS getstripe -v $file
+ do_facet $SINGLEAGT $LFS pcc attach -r -i $HSM_ARCHIVE_NUMBER $file ||
+ error "PCC-RO attach $file failed"
+}
+
+test_10e() {
+ test_usrgrp_edquot "u"
+}
+run_test 10e "Tolerate -EDQUOT failure when auto PCC-RO attach with user quota"
+
+test_10f() {
+ test_usrgrp_edquot "g"
+}
+run_test 10f "Tolerate -EDQUOT failure when auto PCC-RO attach with group quota"
+
test_11() {
local loopfile="$TMP/$tfile"
local mntpt="/mnt/pcc.$tdir"
}
run_test 34 "Cache rule with comparaotr (>, <) for Project ID range"
+test_35() {
+ local loopfile="$TMP/$tfile"
+ local mntpt="/mnt/pcc.$tdir"
+ local hsm_root="$mntpt/$tdir"
+ local file=$DIR/myfile.dat
+
+ setup_loopdev $SINGLEAGT $loopfile $mntpt 50
+ do_facet $SINGLEAGT mkdir $hsm_root || error "mkdir $hsm_root failed"
+ setup_pcc_mapping $SINGLEAGT \
+ "fname={*.dat}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1"
+ do_facet $SINGLEAGT $LCTL pcc list $MOUNT
+
+ do_facet $SINGLEAGT dd if=/dev/zero of=$file bs=4k count=1 ||
+ error "Write $file failed"
+ do_facet $SINGLEAGT dd if=$file of=/dev/null bs=4k count=1 ||
+ error "Read $file failed"
+ do_facet $SINGLEAGT $LFS pcc state $file
+ check_lpcc_state $file "readonly"
+ do_facet $SINGLEAGT dd if=/dev/zero of=$file bs=4k count=1 ||
+ error "Write $file failed"
+ sysctl vm.drop_caches=3
+ do_facet $SINGLEAGT dd if=$file of=/dev/null bs=4k count=1 ||
+ error "Read $file failed"
+ do_facet $SINGLEAGT $LFS pcc state $file
+ check_lpcc_state $file "readonly"
+}
+run_test 35 "Auto PCC-RO attach in atomic_open"
+
complete $SECONDS
check_and_cleanup_lustre
exit_status