if (rc != 0)
GOTO(put_parent, rc);
+ if (info->mti_spec.sp_rm_entry) {
+ struct lu_ucred *uc = mdt_ucred(info);
+
+ if (!mdt_is_dne_client(req->rq_export))
+ /* Return -ENOTSUPP for old client */
+ GOTO(unlock_parent, rc = -ENOTSUPP);
+
+ if (!cap_raised(uc->uc_cap, CAP_SYS_ADMIN))
+ GOTO(unlock_parent, rc = -EPERM);
+
+ ma->ma_need = MA_INODE;
+ ma->ma_valid = 0;
+ rc = mdo_unlink(info->mti_env, mdt_object_child(mp),
+ NULL, &rr->rr_name, ma, no_name);
+ GOTO(unlock_parent, rc);
+ }
+
if (info->mti_spec.sp_cr_flags & MDS_OP_WITH_FID) {
*child_fid = *rr->rr_fid2;
} else {
child_lh = &info->mti_lh[MDT_LH_CHILD];
mdt_lock_reg_init(child_lh, LCK_EX);
- if (info->mti_spec.sp_rm_entry) {
- struct lu_ucred *uc = mdt_ucred(info);
-
- if (!mdt_is_dne_client(req->rq_export))
- /* Return -ENOTSUPP for old client */
- GOTO(put_child, rc = -ENOTSUPP);
-
- if (!cap_raised(uc->uc_cap, CAP_SYS_ADMIN))
- GOTO(put_child, rc = -EPERM);
-
- ma->ma_need = MA_INODE;
- ma->ma_valid = 0;
- rc = mdo_unlink(info->mti_env, mdt_object_child(mp),
- NULL, &rr->rr_name, ma, no_name);
- GOTO(put_child, rc);
- }
-
if (mdt_object_remote(mc)) {
struct mdt_body *repbody;
}
run_test 831 "throttling unlink/setattr queuing on OSP"
+test_832() {
+ (( $MDSCOUNT >= 2 )) || skip "needs >= 2 MDTs"
+ (( $MDS1_VERSION >= $(version_code 2.15.52) )) ||
+ skip "Need MDS version 2.15.52+"
+ is_rmentry_supported || skip "rm_entry not supported"
+
+ mkdir_on_mdt0 $DIR/$tdir || error "mkdir $tdir failed"
+ mkdir $DIR/$tdir/local_dir || error "mkdir local_dir failed"
+ mkdir_on_mdt -i 1 $DIR/$tdir/remote_dir ||
+ error "mkdir remote_dir failed"
+ $LFS mkdir -c $MDSCOUNT $DIR/$tdir/striped_dir ||
+ error "mkdir striped_dir failed"
+ touch $DIR/$tdir/file || error "touch file failed"
+ $LFS rm_entry $DIR/$tdir/* || error "lfs rm_entry $tdir/* failed"
+ [ -z "$(ls -A $DIR/$tdir)" ] || error "$tdir not empty"
+}
+run_test 832 "lfs rm_entry"
+
#
# tests that do cleanup/setup should be run at the end
#