From: Omar Sandoval <osandov@osandov.com>
To: fstests@vger.kernel.org, linux-btrfs@vger.kernel.org
Cc: kernel-team@fb.com, Omar Sandoval <osandov@fb.com>
Subject: [PATCH v2 1/2] btrfs: add replace missing and replace RAID 5/6 to profile configs
Date: Thu, 28 Apr 2016 10:33:36 -0700 [thread overview]
Message-ID: <776782f53c3639730a9813a91babb6da57530ab0.1461864695.git.osandov@fb.com> (raw)
In-Reply-To: <cover.1461864695.git.osandov@fb.com>
In-Reply-To: <cover.1461864695.git.osandov@fb.com>
From: Omar Sandoval <osandov@fb.com>
Replacing and scrubbing RAID 5/6 is now supported on Btrfs. Enable it in
_btrfs_get_profile_configs while making it more generic to also support
replace missing.
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Omar Sandoval <osandov@fb.com>
---
common/rc | 95 ++++++++++++++++++++++++++++++++-------------------------------
1 file changed, 48 insertions(+), 47 deletions(-)
diff --git a/common/rc b/common/rc
index 8bec836805c6..91e8f1c8e693 100644
--- a/common/rc
+++ b/common/rc
@@ -3207,60 +3207,61 @@ _btrfs_get_profile_configs()
return
fi
- # no user specified btrfs profile configs, export the default configs
if [ -z "$BTRFS_PROFILE_CONFIGS" ]; then
- # default configs
- _btrfs_profile_configs=(
- "-m single -d single"
- "-m dup -d single"
- "-m raid0 -d raid0"
- "-m raid1 -d raid0"
- "-m raid1 -d raid1"
- "-m raid10 -d raid10"
- "-m raid5 -d raid5"
- "-m raid6 -d raid6"
+ # Default configurations to test.
+ local configs=(
+ "single:single"
+ "dup:single"
+ "raid0:raid0"
+ "raid1:raid0"
+ "raid1:raid1"
+ "raid10:raid10"
+ "raid5:raid5"
+ "raid6:raid6"
)
+ else
+ # User-provided configurations.
+ local configs=(${BTRFS_PROFILE_CONFIGS[@]})
+ fi
- # remove dup/raid5/raid6 profiles if we're doing device replace
- # dup profile indicates only one device being used (SCRATCH_DEV),
- # but we don't want to replace SCRATCH_DEV, which will be used in
- # _scratch_mount/_check_scratch_fs etc.
- # and raid5/raid6 doesn't support replace yet
+ _btrfs_profile_configs=()
+ for cfg in "${configs[@]}"; do
+ local supported=true
+ local profiles=(${cfg/:/ })
if [ "$1" == "replace" ]; then
- _btrfs_profile_configs=(
- "-m single -d single"
- "-m raid0 -d raid0"
- "-m raid1 -d raid0"
- "-m raid1 -d raid1"
- "-m raid10 -d raid10"
- # add these back when raid5/6 is working with replace
- #"-m raid5 -d raid5"
- #"-m raid6 -d raid6"
+ # We can't do replace with these profiles because they
+ # imply only one device ($SCRATCH_DEV), and we need to
+ # keep $SCRATCH_DEV around for _scratch_mount
+ # and _check_scratch_fs.
+ local unsupported=(
+ "dup"
)
+ elif [ "$1" == "replace-missing" ]; then
+ # We can't replace missing devices with these profiles
+ # because there isn't enough redundancy.
+ local unsupported=(
+ "single"
+ "dup"
+ "raid0"
+ )
+ else
+ local unsupported=()
fi
- export _btrfs_profile_configs
- return
- fi
-
- # parse user specified btrfs profile configs
- local i=0
- local cfg=""
- for cfg in $BTRFS_PROFILE_CONFIGS; do
- # turn "metadata:data" format to "-m metadata -d data"
- # and assign it to _btrfs_profile_configs array
- cfg=`echo "$cfg" | sed -e 's/^/-m /' -e 's/:/ -d /'`
- _btrfs_profile_configs[$i]="$cfg"
- let i=i+1
- done
-
- if [ "$1" == "replace" ]; then
- if echo ${_btrfs_profile_configs[*]} | grep -q raid[56]; then
- _notrun "RAID5/6 doesn't support btrfs device replace yet"
- fi
- if echo ${_btrfs_profile_configs[*]} | grep -q dup; then
- _notrun "Do not set dup profile in btrfs device replace test"
+ for unsupp in "${unsupported[@]}"; do
+ if [ "${profiles[0]}" == "$unsupp" -o "${profiles[1]}" == "$unsupp" ]; then
+ if [ -z "$BTRFS_PROFILE_CONFIGS" ]; then
+ # For the default config, just omit it.
+ supported=false
+ else
+ # For user-provided config, don't run the test.
+ _notrun "Profile $unsupp not supported for $1"
+ fi
+ fi
+ done
+ if "$supported"; then
+ _btrfs_profile_configs+=("-m ${profiles[0]} -d ${profiles[1]}")
fi
- fi
+ done
export _btrfs_profile_configs
}
--
2.8.0
next prev parent reply other threads:[~2016-04-28 17:33 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-28 17:33 [PATCH v2 0/2] fstests: btrfs: the lost levels Omar Sandoval
2016-04-28 17:33 ` Omar Sandoval [this message]
2016-04-28 17:33 ` [PATCH v2 2/2] btrfs: add test for replacing a missing device Omar Sandoval
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=776782f53c3639730a9813a91babb6da57530ab0.1461864695.git.osandov@fb.com \
--to=osandov@osandov.com \
--cc=fstests@vger.kernel.org \
--cc=kernel-team@fb.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=osandov@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).