If target does not exist, and source directory is remote
directory, it should return -EXDEV.
Add test in test_24x to verify it.
Create local directory for test_214, since cross-MDT rename
is not allowed yet.
Signed-off-by: wang di <di.wang@intel.com>
Change-Id: I0d4d8d96249ec23fcea5ab6ac5fce196728e8e73
Reviewed-on: http://review.whamcloud.com/7579
Tested-by: Hudson
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
fid_seq(fid) == FID_SEQ_QUOTA_GLB;
}
fid_seq(fid) == FID_SEQ_QUOTA_GLB;
}
+static inline int fid_is_name_llog(const struct lu_fid *fid)
+{
+ return fid_seq(fid) == FID_SEQ_LLOG_NAME;
+}
+
static inline int fid_is_namespace_visible(const struct lu_fid *fid)
{
const __u64 seq = fid_seq(fid);
static inline int fid_is_namespace_visible(const struct lu_fid *fid)
{
const __u64 seq = fid_seq(fid);
} else if (rc != -EREMOTE && rc != -ENOENT) {
GOTO(out_unlock_old, rc);
} else {
} else if (rc != -EREMOTE && rc != -ENOENT) {
GOTO(out_unlock_old, rc);
} else {
- mdt_enoent_version_save(info, 3);
+ /* If mnew does not exist and mold are remote directory,
+ * it only allows rename if they are under same directory */
+ if (mtgtdir != msrcdir && mdt_object_remote(mold)) {
+ CDEBUG(D_INFO, "Src child "DFID" is on another MDT\n",
+ PFID(old_fid));
+ GOTO(out_unlock_old, rc = -EXDEV);
+ }
+ mdt_enoent_version_save(info, 3);
}
/* step 5: rename it */
}
/* step 5: rename it */
RETURN(1);
if (unlikely(fid_is_local_file(fid) || fid_is_igif(fid) ||
RETURN(1);
if (unlikely(fid_is_local_file(fid) || fid_is_igif(fid) ||
+ fid_is_llog(fid)) || fid_is_name_llog(fid) ||
+ fid_is_quota(fid))
RETURN(0);
if (fid_is_idif(fid) || fid_is_last_id(fid))
RETURN(0);
if (fid_is_idif(fid) || fid_is_last_id(fid))
mkdir -p $remote_dir/tgt_dir
touch $remote_dir/tgt_file
mkdir -p $remote_dir/tgt_dir
touch $remote_dir/tgt_file
+ mrename $remote_dir $DIR/ &&
+ error "rename dir cross MDT works!"
+
mrename $DIR/$tdir/src_dir $remote_dir/tgt_dir &&
error "rename dir cross MDT works!"
mrename $DIR/$tdir/src_dir $remote_dir/tgt_dir &&
error "rename dir cross MDT works!"
run_test 213 "OSC lock completion and cancel race don't crash - bug 18829"
test_214() { # for bug 20133
run_test 213 "OSC lock completion and cancel race don't crash - bug 18829"
test_214() { # for bug 20133
- test_mkdir -p $DIR/d214p/d214c
+ mkdir -p $DIR/$tdir/d214c || error "mkdir $DIR/$tdir/d214c failed"
for (( i=0; i < 340; i++ )) ; do
for (( i=0; i < 340; i++ )) ; do
- touch $DIR/d214p/d214c/a$i
+ touch $DIR/$tdir/d214c/a$i
- ls -l $DIR/d214p || error "ls -l $DIR/d214p failed"
- mv $DIR/d214p/d214c $DIR/ || error "mv $DIR/d214p/d214c $DIR/ failed"
+ ls -l $DIR/$tdir || error "ls -l $DIR/d214p failed"
+ mv $DIR/$tdir/d214c $DIR/ || error "mv $DIR/d214p/d214c $DIR/ failed"
ls $DIR/d214c || error "ls $DIR/d214c failed"
ls $DIR/d214c || error "ls $DIR/d214c failed"
+ rm -rf $DIR/$tdir || error "rm -rf $DIR/d214* failed"
rm -rf $DIR/d214* || error "rm -rf $DIR/d214* failed"
}
run_test 214 "hash-indexed directory test - bug 20133"
rm -rf $DIR/d214* || error "rm -rf $DIR/d214* failed"
}
run_test 214 "hash-indexed directory test - bug 20133"