if (rc)
RETURN(rc);
+ if (likely(mdd_cobj != NULL)) {
+ /* fetch cattr */
+ rc = mdd_la_get(env, mdd_cobj, cattr, BYPASS_CAPA);
+ if (rc)
+ RETURN(rc);
+
+ is_dir = S_ISDIR(cattr->la_mode);
+ }
+
+ rc = mdd_unlink_sanity_check(env, mdd_pobj, pattr, mdd_cobj, cattr);
+ if (rc)
+ RETURN(rc);
+
handle = mdd_trans_create(env, mdd);
if (IS_ERR(handle))
RETURN(PTR_ERR(handle));
if (rc)
GOTO(stop, rc);
- if (likely(mdd_cobj != NULL)) {
+ if (likely(mdd_cobj != NULL))
mdd_write_lock(env, mdd_cobj, MOR_TGT_CHILD);
- /* fetch cattr */
- rc = mdd_la_get(env, mdd_cobj, cattr, BYPASS_CAPA);
- if (rc)
- GOTO(cleanup, rc);
-
- is_dir = S_ISDIR(cattr->la_mode);
- }
-
- rc = mdd_unlink_sanity_check(env, mdd_pobj, pattr, mdd_cobj, cattr);
- if (rc)
- GOTO(cleanup, rc);
-
if (likely(no_name == 0)) {
rc = __mdd_index_delete(env, mdd_pobj, name, is_dir, handle,
mdd_object_capa(env, mdd_pobj));
}
run_test 3 "mkdir; touch; rmdir; check dir ====================="
+# LU-4471 - failed rmdir on remote directories still removes directory on MDT0
+test_4() {
+ local MDTIDX=1
+ local remote_dir=remote_dir
+
+ test_mkdir $DIR/$remote_dir ||
+ error "Create remote directory failed"
+
+ touch $DIR/$remote_dir/$tfile ||
+ error "Create file under remote directory failed"
+
+ rmdir $DIR/$remote_dir &&
+ error "Expect error removing in-use dir $DIR/$remote_dir"
+
+ test -d $DIR/$remote_dir || error "Remote directory disappeared"
+}
+run_test 4 "mkdir; touch dir/file; rmdir; checkdir (expect error)"
+
test_5() {
test_mkdir -p $DIR/$tdir || error "mkdir $tdir failed"
test_mkdir $DIR/$tdir/d2 || error "mkdir $tdir/d2 failed"