+run_test 161a "link ea sanity"
+
+test_161b() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] &&
+ skip "skipping remote directory test" && return
+ local MDTIDX=1
+ local remote_dir=$DIR/$tdir/remote_dir
+
+ mkdir -p $DIR/$tdir
+ $LFS mkdir -i $MDTIDX $remote_dir ||
+ error "create remote directory failed"
+
+ cp /etc/hosts $remote_dir/$tfile
+ mkdir -p $remote_dir/foo1
+ mkdir -p $remote_dir/foo2
+ ln $remote_dir/$tfile $remote_dir/foo1/sofia
+ ln $remote_dir/$tfile $remote_dir/foo2/zachary
+ ln $remote_dir/$tfile $remote_dir/foo1/luna
+ ln $remote_dir/$tfile $remote_dir/foo2/thor
+
+ local FID=$($LFS path2fid $remote_dir/$tfile | tr -d '[' |
+ tr -d ']')
+ if [ "$($LFS fid2path $DIR $FID | wc -l)" != "5" ]; then
+ $LFS fid2path $DIR $FID
+ err17935 "bad link ea"
+ fi
+ # middle
+ rm $remote_dir/foo2/zachary
+ # last
+ rm $remote_dir/foo2/thor
+ # first
+ rm $remote_dir/$tfile
+ # rename
+ mv $remote_dir/foo1/sofia $remote_dir/foo2/maggie
+ local link_path=$($LFS fid2path $FSNAME --link 1 $FID)
+ if [ "$DIR/$link_path" != "$remote_dir/foo2/maggie" ]; then
+ $LFS fid2path $DIR $FID
+ err17935 "bad link rename"
+ fi
+ rm $remote_dir/foo2/maggie
+
+ # overflow the EA
+ local longname=filename_avg_len_is_thirty_two_
+ createmany -l$remote_dir/foo1/luna $remote_dir/foo2/$longname 1000 ||
+ error "failed to hardlink many files"
+ links=$($LFS fid2path $DIR $FID | wc -l)
+ echo -n "${links}/1000 links in link EA"
+ [ ${links} -gt 60 ] || err17935 "expected at least 60 links in link EA"
+ unlinkmany $remote_dir/foo2/$longname 1000 ||
+ error "failed to unlink many hardlinks"
+}
+run_test 161b "link ea sanity under remote directory"
+
+test_161c() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.1.5) ]] &&
+ skip "Need MDS version at least 2.1.5" && return
+
+ # define CLF_RENAME_LAST 0x0001
+ # rename overwrite a target having nlink = 1 (changelog flag 0x1)
+ local USER=$(do_facet $SINGLEMDS $LCTL --device $MDT0 \
+ changelog_register -n)
+ rm -rf $DIR/$tdir
+ mkdir -p $DIR/$tdir
+ touch $DIR/$tdir/foo_161c
+ touch $DIR/$tdir/bar_161c
+ mv -f $DIR/$tdir/foo_161c $DIR/$tdir/bar_161c
+ $LFS changelog $MDT0 | grep RENME
+ local flags=$($LFS changelog $MDT0 | grep RENME | tail -1 | \
+ cut -f5 -d' ')
+ $LFS changelog_clear $MDT0 $USER 0
+ if [ x$flags != "x0x1" ]; then
+ do_facet $SINGLEMDS $LCTL --device $MDT0 changelog_deregister \
+ $USER
+ error "flag $flags is not 0x1"
+ fi
+ echo "rename overwrite a target having nlink = 1," \
+ "changelog record has flags of $flags"
+
+ # rename overwrite a target having nlink > 1 (changelog flag 0x0)
+ touch $DIR/$tdir/foo_161c
+ touch $DIR/$tdir/bar_161c
+ ln $DIR/$tdir/bar_161c $DIR/$tdir/foobar_161c
+ mv -f $DIR/$tdir/foo_161c $DIR/$tdir/bar_161c
+ $LFS changelog $MDT0 | grep RENME
+ flags=$($LFS changelog $MDT0 | grep RENME | tail -1 | cut -f5 -d' ')
+ $LFS changelog_clear $MDT0 $USER 0
+ if [ x$flags != "x0x0" ]; then
+ do_facet $SINGLEMDS $LCTL --device $MDT0 changelog_deregister \
+ $USER
+ error "flag $flags is not 0x0"
+ fi
+ echo "rename overwrite a target having nlink > 1," \
+ "changelog record has flags of $flags"
+
+ # rename doesn't overwrite a target (changelog flag 0x0)
+ touch $DIR/$tdir/foo_161c
+ mv -f $DIR/$tdir/foo_161c $DIR/$tdir/foo2_161c
+ $LFS changelog $MDT0 | grep RENME
+ flags=$($LFS changelog $MDT0 | grep RENME | tail -1 | cut -f5 -d' ')
+ $LFS changelog_clear $MDT0 $USER 0
+ if [ x$flags != "x0x0" ]; then
+ do_facet $SINGLEMDS $LCTL --device $MDT0 changelog_deregister \
+ $USER
+ error "flag $flags is not 0x0"
+ fi
+ echo "rename doesn't overwrite a target," \
+ "changelog record has flags of $flags"
+
+ # define CLF_UNLINK_LAST 0x0001
+ # unlink a file having nlink = 1 (changelog flag 0x1)
+ rm -f $DIR/$tdir/foo2_161c
+ $LFS changelog $MDT0 | grep UNLNK
+ flags=$($LFS changelog $MDT0 | grep UNLNK | tail -1 | cut -f5 -d' ')
+ $LFS changelog_clear $MDT0 $USER 0
+ if [ x$flags != "x0x1" ]; then
+ do_facet $SINGLEMDS $LCTL --device $MDT0 changelog_deregister \
+ $USER
+ error "flag $flags is not 0x1"
+ fi
+ echo "unlink a file having nlink = 1," \
+ "changelog record has flags of $flags"
+
+ # unlink a file having nlink > 1 (changelog flag 0x0)
+ ln -f $DIR/$tdir/bar_161c $DIR/$tdir/foobar_161c
+ rm -f $DIR/$tdir/foobar_161c
+ $LFS changelog $MDT0 | grep UNLNK
+ flags=$($LFS changelog $MDT0 | grep UNLNK | tail -1 | cut -f5 -d' ')
+ $LFS changelog_clear $MDT0 $USER 0
+ if [ x$flags != "x0x0" ]; then
+ do_facet $SINGLEMDS $LCTL --device $MDT0 changelog_deregister \
+ $USER
+ error "flag $flags is not 0x0"
+ fi
+ echo "unlink a file having nlink > 1," \
+ "changelog record has flags of $flags"
+ do_facet $SINGLEMDS $LCTL --device $MDT0 changelog_deregister $USER
+}
+run_test 161c "check CL_RENME[UNLINK] changelog record flags"