return rc;
}
- switch (cmd->pccc_cmd) {
- case PCC_ADD_DATASET:
- if (cmd->u.pccc_add.pccc_flags & PCC_DATASET_RWPCC &&
- cmd->u.pccc_add.pccc_flags & PCC_DATASET_ROPCC)
- return -EINVAL;
- /*
- * By default, a PCC backend can provide caching service for
- * both PCC-RW and PCC-RO.
- */
- if ((cmd->u.pccc_add.pccc_flags & PCC_DATASET_PCC_ALL) == 0)
- cmd->u.pccc_add.pccc_flags |= PCC_DATASET_PCC_ALL;
-
- if (cmd->u.pccc_add.pccc_rwid == 0 &&
- cmd->u.pccc_add.pccc_roid == 0)
- return -EINVAL;
-
- if (cmd->u.pccc_add.pccc_rwid == 0 &&
- cmd->u.pccc_add.pccc_flags & PCC_DATASET_RWPCC)
- cmd->u.pccc_add.pccc_rwid = cmd->u.pccc_add.pccc_roid;
-
- if (cmd->u.pccc_add.pccc_roid == 0 &&
- cmd->u.pccc_add.pccc_flags & PCC_DATASET_ROPCC)
- cmd->u.pccc_add.pccc_roid = cmd->u.pccc_add.pccc_rwid;
-
- break;
- case PCC_DEL_DATASET:
- case PCC_CLEAR_ALL:
- break;
- default:
- return -EINVAL;
- }
return 0;
}
return selected;
}
+static int
+pcc_dataset_flags_check(struct pcc_super *super, struct pcc_cmd *cmd)
+{
+ struct ll_sb_info *sbi;
+
+ sbi = container_of(super, struct ll_sb_info, ll_pcc_super);
+
+ if (cmd->u.pccc_add.pccc_flags & PCC_DATASET_RWPCC &&
+ cmd->u.pccc_add.pccc_flags & PCC_DATASET_ROPCC)
+ return -EINVAL;
+
+ if (cmd->u.pccc_add.pccc_flags & PCC_DATASET_ROPCC &&
+ !(exp_connect_flags2(sbi->ll_md_exp) & OBD_CONNECT2_PCCRO))
+ return -EOPNOTSUPP;
+
+ /*
+ * By default, a PCC backend can provide caching service for
+ * both RW-PCC and RO-PCC.
+ */
+ if ((cmd->u.pccc_add.pccc_flags & PCC_DATASET_PCC_ALL) == 0) {
+ cmd->u.pccc_add.pccc_flags |= PCC_DATASET_RWPCC;
+ if (exp_connect_flags2(sbi->ll_md_exp) & OBD_CONNECT2_PCCRO)
+ cmd->u.pccc_add.pccc_flags |= PCC_DATASET_ROPCC;
+ }
+
+ if (cmd->u.pccc_add.pccc_rwid == 0 &&
+ cmd->u.pccc_add.pccc_roid == 0)
+ return -EINVAL;
+
+ if (cmd->u.pccc_add.pccc_rwid == 0 &&
+ cmd->u.pccc_add.pccc_flags & PCC_DATASET_RWPCC)
+ cmd->u.pccc_add.pccc_rwid = cmd->u.pccc_add.pccc_roid;
+
+ if (cmd->u.pccc_add.pccc_roid == 0 &&
+ cmd->u.pccc_add.pccc_flags & PCC_DATASET_ROPCC)
+ cmd->u.pccc_add.pccc_roid = cmd->u.pccc_add.pccc_rwid;
+
+ return 0;
+}
+
/**
* pcc_dataset_add - Add a Cache policy to control which files need be
* cached and where it will be cached.
bool found = false;
int rc;
+ rc = pcc_dataset_flags_check(super, cmd);
+ if (rc)
+ return rc;
+
OBD_ALLOC_PTR(dataset);
if (dataset == NULL)
return -ENOMEM;
local file=$DIR/$tdir/$tfile
local file2=$DIR2/$tdir/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping $SINGLEAGT \
"projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
run_test 10b "Test RW-PCC with group quota on loop PCC device"
test_10c() {
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
test_usrgrp_quota "u" "-r"
}
run_test 10c "Test RO-PCC with user quota on loop PCC device"
test_10d() {
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
test_usrgrp_quota "g" "-r"
}
run_test 10d "Test RO-PCC with group quota on loop PCC device"
local id=$RUNAS_ID
local ug=$1
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
[[ $ug == "g" ]] && id=$RUNAS_GID
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
do_facet $SINGLEAGT quotacheck -c$ug $mntpt ||
test_14() {
local file=$DIR/$tdir/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping $SINGLEAGT \
"projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
local hsm_root="$mntpt/$tdir"
local file=$DIR/$tdir/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping
local file=$DIR/$tfile
local -a lpcc_path
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping
local hsm_root="$mntpt/$tdir"
local file=$DIR/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping $SINGLEAGT \
local hsm_root="$mntpt/$tdir"
local file=$DIR/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping $SINGLEAGT \
local file=$DIR/$tfile
local fid
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping $SINGLEAGT \
local hsm_root="$mntpt/$tdir"
local file=$DIR/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping
local hsm_root="$mntpt/$tdir"
local file=$DIR/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping
local hsm_root="$mntpt/$tdir"
local file=$DIR/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping
local hsm_root="$mntpt/$tdir"
local file=$DIR/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping $SINGLEAGT \
local hsm_root="$mntpt/$tdir"
local file=$DIR/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping $SINGLEAGT \
local file2=$DIR2/$tfile
local fid
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping $SINGLEAGT \
local file2=$DIR2/$tfile
local fid
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping $SINGLEAGT \
local file=$DIR/$tfile
local -a lpcc_path
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping
local file=$DIR/$tdir/$tfile
local -a lpcc_path
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping $SINGLEAGT \
local hsm_root="$mntpt/$tdir"
local file=$DIR/$tdir/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping
local file=$DIR/$tdir/$tfile
local content
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping
local hsm_root="$mntpt/$tdir"
local file=$DIR/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER" -h "$hsm_root"
setup_pcc_mapping $SINGLEAGT \
local hsm_root="$mntpt/$tdir"
local file=$DIR/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER" -h "$hsm_root"
setup_pcc_mapping $SINGLEAGT \
local file=$DIR/$tdir/$tfile
local file2=$DIR2/$tdir/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
is_project_quota_supported || skip "project quota is not supported"
enable_project_quota
local hsm_root="$mntpt/$tdir"
local file=$DIR/myfile.dat
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
do_facet $SINGLEAGT mkdir $hsm_root || error "mkdir $hsm_root failed"
setup_pcc_mapping $SINGLEAGT \
local hsm_root="$mntpt/$tdir"
local file
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping
local -a lpcc_path3
local file
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping $SINGLEAGT \
local file=$DIR/$tfile
local -a lpcc_path
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping $SINGLEAGT \
local file=$DIR/myfile.doc
local file2=$DIR2/myfile.doc
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
local hsm_root="$mntpt/$tdir"
local file=$DIR/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
is_project_quota_supported || skip "project quota is not supported"
enable_project_quota
local file=$DIR/$tfile
local -a lpcc_path
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
setup_loopdev $SINGLEAGT $loopfile $mntpt 50
copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
setup_pcc_mapping
run_test 36a "Stale RW-PCC copy should be deleted after remove the PCC backend"
test_36b() {
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
test_36_base "-r"
}
run_test 36b "Stale RO-PCC copy should be deleted after remove the PCC backend"
local file=$DIR/$tdir/$tfile
local file2=$DIR2/$tdir/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
mkdir -p $DIR/$tdir || error "mkdir $DIR/$tdir failed"
touch $file
local dir=$DIR/$tdir
local file=$dir/$tfile
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
is_project_quota_supported || skip "project quota is not supported"
enable_project_quota
run_test 38 "Verify LFS pcc state does not trigger prefetch for auto PCC-RO"
test_39() {
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
quotaon --help |& grep -q 'project quotas' ||
skip "Not support project quota on local filesystem"
}
test_40() {
+ $LCTL get_param -n mdc.*.connect_flags | grep -q pccro ||
+ skip "Server does not support PCC-RO"
+
is_project_quota_supported || skip "project quota is not supported"
enable_project_quota