spec->u.sp_ea.eadata, spec->u.sp_ea.eadatalen,
spec->sp_cr_flags, spec->no_create);
- if (spec->no_create) {
- /* replay case */
+ if (spec->no_create || spec->sp_cr_flags & MDS_OPEN_HAS_EA) {
+ /* replay case or lfs setstripe */
buf = mdd_buf_get_const(env, spec->u.sp_ea.eadata,
spec->u.sp_ea.eadatalen);
- } else if (!(spec->sp_cr_flags & MDS_OPEN_HAS_OBJS)) {
- if (spec->sp_cr_flags & MDS_OPEN_HAS_EA) {
- /* lfs setstripe */
- buf = mdd_buf_get_const(env, spec->u.sp_ea.eadata,
- spec->u.sp_ea.eadatalen);
- } else {
- buf = &LU_BUF_NULL;
- }
} else {
- /* MDS_OPEN_HAS_OBJS is not used anymore ? */
- LBUG();
+ buf = &LU_BUF_NULL;
}
rc = dt_declare_xattr_set(env, mdd_object_child(son), buf,
# Remove objects associated with files.
remove_objects() {
- local node=$1
- shift
- local ostdev=$1
- shift
- local group=$1
- shift
- local objids="$@"
- local tmp
- local i
- local rc
-
- echo "removing objects from $ostdev on $facet: $objids"
- tmp=$(mktemp $SHARED_DIRECTORY/debugfs.XXXXXXXXXX)
- for i in $objids; do
- echo "rm O/$group/d$((i % 32))/$i" >> $tmp
- done
-
- do_node $node "$DEBUGFS -w -f $tmp $ostdev"
- rc=${PIPESTATUS[0]}
- rm -f $tmp
-
- return $rc
+ local ostdev=$1
+ shift
+ local group=$1
+ shift
+ local objids="$@"
+ local facet=ost$((OSTIDX + 1))
+ local mntpt=$(facet_mntpt $facet)
+ local opts=$OST_MOUNT_OPTS
+ local i
+ local rc
+
+ echo "removing objects from $ostdev on $facet: $objids"
+ if ! do_facet $facet test -b $ostdev; then
+ opts=$(csa_add "$opts" -o loop)
+ fi
+ mount -t $(facet_fstype $facet) $opts $ostdev $mntpt ||
+ return $?
+ rc=0;
+ for i in $objids; do
+ rm $mntpt/O/$group/d$((i % 32))/$i || { rc=$?; break; }
+ done
+ umount -f $mntpt || return $?
+ return $rc
}
# Remove files from MDS.
# get the node name and target device for the OST with index $OSTIDX
OSTNODE=$(get_ost_node $OSTIDX) || error "get_ost_node by index $OSTIDX failed"
- OSTDEV=$(get_ost_dev $OSTNODE $OSTIDX) || \
+ OSTDEV=$(get_ost_dev $OSTNODE $OSTIDX) ||
error "get_ost_dev $OSTNODE $OSTIDX failed"
# get the file names to be duplicated on the MDS
# remove objects associated with files in group $OBJGRP
# on the OST with index $OSTIDX
- remove_objects $OSTNODE $OSTDEV $OBJGRP $OST_REMOVE || \
+ remove_objects $OSTDEV $OBJGRP $OST_REMOVE ||
error "removing objects failed"
# remove files from MDS
remove_files $SINGLEMDS $MDTDEV $MDS_REMOVE || error "removing files failed"
# create EAs on files so objects are referenced from different files
- duplicate_files $SINGLEMDS $MDTDEV $MDS_DUPE || \
+ duplicate_files $SINGLEMDS $MDTDEV $MDS_DUPE ||
error "duplicating files failed"
FSCK_MAX_ERR=1 # file system errors corrected
else # is_empty_fs $MOUNT
echo "removing files from $mdtdev on $facet: $files"
if [ $(facet_fstype $facet) == ldiskfs ] &&
- ! do_facet $facet test -b ${!dev}; then
+ ! do_facet $facet test -b $mdtdev; then
opts=$(csa_add "$opts" -o loop)
fi
mount -t $(facet_fstype $facet) $opts $mdtdev $mntpt ||
echo "duplicating files on $mdtdev on $facet: $files"
mkdir -p $mntpt || return $?
if [ $(facet_fstype $facet) == ldiskfs ] &&
- ! do_facet $facet test -b ${!dev}; then
+ ! do_facet $facet test -b $mdtdev; then
opts=$(csa_add "$opts" -o loop)
fi
mount -t $(facet_fstype $facet) $opts $mdtdev $mntpt ||