From: Niu Yawei Date: Mon, 28 Jan 2013 09:19:57 +0000 (-0500) Subject: LU-2663 tests: don't remove objects by debugfs X-Git-Tag: 2.3.61~79 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=622148ee4bf305bc32ecf565d42c97f466cc90d8 LU-2663 tests: don't remove objects by debugfs In lfsck.sh, we shouldn't use debugfs to remove objects, that'll cause quota usage inconsistence warning in e2fsck. Fix improper LBUG() in mdd_create_data(), MDS_OPEN_HAS_OBJS is still used by lfsck. Signed-off-by: Niu Yawei Change-Id: I93c6f5c40e359d0d8402868be548088d6e2ac5da Reviewed-on: http://review.whamcloud.com/5186 Tested-by: Hudson Reviewed-by: Andreas Dilger Reviewed-by: Emoly Liu Tested-by: Andreas Dilger --- diff --git a/lustre/mdd/mdd_dir.c b/lustre/mdd/mdd_dir.c index b69327d..7344c49 100644 --- a/lustre/mdd/mdd_dir.c +++ b/lustre/mdd/mdd_dir.c @@ -1315,21 +1315,12 @@ static int mdd_create_data(const struct lu_env *env, struct md_object *pobj, 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, diff --git a/lustre/tests/lfsck.sh b/lustre/tests/lfsck.sh index 7ade8bc..53ec4ff 100644 --- a/lustre/tests/lfsck.sh +++ b/lustre/tests/lfsck.sh @@ -177,28 +177,29 @@ get_files() { # 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. @@ -232,7 +233,7 @@ if is_empty_fs $MOUNT; then # 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 @@ -244,14 +245,14 @@ if is_empty_fs $MOUNT; then # 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 diff --git a/lustre/tests/test-framework.sh b/lustre/tests/test-framework.sh index f571ca8..f195b97 100644 --- a/lustre/tests/test-framework.sh +++ b/lustre/tests/test-framework.sh @@ -5711,7 +5711,7 @@ remove_mdt_files() { 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 || @@ -5735,7 +5735,7 @@ duplicate_mdt_files() { 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 ||