Whamcloud - gitweb
EX-4006 pcc: make "pccro=1" default
authorQian Yingjin <qian@ddn.com>
Fri, 8 Oct 2021 08:45:05 +0000 (16:45 +0800)
committerAndreas Dilger <adilger@whamcloud.com>
Mon, 11 Oct 2021 05:28:51 +0000 (05:28 +0000)
To avoid a risk that users will accidentally configure PCC-RW and
potentially lose data if those client nodes go offline, this patch
makes "pccro=1" default for PCC backends.

This patch adds a new option "--w|--write" for PCC-RW cache
mode when attach a file.
Also It makes "--r|--readonly" as a default option for PCC attach
command.

Signed-off-by: Qian Yingjin <qian@ddn.com>
Change-Id: I56735b0ebe8f0d9ef22b3f7e39e8cccfa3aad443
Reviewed-on: https://review.whamcloud.com/45162
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
lustre/llite/pcc.c
lustre/llite/pcc.h
lustre/tests/sanity-pcc.sh
lustre/utils/lfs.c

index 89a471f..e6c1e6b 100644 (file)
@@ -984,23 +984,17 @@ pcc_dataset_flags_check(struct pcc_super *super, struct pcc_cmd *cmd)
 
        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.
+        * A PCC backend can provide caching service for both PCC-RW and PCC-RO.
+        * It defaults to readonly PCC as long as the server supports it.
         */
-       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 (!(exp_connect_flags2(sbi->ll_md_exp) & OBD_CONNECT2_PCCRO)) {
+               if (cmd->u.pccc_add.pccc_flags & PCC_DATASET_ROPCC ||
+                   !(cmd->u.pccc_add.pccc_flags & PCC_DATASET_RWPCC))
+                       return -EOPNOTSUPP;
+       } else if ((cmd->u.pccc_add.pccc_flags & PCC_DATASET_PCC_ALL) == 0) {
+               cmd->u.pccc_add.pccc_flags |= PCC_DATASET_PCC_DEFAULT;
+       } /* else RWPCC or ROPCC must have been given */
 
        if (cmd->u.pccc_add.pccc_rwid == 0 &&
            cmd->u.pccc_add.pccc_roid == 0)
index c0a2cb0..308b180 100644 (file)
@@ -133,6 +133,8 @@ enum pcc_dataset_flags {
        PCC_DATASET_ROPCC       = 0x20,
        /* PCC backend provides caching services for both RW-PCC and RO-PCC */
        PCC_DATASET_PCC_ALL     = PCC_DATASET_RWPCC | PCC_DATASET_ROPCC,
+       /* Default PCC caching mode: PCC-RO mode */
+       PCC_DATASET_PCC_DEFAULT = PCC_DATASET_ROPCC,
        /* Move pagecache from mapping of PCC copy to Lustre file for mmap */
        PCC_DATASET_MMAP_CONV   = 0x40,
        /* Set the project ID for the PCC copy */
index 5169a1d..572c3d6 100644 (file)
@@ -261,14 +261,14 @@ lpcc_rw_test() {
        is_project_quota_supported || project=false
 
        do_facet $SINGLEAGT $LFS mkdir -i0 -c1 $DIR/$tdir
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1"
        $project && lfs project -sp $project_id $DIR/$tdir
 
        do_facet $SINGLEAGT "echo -n attach_origin > $file"
        if ! $project; then
                check_lpcc_state $file "none"
-               do_facet $SINGLEAGT $LFS pcc attach -i \
-                       $HSM_ARCHIVE_NUMBER $file ||
+               do_facet $SINGLEAGT $LFS pcc attach -w \
+                       -i $HSM_ARCHIVE_NUMBER $file ||
                        error "pcc attach $file failed"
        fi
 
@@ -318,8 +318,8 @@ lpcc_rw_test() {
        do_facet $SINGLEAGT "echo -n new_data2 > $file"
        if ! $project; then
                check_lpcc_state $file "none"
-               do_facet $SINGLEAGT $LFS pcc attach -i \
-                       $HSM_ARCHIVE_NUMBER $file ||
+               do_facet $SINGLEAGT $LFS pcc attach -w \
+                       -i $HSM_ARCHIVE_NUMBER $file ||
                        error "PCC attach $file failed"
        fi
        check_lpcc_state $file "readwrite"
@@ -364,14 +364,14 @@ test_1e() {
 
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0\ pccrw=1"
        $LCTL pcc list $MOUNT
        mkdir_on_mdt0 $DIR/$tdir || error "mkdir $DIR/$tdir failed"
        chmod 777 $DIR/$tdir || error "chmod 777 $DIR/$tdir failed"
 
        do_facet $SINGLEAGT $RUNAS dd if=/dev/zero of=$file bs=1024 count=1 ||
                error "failed to dd write to $file"
-       do_facet $SINGLEAGT $RUNAS $LFS pcc attach -i $HSM_ARCHIVE_NUMBER \
+       do_facet $SINGLEAGT $RUNAS $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER \
                $file || error "failed to attach file $file"
        check_lpcc_state $file "readwrite"
        do_facet $SINGLEAGT $RUNAS dd if=$file of=/dev/null bs=1024 count=1 ||
@@ -401,7 +401,7 @@ test_1e() {
 
        [[ $perm == "0" ]] || error "PCC file permission ($perm) is not zero"
 
-       do_facet $SINGLEAGT $RUNAS $LFS pcc attach -i $HSM_ARCHIVE_NUMBER \
+       do_facet $SINGLEAGT $RUNAS $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER \
                $file || error "failed to attach file $file"
        check_lpcc_state $file "readwrite"
 
@@ -426,7 +426,7 @@ test_1f() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ open_attach=0\ stat_attach=0"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ open_attach=0\ stat_attach=0\ pccrw=1"
 
        do_facet $SINGLEAGT $LFS mkdir -i0 -c1 $DIR/$tdir
        chmod 777 $DIR/$tdir || error "chmod 0777 $DIR/$tdir failed"
@@ -471,7 +471,7 @@ test_1g() {
 
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1"
 
        dd if=/dev/zero of=$file bs=1024 count=1 ||
                error "failed to dd write to $file"
@@ -480,7 +480,7 @@ test_1g() {
                error "non-root user can dd write $file"
        do_facet $SINGLEAGT $RUNAS dd if=$file of=/dev/null bs=1024 count=1 &&
                error "non-root user can dd read $file"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "failed to attach file $file"
        check_lpcc_state $file "readwrite"
        do_facet $SINGLEAGT $RUNAS dd if=/dev/zero of=$file bs=1024 count=1 &&
@@ -520,7 +520,7 @@ test_2a() {
        enable_project_quota
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1"
        file=$DIR/$tdir/multiop
        $LFS mkdir -i -1 -c $MDSCOUNT $DIR/$tdir
        rm -f $file
@@ -577,13 +577,13 @@ test_2b() {
        enable_project_quota
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1"
        file=$DIR/$tdir/multiop
        mkdir -p $DIR/$tdir
        rm -f $file
 
        do_facet $SINGLEAGT "echo -n file_data > $file"
-       do_facet $SINGLEAGT lfs pcc attach -i $HSM_ARCHIVE_NUMBER \
+       do_facet $SINGLEAGT lfs pcc attach -w -i $HSM_ARCHIVE_NUMBER \
                $file || error "PCC attach $file failed"
        check_lpcc_state $file "readwrite"
 
@@ -616,12 +616,12 @@ test_2c() {
        enable_project_quota
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1"
        mkdir -p $DIR/$tdir
        rm -f $file
 
        do_facet $SINGLEAGT "echo -n file_data > $file"
-       do_facet $SINGLEAGT lfs pcc attach -i $HSM_ARCHIVE_NUMBER \
+       do_facet $SINGLEAGT lfs pcc attach -w -i $HSM_ARCHIVE_NUMBER \
                $file || error "PCC attach $file failed"
        check_lpcc_state $file "readwrite"
 
@@ -651,14 +651,14 @@ test_3a() {
 
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0\ pccrw=1\ pccro=1"
 
        mkdir -p $DIR/$tdir || error "mkdir $DIR/$tdir failed"
        dd if=/dev/zero of=$file2 bs=1024 count=1 ||
                error "failed to dd write to $file"
 
        echo "Start to RW-PCC attach/detach the file: $file"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "failed to attach file $file"
        check_lpcc_state $file "readwrite"
        do_facet $SINGLEAGT $LFS pcc detach -k $file ||
@@ -666,7 +666,7 @@ test_3a() {
        check_lpcc_state $file "none"
 
        echo "Repeat to RW-PCC attach/detach the same file: $file"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "failed to attach file $file"
        check_lpcc_state $file "readwrite"
        do_facet $SINGLEAGT $LFS pcc detach -k $file ||
@@ -674,7 +674,7 @@ test_3a() {
        check_lpcc_state $file "none"
 
        rm -f $file || error "failed to remove $file"
-       echo "ropcc_data" > $file
+       echo "pccro_data" > $file
 
        echo "Start to RO-PCC attach/detach the file: $file"
        do_facet $SINGLEAGT $LFS pcc attach -r -i $HSM_ARCHIVE_NUMBER $file ||
@@ -703,7 +703,7 @@ test_3b() {
        # Start all of the copytools and setup PCC
        for n in $(seq $AGTCOUNT); do
                copytool setup -f agt$n -a $n -m $MOUNT -h $(hsm_root agt$n)
-               setup_pcc_mapping agt$n "projid={100}\ rwid=$n\ auto_attach=0"
+               setup_pcc_mapping agt$n "projid={100}\ rwid=$n\ auto_attach=0\ pccrw=1\ pccro=1"
        done
 
        mkdir -p $DIR/$tdir || error "mkdir $DIR/$tdir failed"
@@ -711,7 +711,7 @@ test_3b() {
                error "failed to dd write to $file"
 
        echo "Start to RW-PCC attach/detach $file on $agt1_HOST"
-       do_facet agt1 $LFS pcc attach -i 1 $file ||
+       do_facet agt1 $LFS pcc attach -w -i 1 $file ||
                error "failed to attach file $file"
        check_lpcc_state $file "readwrite" agt1
        do_facet agt1 $LFS pcc detach -k $file ||
@@ -719,7 +719,7 @@ test_3b() {
        check_lpcc_state $file "none" agt1
 
        echo "Repeat to RW-PCC attach/detach $file on $agt2_HOST"
-       do_facet agt2 $LFS pcc attach -i 2 $file ||
+       do_facet agt2 $LFS pcc attach -w -i 2 $file ||
                error "failed to attach file $file"
        check_lpcc_state $file "readwrite" agt2
        do_facet agt2 $LFS pcc detach -k $file ||
@@ -727,10 +727,10 @@ test_3b() {
        check_lpcc_state $file "none" agt2
 
        echo "Try RW-PCC attach on two agents"
-       do_facet agt1 $LFS pcc attach -i 1 $file ||
+       do_facet agt1 $LFS pcc attach -w -i 1 $file ||
                error "failed to attach file $file"
        check_lpcc_state $file "readwrite" agt1
-       do_facet agt2 $LFS pcc attach -i 2 $file ||
+       do_facet agt2 $LFS pcc attach -w -i 2 $file ||
                error "failed to attach file $file"
        check_lpcc_state $file "readwrite" agt2
        # The later attach PCC agent should succeed,
@@ -785,7 +785,7 @@ test_4() {
        enable_project_quota
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1"
 
        mkdir -p $DIR/$tdir || error "mkdir $DIR/$tdir failed"
        lfs project -sp $project_id $DIR/$tdir ||
@@ -821,12 +821,12 @@ test_5() {
 
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1"
 
        do_facet $SINGLEAGT "echo -n attach_mmap_data > $file" ||
                error "echo $file failed"
 
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "failed to attach file $file"
        check_lpcc_state $file "readwrite"
 
@@ -854,10 +854,10 @@ test_6() {
 
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1"
 
        echo -n mmap_write_data > $file || error "echo write $file failed"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "failed to attach file $file"
        check_lpcc_state $file "readwrite"
 
@@ -890,10 +890,10 @@ test_7a() {
 
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1"
 
        echo "QQQQQ" > $file
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "failed to attach file $file"
        check_lpcc_state $file "readwrite"
        check_file_data $SINGLEAGT $file "QQQQQ"
@@ -922,10 +922,10 @@ test_7b() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0\ pccrw=1"
 
        echo "QQQQQ" > $file
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "failed to attach file $file"
        check_lpcc_state $file "readwrite"
        check_file_data $SINGLEAGT $file "QQQQQ"
@@ -957,10 +957,10 @@ test_8() {
 
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1"
 
        echo "QQQQQ" > $file
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "failed to attach file $file"
        check_lpcc_state $file "readwrite"
        check_file_data $SINGLEAGT $file "QQQQQ"
@@ -984,11 +984,11 @@ test_9() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
 
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMVER" -h "$hsm_root"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
 
        touch $file || error "touch $file failed"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "fail to attach $file"
        check_lpcc_state $file "readwrite"
        # write 60M data, it is larger than the capacity of PCC backend
@@ -1003,13 +1003,13 @@ test_usrgrp_quota() {
        local loopfile="$TMP/$tfile"
        local mntpt="/mnt/pcc.$tdir"
        local hsm_root="$mntpt/$tdir"
-       local state="readwrite"
+       local state="readonly"
        local ug=$1
-       local ro=$2
+       local rw=$2
        local id=$RUNAS_ID
 
        [[ $ug == "g" ]] && id=$RUNAS_GID
-       [[ -z $ro ]] || state="readonly"
+       [[ -z $rw ]] || state="readwrite"
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        do_facet $SINGLEAGT quotacheck -c$ug $mntpt ||
                error "quotacheck -c$ug $mntpt failed"
@@ -1020,7 +1020,7 @@ test_usrgrp_quota() {
        do_facet $SINGLEAGT repquota -${ug}vs $mntpt
 
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMVER" -h "$hsm_root"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
 
        mkdir $DIR/$tdir || error "mkdir $DIR/$tdir failed"
@@ -1036,14 +1036,14 @@ test_usrgrp_quota() {
                error "chown $RUNAS_ID:$RUNAS_GID $file1 failed"
        chown $RUNAS_ID:$RUNAS_GID $file2 ||
                error "chown $RUNAS_ID:$RUNAS_GID $file2 failed"
-       do_facet $SINGLEAGT $RUNAS $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $ro \
+       do_facet $SINGLEAGT $RUNAS $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $rw \
                $file1 || error "attach $file1 failed"
-       do_facet $SINGLEAGT $RUNAS $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $ro \
+       do_facet $SINGLEAGT $RUNAS $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $rw \
                $file2 && error "attach $file2 should fail due to quota limit"
        check_lpcc_state $file1 $state
        check_lpcc_state $file2 "none"
 
-       if [[ -n $ro ]]; then
+       if [[ -z $rw ]]; then
                do_facet $SINGLEAGT $LFS pcc detach $file1 ||
                        error "detach $file1 failed"
                return 0
@@ -1057,12 +1057,12 @@ test_usrgrp_quota() {
 }
 
 test_10a() {
-       test_usrgrp_quota "u"
+       test_usrgrp_quota "u" "-w"
 }
 run_test 10a "Test RW-PCC with user quota on loop PCC device"
 
 test_10b() {
-       test_usrgrp_quota "g"
+       test_usrgrp_quota "g" "-w"
 }
 run_test 10b "Test RW-PCC with group quota on loop PCC device"
 
@@ -1070,7 +1070,7 @@ test_10c() {
        $LCTL get_param -n mdc.*.connect_flags | grep -q pcc_ro ||
                skip "Server does not support PCC-RO"
 
-       test_usrgrp_quota "u" "-r"
+       test_usrgrp_quota "u"
 }
 run_test 10c "Test RO-PCC with user quota on loop PCC device"
 
@@ -1078,7 +1078,7 @@ test_10d() {
        $LCTL get_param -n mdc.*.connect_flags | grep -q pcc_ro ||
                skip "Server does not support PCC-RO"
 
-       test_usrgrp_quota "g" "-r"
+       test_usrgrp_quota "g"
 }
 run_test 10d "Test RO-PCC with group quota on loop PCC device"
 
@@ -1104,7 +1104,7 @@ test_usrgrp_edquot() {
        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"
+               "${ug}id={$id}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
 
        dd if=/dev/zero of=$file bs=1M count=2 ||
@@ -1148,7 +1148,7 @@ test_11() {
 
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1"
 
        do_facet $SINGLEAGT "echo -n QQQQQ > $file"
        lpcc_path=$(lpcc_fid2path $hsm_root $file)
@@ -1156,7 +1156,7 @@ test_11() {
        echo "Lustre file: $file LPCC dir: $lpcc_dir"
        do_facet $SINGLEAGT mkdir -p $lpcc_dir ||
                error "mkdir -p $lpcc_dir failed"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "failed to attach $file"
        check_lpcc_state $file "readwrite"
        check_file_data $SINGLEAGT $file "QQQQQ"
@@ -1173,7 +1173,7 @@ test_11() {
                error "mkdir -p $lpcc_dir failed"
        do_facet $SINGLEAGT chattr +i $lpcc_dir ||
                error "chattr +i $lpcc_dir failed"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file &&
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file &&
                error "attach $file with immutable directory should be failed"
        do_facet $SINGLEAGT chattr -i $lpcc_dir ||
                error "chattr -i $lpcc_dir failed"
@@ -1184,7 +1184,7 @@ test_11() {
        lpcc_path=$(lpcc_fid2path $hsm_root $file)
        do_facet $SINGLEAGT mkdir -p $lpcc_path ||
                error "mkdir -p $lpcc_path failed"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file &&
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file &&
                error "attach $file should fail as PCC path is a directory"
        rm $file || error "rm $file failed"
 }
@@ -1198,11 +1198,11 @@ test_12() {
 
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0\ pccrw=1"
 
        echo  -n race_rw_attach_hsmremove > $file
        lpcc_path=$(lpcc_fid2path $hsm_root $file)
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "attach $file failed"
        do_facet $SINGLEAGT $LFS pcc detach -k $file ||
                error "detach $file failed"
@@ -1210,7 +1210,7 @@ test_12() {
        check_hsm_flags $file "0x0000000d"
        # define OBD_FAIL_LLITE_PCC_ATTACH_PAUSE        0x1414
        do_facet $SINGLEAGT $LCTL set_param fail_loc=0x1414 fail_val=20
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file &
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file &
        pid=$!
        $LFS hsm_state $file
        sleep 3
@@ -1231,7 +1231,7 @@ test_rule_id() {
        local file=$DIR/$tdir/$tfile
 
        setup_pcc_mapping $SINGLEAGT \
-               "$rule\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
+               "$rule\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0\ pccrw=1"
        $LCTL pcc list $MOUNT
 
        do_facet $SINGLEAGT $LFS mkdir -i 0 $DIR/$tdir
@@ -1271,7 +1271,7 @@ test_13b() {
 
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "fname={*.h5\ suffix.*\ Mid*dle}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
+               "fname={*.h5\ suffix.*\ Mid*dle}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0\ pccrw=1"
        $LCTL pcc list $MOUNT
 
        do_facet $SINGLEAGT mkdir -p $DIR/$tdir
@@ -1325,7 +1325,7 @@ test_13c() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100\ 200}\&fname={*.h5},uid={500}\&gid={1000}\ rwid=$HSM_ARCHIVE_NUMBER"
+               "projid={100\ 200}\&fname={*.h5},uid={500}\&gid={1000}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1"
        $LCTL pcc list $MOUNT
        do_facet $SINGLEAGT mkdir -p $DIR/$tdir
        chmod 777 $DIR/$tdir || error "chmod 0777 $DIR/$tdir failed"
@@ -1384,11 +1384,11 @@ test_14() {
 
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0\ pccrw=1\ pccro=1"
 
        mkdir -p $DIR/$tdir || error "mkdir -p $DIR/$tdir failed"
        do_facet $SINGLEAGT "echo -n autodetach_data > $file"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER \
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER \
                $file || error "PCC attach $file failed"
        check_lpcc_state $file "readwrite"
 
@@ -1425,7 +1425,7 @@ test_15() {
 
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1\ pccro=1"
 
        mkdir_on_mdt0 $DIR/$tdir || error "mkdir $DIR/$tdir failed"
        chmod 777 $DIR/$tdir || error "chmod 777 $DIR/$tdir failed"
@@ -1433,7 +1433,7 @@ test_15() {
        echo "Verify open attach for non-root user"
        do_facet $SINGLEAGT $RUNAS dd if=/dev/zero of=$file bs=1024 count=1 ||
                error "failed to dd write to $file"
-       do_facet $SINGLEAGT $RUNAS $LFS pcc attach -i $HSM_ARCHIVE_NUMBER \
+       do_facet $SINGLEAGT $RUNAS $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER \
                $file || error "failed to attach file $file"
        do_facet $SINGLEAGT $RUNAS $LFS pcc state $file
        check_lpcc_state $file "readwrite" $SINGLEAGT "$RUNAS"
@@ -1454,7 +1454,7 @@ test_15() {
 
        echo "Verify auto attach at open for RW-PCC"
        do_facet $SINGLEAGT "echo -n autoattach_data > $file"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER \
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER \
                $file || error "RW-PCC attach $file failed"
        check_lpcc_state $file "readwrite"
 
@@ -1519,12 +1519,12 @@ test_16() {
 
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1\ pccro=1"
 
        echo "Test detach for RW-PCC"
        do_facet $SINGLEAGT "echo -n detach_data > $file"
        lpcc_path=$(lpcc_fid2path $hsm_root $file)
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER \
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER \
                $file || error "RW-PCC attach $file failed"
        check_lpcc_state $file "readwrite"
        # HSM released exists archived status
@@ -1578,12 +1578,12 @@ test_17() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ open_attach=0\ stat_attach=0"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ open_attach=0\ stat_attach=0\ pccrw=1"
 
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
 
        do_facet $SINGLEAGT "echo -n layout_refresh_data > $file"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "PCC attach $file failed"
        check_lpcc_state $file "readwrite"
 
@@ -1629,12 +1629,12 @@ test_18() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1"
 
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
        do_facet $SINGLEAGT dd if=/dev/urandom of=$file bs=1M count=4 ||
                error "failed to write $file"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "failed to attach $file"
        do_facet $SINGLEAGT $LFS pcc state $file
        check_lpcc_state $file "readwrite"
@@ -1651,7 +1651,7 @@ test_18() {
 
        do_facet $SINGLEAGT $LFS pcc state $file
        check_file_size $SINGLEAGT $lpcc_path 4194304
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "failed to attach $file"
        check_lpcc_sizes $SINGLEAGT $lpcc_path $file 1049600
        newmd5=$(do_facet $SINGLEAGT md5sum $file | awk '{print $1}')
@@ -1671,17 +1671,17 @@ test_19() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0\ pccrw=1"
 
        do_facet $SINGLEAGT "echo -n QQQQQ > $file" || error "echo $file failed"
        lpcc_path=$(lpcc_fid2path $hsm_root $file)
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "Failed to attach $file"
        check_lpcc_state $file "readwrite"
        check_lpcc_sizes $SINGLEAGT $file $lpcc_path 5
        do_facet $SINGLEAGT $LFS pcc detach --keep $file ||
                error "Failed to detach $file"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "Failed to attach $file"
        check_lpcc_sizes $SINGLEAGT $file $lpcc_path 5
        do_facet $SINGLEAGT $LFS pcc detach --keep $file ||
@@ -1699,11 +1699,11 @@ test_20() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1"
 
        do_facet $SINGLEAGT "echo -n QQQQQ > $file" ||
                error "echo $file failed"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "Failed to attach $file"
        do_facet $SINGLEAGT "echo 3 > /proc/sys/vm/drop_caches"
        check_lpcc_state $file "readwrite"
@@ -2018,10 +2018,10 @@ test_21i() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0\ pccro=1\ pccrw=1"
 
        do_facet $SINGLEAGT "echo -n hsm_release_pcc_file > $file"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "RW-PCC attach $file failed"
        check_lpcc_state $file "readwrite"
        # HSM released exists archived status
@@ -2069,11 +2069,11 @@ test_22() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0\ pccrw=1\ pccro=1"
 
        do_facet $SINGLEAGT "echo -n roattach_data > $file"
 
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "RW-PCC attach $file failed"
        check_lpcc_state $file "readwrite"
        # HSM released exists archived status
@@ -2141,17 +2141,17 @@ test_23() {
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping
 
-       echo "ropcc_data" > $file
+       echo "pccro_data" > $file
        lpcc_path=$(lpcc_fid2path $hsm_root $file)
 
        do_facet $SINGLEAGT $LFS pcc attach -r -i $HSM_ARCHIVE_NUMBER $file ||
                error "failed to RO-PCC attach file $file"
        check_lpcc_state $file "readonly"
-       check_lpcc_data $SINGLEAGT $lpcc_path $file "ropcc_data"
+       check_lpcc_data $SINGLEAGT $lpcc_path $file "pccro_data"
 
        local content=$(do_facet $SINGLEAGT $MMAP_CAT $file)
 
-       [[ $content == "ropcc_data" ]] ||
+       [[ $content == "pccro_data" ]] ||
                error "mmap_cat data mismatch: $content"
        check_lpcc_state $file "readonly"
 
@@ -2364,7 +2364,7 @@ test_26() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER" -h "$hsm_root"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0\ pccrw=1\ pccro=1"
 
        echo -n attach_keep_open > $file
        do_facet $SINGLEAGT $LFS pcc attach -r -i $HSM_ARCHIVE_NUMBER $file ||
@@ -2412,7 +2412,7 @@ test_26() {
        do_facet $SINGLEAGT $LFS pcc detach $file ||
                error "detach $file failed"
 
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "attach $file failed"
        check_lpcc_state $file "readwrite"
        rmultiop_start $agt_host $file O_c || error "multiop $file failed"
@@ -2431,7 +2431,7 @@ test_26() {
 
        rm $file || error "rm $file failed"
        echo -n attach_keep_open > $file
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "attach $file failed"
        check_lpcc_state $file "readwrite"
        rmultiop_start $agt_host $file O_c || error "multiop $file failed"
@@ -2463,10 +2463,10 @@ test_27() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER" -h "$hsm_root"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ open_attach=1"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ open_attach=1\ pccrw=1\ pccro=1"
 
        echo -n auto_attach_multi_open > $file
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "attach $file failed"
        check_lpcc_state $file "readwrite"
        rmultiop_start $agt_host $file O_c || error "multiop $file failed"
@@ -2483,7 +2483,7 @@ test_27() {
 
        rm $file || error "rm $file failed"
        echo -n auto_attach_multi_open > $file
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "attach $file failed"
        check_lpcc_state $file "readwrite"
        rmultiop_start $agt_host $file O_c || error "multiop $file failed"
@@ -2540,14 +2540,14 @@ test_28() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER" -h "$hsm_root"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0\ pccrw=1"
 
        echo -n rw_attach_hasopen_fail > $file
        rmultiop_start $agt_host $file O_c || error "multiop $file failed"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file &&
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file &&
                error "attach $file should fail"
        rmultiop_stop $agt_host || error "multiop $file close failed"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "attach $file should fail"
        check_lpcc_state $file "readwrite"
        do_facet $SINGLEAGT $LFS pcc detach -k $file ||
@@ -2556,11 +2556,11 @@ test_28() {
 
        multiop_bg_pause $file2 O_c || error "multiop $file2 failed"
        multipid=$!
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file &&
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file &&
                error "attach $file should fail"
        kill -USR1 $multipid
        wait $multipid || error "multiop $file2 close failed"
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "attach $file should fail"
        check_lpcc_state $file "readwrite"
        do_facet $SINGLEAGT $LFS pcc detach -k $file ||
@@ -2587,7 +2587,7 @@ test_29a() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={$project_id}\ rwid=$HSM_ARCHIVE_NUMBER\ ropcc=1"
+               "projid={$project_id}\ rwid=$HSM_ARCHIVE_NUMBER\ pccro=1"
        $LCTL pcc list $MOUNT
 
        do_facet $SINGLEAGT mkdir -p $DIR/$tdir ||
@@ -2624,7 +2624,7 @@ test_29b() {
        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"
+               "fname={*.dat}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
 
        do_facet $SINGLEAGT dd if=/dev/zero of=$file bs=4k count=1 ||
@@ -2656,18 +2656,18 @@ test_30() {
 
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1\ pccro=1"
 
        mkdir $DIR/$tdir || error "mkdir $DIR/$tdir failed"
 
        file=$DIR/$tdir/rwattach
        echo -n backend_del_attach > $file
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "RW-PCC attach $file failed"
 
        file=$DIR/$tdir/rwattachrm
        echo -n backend_del_attach_rm > $file
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "RW-PCC attach $file failed"
        rm $file || error "rm $file failed"
 
@@ -2697,14 +2697,14 @@ test_31() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0"
+               "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ auto_attach=0\ pccrw=1\ pccro=1"
 
        mkdir $DIR/$tdir || error "mkdir $DIR/$tdir failed"
 
        file=$DIR/$tdir/rwattach
        echo -n backend_del_attach > $file
        lpcc_path1=$(lpcc_fid2path $hsm_root $file)
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "RW-PCC attach $file failed"
        check_lpcc_state $file "readwrite"
        do_facet $SINGLEAGT $LFS pcc detach -k $file ||
@@ -2714,7 +2714,7 @@ test_31() {
        file=$DIR/$tdir/rwattachrm
        echo -n backend_del_attach_rm > $file
        lpcc_path2=$(lpcc_fid2path $hsm_root $file)
-       do_facet $SINGLEAGT $LFS pcc attach -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach -w -i $HSM_ARCHIVE_NUMBER $file ||
                error "RW-PCC attach $file failed"
        check_lpcc_state $file "readwrite"
        do_facet $SINGLEAGT $LFS pcc detach -k $file ||
@@ -2809,7 +2809,7 @@ test_33() {
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
 
        setup_pcc_mapping $SINGLEAGT \
-               "fname={*.doc}\&size\<{1M}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1"
+               "fname={*.doc}\&size\<{1M}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
        touch $file || error "touch $file failed"
        $TRUNCATE $file $((1048576 * 2)) || error "Truncate $file failed"
@@ -2825,7 +2825,7 @@ test_33() {
        cleanup_pcc_mapping
 
        setup_pcc_mapping $SINGLEAGT \
-               "fname={*.doc}\&size\<{5M}\&size\>{3M}\ roid=5\ ropcc=1"
+               "fname={*.doc}\&size\<{5M}\&size\>{3M}\ roid=5\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
        do_facet $SINGLEAGT $MULTIOP $file oc ||
                error "failed to readonly open $file"
@@ -2841,7 +2841,7 @@ test_33() {
        cleanup_pcc_mapping
 
        setup_pcc_mapping $SINGLEAGT \
-               "fname={*.doc}\&size={5M\ 3M}\ roid=5\ ropcc=1"
+               "fname={*.doc}\&size={5M\ 3M}\ roid=5\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
        do_facet $SINGLEAGT $MULTIOP $file oc ||
                error "failed to readonly open $file"
@@ -2879,8 +2879,7 @@ test_34() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
 
-       setup_pcc_mapping $SINGLEAGT \
-               "projid\>{100}\ roid=5\ ropcc=1"
+       setup_pcc_mapping $SINGLEAGT "projid\>{100}\ roid=5\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
        do_facet $SINGLEAGT "echo -n QQQQQ > $file" ||
                error "failed to write $file"
@@ -2899,8 +2898,7 @@ test_34() {
        check_lpcc_state $file "readonly"
        cleanup_pcc_mapping
 
-       setup_pcc_mapping $SINGLEAGT \
-               "projid\<{100}\ roid=5\ ropcc=1"
+       setup_pcc_mapping $SINGLEAGT "projid\<{100}\ roid=5\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
        do_facet $SINGLEAGT $MULTIOP $file oc ||
                error "failed to readonly open $file"
@@ -2918,7 +2916,7 @@ test_34() {
        cleanup_pcc_mapping
 
        setup_pcc_mapping $SINGLEAGT \
-               "projid\<{120}\&projid\>{110}\ roid=5\ ropcc=1"
+               "projid\<{120}\&projid\>{110}\ roid=5\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
        do_facet $SINGLEAGT $MULTIOP $file oc ||
                error "failed to readonly open $file"
@@ -2984,17 +2982,17 @@ test_36_base() {
        local hsm_root="$mntpt/$tdir"
        local file=$DIR/$tfile
        local -a lpcc_path
-       local state="readwrite"
-       local ro="$1"
+       local state="readonly"
+       local rw="$1"
 
-       [[ -z $ro ]] || state="readonly"
+       [[ -z $rw ]] || state="readwrite"
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        copytool setup -m "$MOUNT" -a "$HSM_ARCHIVE_NUMBER"
-       setup_pcc_mapping
+       setup_pcc_mapping $SINGLEAGT "projid={100}\ rwid=$HSM_ARCHIVE_NUMBER\ pccrw=1\ pccro=1"
 
        echo -n backend_clear_verify > $file
        lpcc_path=$(lpcc_fid2path $hsm_root $file)
-       do_facet $SINGLEAGT $LFS pcc attach $ro -i $HSM_ARCHIVE_NUMBER $file ||
+       do_facet $SINGLEAGT $LFS pcc attach $rw -i $HSM_ARCHIVE_NUMBER $file ||
                error "PCC attach $ro $file failed"
        check_lpcc_state $file "$state"
        do_facet $SINGLEAGT $LFS pcc detach -k $file ||
@@ -3009,7 +3007,7 @@ test_36_base() {
 }
 
 test_36a() {
-       test_36_base
+       test_36_base "-w"
 }
 run_test 36a "Stale RW-PCC copy should be deleted after remove the PCC backend"
 
@@ -3017,7 +3015,7 @@ test_36b() {
        $LCTL get_param -n mdc.*.connect_flags | grep -q pcc_ro ||
                skip "Server does not support PCC-RO"
 
-       test_36_base "-r"
+       test_36_base
 }
 run_test 36b "Stale RO-PCC copy should be deleted after remove the PCC backend"
 
@@ -3038,10 +3036,10 @@ test_37() {
        setup_loopdev client $loopfile $mntpt 50
        setup_loopdev client $loopfile2 $mntpt2 50
        $LCTL pcc add $MOUNT $mntpt -p \
-               "projid={2} roid=$HSM_ARCHIVE_NUMBER auto_attach=0 ropcc=1" ||
+               "projid={2} roid=$HSM_ARCHIVE_NUMBER auto_attach=0 pccro=1" ||
                error "failed to config PCC for $MOUNT $mntpt"
        $LCTL pcc add $MOUNT2 $mntpt2 -p \
-               "projid={2} roid=$HSM_ARCHIVE_NUMBER auto_attach=0 ropcc=1" ||
+               "projid={2} roid=$HSM_ARCHIVE_NUMBER auto_attach=0 pccro=1" ||
                error "failed to config PCC for $MOUNT2 $mntpt2"
        $LCTL pcc list $MOUNT
        $LCTL pcc list $MOUNT2
@@ -3085,7 +3083,7 @@ test_38() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        do_facet $SINGLEAGT mkdir $hsm_root || error "mkdir $hsm_root failed"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1"
+               "projid={100}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1"
 
        do_facet $SINGLEAGT $LFS pcc state $file ||
                error "failed to get PCC state for $file"
@@ -3124,7 +3122,7 @@ test_39() {
 
        do_facet $SINGLEAGT mkdir $hsm_root || error "mkdir $hsm_root failed"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={$id}\ roid=$HSM_ARCHIVE_NUMBER\ proj_quota=1\ ropcc=1"
+               "projid={$id}\ roid=$HSM_ARCHIVE_NUMBER\ proj_quota=1\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
 
        do_facet $SINGLEAGT mkdir -p $dir || error "mkdir $dir failed"
@@ -3185,7 +3183,7 @@ test_40() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 200
        do_facet $SINGLEAGT mkdir $hsm_root || error "mkdir $hsm_root failed"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={$id}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1"
+               "projid={$id}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
 
        mkdir -p $dir || error "mkdir $dir failed"
@@ -3290,7 +3288,7 @@ test_41() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 50
        do_facet $SINGLEAGT mkdir $hsm_root || error "mkdir $hsm_root failed"
        setup_pcc_mapping $SINGLEAGT \
-               "mtime\>{1m}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1"
+               "mtime\>{1m}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
 
        echo "pcc_ro_data" > $file || error "echo $file failed"
@@ -3315,7 +3313,7 @@ test_42() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 60
        do_facet $SINGLEAGT mkdir $hsm_root || error "mkdir $hsm_root failed"
        setup_pcc_mapping $SINGLEAGT \
-               "projid={100}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1"
+               "projid={100}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
 
        do_facet $SINGLEAGT echo -n attach_id_not_specified > $file ||
@@ -3336,7 +3334,7 @@ test_43() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 60
        do_facet $SINGLEAGT mkdir $hsm_root || error "mkdir $hsm_root failed"
        setup_pcc_mapping $SINGLEAGT \
-               "size\<{100M}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1"
+               "size\<{100M}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
 
        echo "attach_root_user_data" > $file || error "echo $file failed"
@@ -3361,7 +3359,7 @@ test_44() {
        setup_loopdev client $loopfile $mntpt 60
        mkdir $hsm_root || error "mkdir $hsm_root failed"
        setup_pcc_mapping client \
-               "projid={0}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1\ mmap_conv=0"
+               "projid={0}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1\ mmap_conv=0"
        $LCTL pcc list $MOUNT
        stack_trap "$LCTL set_param llite.*.pcc_async_threshold=1G"
        $LCTL set_param llite.*.pcc_async_threshold=0
@@ -3432,11 +3430,11 @@ test_45() {
        setup_loopdev client $loopfile2 $mntpt2 60
        stack_trap "$LCTL pcc clear $MOUNT" EXIT
        $LCTL pcc add $MOUNT $mntpt -p \
-               "projid={0} roid=$HSM_ARCHIVE_NUMBER ropcc=1" ||
+               "projid={0} roid=$HSM_ARCHIVE_NUMBER pccro=1" ||
                error "failed to config PCC for $MOUNT $mntpt"
        stack_trap "$LCTL pcc clear $MOUNT2" EXIT
        $LCTL pcc add $MOUNT2 $mntpt2 -p \
-               "projid={0} roid=$HSM_ARCHIVE_NUMBER ropcc=1" ||
+               "projid={0} roid=$HSM_ARCHIVE_NUMBER pccro=1" ||
                error "failed to config PCC for $MOUNT2 $mntpt2"
        $LCTL pcc list $MOUNT
        $LCTL pcc list $MOUNT2
@@ -3506,7 +3504,7 @@ test_46() {
        setup_loopdev client $loopfile $mntpt 60
        mkdir $hsm_root || error "mkdir $hsm_root failed"
        setup_pcc_mapping client \
-               "projid={0}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1\ mmap_conv=0"
+               "projid={0}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1\ mmap_conv=0"
        $LCTL pcc list $MOUNT
 
        local mode=$($LCTL get_param -n llite.$fsuuid.pcc_mode)
@@ -3569,7 +3567,7 @@ test_47() {
        setup_loopdev client $loopfile $mntpt 60
        mkdir $hsm_root || error "mkdir $hsm_root failed"
        setup_pcc_mapping client \
-               "projid={0}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1\ mmap_conv=0"
+               "projid={0}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1\ mmap_conv=0"
        $LCTL pcc list $MOUNT
 
        local mtime0
@@ -3597,7 +3595,7 @@ test_48() {
        setup_loopdev client $loopfile $mntpt 60
        mkdir $hsm_root || error "mkdir $hsm_root failed"
        setup_pcc_mapping client \
-               "projid={0}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1"
+               "projid={0}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1"
 
        echo "QQQQQ" > $file || error "echo $file failed"
        lpcc_path=$(lpcc_fid2path $hsm_root $file)
@@ -3610,7 +3608,7 @@ test_48() {
        check_lpcc_state $file "readonly" client
        $LFS pcc detach $file || error "detach '$file' failed"
 }
-run_test 48 "PCC state should check whether the file in in local PCC cache"
+run_test 48 "PCC state should check whether the file is in local PCC cache"
 
 test_96() {
        local loopfile="$TMP/$tfile"
@@ -3622,7 +3620,7 @@ test_96() {
        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\ mmap_conv=0"
+               "projid={0}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1\ mmap_conv=0"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
        do_facet $SINGLEAGT $LCTL set_param llite.*.pcc_async_threshold=1G
 
@@ -3729,7 +3727,7 @@ test_97() {
        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\ mmap_conv=0"
+               "projid={0}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1\ mmap_conv=0"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
        do_facet $SINGLEAGT $LCTL set_param llite.*.pcc_async_threshold=1G
 
@@ -3789,7 +3787,7 @@ test_98() {
        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\ mmap_conv=0"
+               "projid={0}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1\ mmap_conv=0"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
        do_facet $SINGLEAGT $LCTL set_param llite.*.pcc_async_threshold=0
 
@@ -3864,7 +3862,7 @@ test_99() {
        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"
+               "projid={0}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
 
        do_facet $SINGLEAGT dd if=/dev/zero of=$file bs=1M count=50 ||
@@ -3945,7 +3943,7 @@ test_100() {
        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"
+               "projid={0}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
 
        do_facet $SINGLEAGT dd if=/dev/zero of=$file bs=1M count=50 ||
@@ -4034,7 +4032,7 @@ test_200() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 14
        do_facet $SINGLEAGT mkdir $hsm_root || error "mkdir $hsm_root failed"
        setup_pcc_mapping $SINGLEAGT \
-               "fname={*.dat}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1"
+               "fname={*.dat}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
 
        # create 100 data files
@@ -4105,7 +4103,7 @@ test_201() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 14
        do_facet $SINGLEAGT mkdir $hsm_root || error "mkdir $hsm_root failed"
        setup_pcc_mapping $SINGLEAGT \
-               "fname={*.dat}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1"
+               "fname={*.dat}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
 
        # create 100 data files
@@ -4177,7 +4175,7 @@ test_202() {
        setup_loopdev $SINGLEAGT $loopfile $mntpt 14
        do_facet $SINGLEAGT mkdir $hsm_root || error "mkdir $hsm_root failed"
        setup_pcc_mapping $SINGLEAGT \
-               "fname={*.dat}\ roid=$HSM_ARCHIVE_NUMBER\ ropcc=1"
+               "fname={*.dat}\ roid=$HSM_ARCHIVE_NUMBER\ pccro=1"
        do_facet $SINGLEAGT $LCTL pcc list $MOUNT
 
        # create 100 data files
index 3491d6a..4b77cab 100644 (file)
@@ -374,17 +374,19 @@ command_t mirror_cmdlist[] = {
 command_t pcc_cmdlist[] = {
        { .pc_name = "attach", .pc_func = lfs_pcc_attach,
          .pc_help = "Attach given files to the Persistent Client Cache.\n"
-               "usage: lfs pcc attach [--readonly|-r] [--id|-i NUM] "
-               "<file> ...\n"
+               "usage: lfs pcc attach [--readonly|-r] [--write|-w] "
+               "[--id|-i NUM] <file> ...\n"
                "\t-i: archive id for RW-PCC\n"
-               "\t-r: readonly attach\n" },
+               "\t-r: readonly attach\n"
+               "\t-w: writeable attach\n" },
        { .pc_name = "attach_fid", .pc_func = lfs_pcc_attach_fid,
          .pc_help = "Attach given files into PCC by FID(s).\n"
-               "usage: lfs pcc attach_id [--readonly|-r] [--id|-i NUM] "
-               "<--mnt|-m mnt> <fid> ...\n"
+               "usage: lfs pcc attach_id [--readonly|-r] [--write|-w] "
+               "[--id|-i NUM] <--mnt|-m mnt> <fid> ...\n"
                "\t-i: archive id for RW-PCC\n"
                "\t-m: Lustre mount point\n"
-               "\t-r: readonly attach\n" },
+               "\t-r: readonly attach\n"
+               "\t-w: writeable attach\n" },
        { .pc_name = "state", .pc_func = lfs_pcc_state,
          .pc_help = "Display the PCC state for given files.\n"
                "usage: lfs pcc state <file> ...\n" },
@@ -11655,6 +11657,7 @@ static int lfs_pcc_attach(int argc, char **argv)
        struct option long_opts[] = {
        { .val = 'i',   .name = "id",   .has_arg = required_argument },
        { .val = 'r',   .name = "readonly",     .has_arg = no_argument },
+       { .val = 'w',   .name = "write",        .has_arg = no_argument },
        { .name = NULL } };
        int c;
        int rc = 0;
@@ -11662,10 +11665,10 @@ static int lfs_pcc_attach(int argc, char **argv)
        const char *path;
        char *end;
        char fullpath[PATH_MAX];
-       enum lu_pcc_type type = LU_PCC_READWRITE;
+       enum lu_pcc_type type = LU_PCC_READONLY;
 
        optind = 0;
-       while ((c = getopt_long(argc, argv, "i:r",
+       while ((c = getopt_long(argc, argv, "i:rw",
                                long_opts, NULL)) != -1) {
                switch (c) {
                case 'i':
@@ -11680,6 +11683,9 @@ static int lfs_pcc_attach(int argc, char **argv)
                case 'r':
                        type = LU_PCC_READONLY;
                        break;
+               case 'w':
+                       type = LU_PCC_READWRITE;
+                       break;
                case '?':
                        return CMD_HELP;
                default:
@@ -11724,16 +11730,17 @@ static int lfs_pcc_attach_fid(int argc, char **argv)
        struct option long_opts[] = {
        { .val = 'i',   .name = "id",           .has_arg = required_argument },
        { .val = 'r',   .name = "readonly",     .has_arg = no_argument },
+       { .val = 'w',   .name = "write",        .has_arg = no_argument },
        { .val = 'm',   .name = "mnt",          .has_arg = required_argument },
        { .name = NULL } };
-       char                     short_opts[] = "i:m:r";
+       char                     short_opts[] = "i:m:rw";
        int                      c;
        int                      rc = 0;
        __u32                    attach_id = 0;
        char                    *end;
        const char              *mntpath = NULL;
        const char              *fidstr;
-       enum lu_pcc_type         type = LU_PCC_READWRITE;
+       enum lu_pcc_type         type = LU_PCC_READONLY;
 
        optind = 0;
        while ((c = getopt_long(argc, argv, short_opts,
@@ -11751,6 +11758,9 @@ static int lfs_pcc_attach_fid(int argc, char **argv)
                case 'r':
                        type = LU_PCC_READONLY;
                        break;
+               case 'w':
+                       type = LU_PCC_READWRITE;
+                       break;
                case 'm':
                        mntpath = optarg;
                        break;