linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Anand Jain <anand.jain@oracle.com>
To: David Sterba <dsterba@suse.com>, linux-btrfs@vger.kernel.org
Subject: Re: [PATCH 11/15] btrfs: pass number of devices to btrfs_check_raid_min_devices
Date: Tue, 16 Feb 2016 17:08:27 +0800	[thread overview]
Message-ID: <56C2E70B.80502@oracle.com> (raw)
In-Reply-To: <83c7c8cf473c48f6dd8eaccb2d80fcc84cf8919e.1455556900.git.dsterba@suse.com>



looks good.

Reviewed-by: Anand Jain <anand.jain@oracle.com>
Tested-by: Anand Jain <anand.jain@oracle.com>

Thanks.

On 02/16/2016 01:34 AM, David Sterba wrote:
> Before this patch, btrfs_check_raid_min_devices would do an off-by-one
> check of the constraints and not the miminmum check, as its name
> suggests. This is not a problem if the only caller is device remove, but
> would be confusing for others.
>
> Add an argument with the exact number and let the caller(s) decide if
> this needs any adjustments, like when device replace is running.
>
> Signed-off-by: David Sterba <dsterba@suse.com>
> ---
>   fs/btrfs/volumes.c | 35 ++++++++++++++++++++---------------
>   1 file changed, 20 insertions(+), 15 deletions(-)
>
> diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
> index 4fa4a836a072..ae94e06f3e61 100644
> --- a/fs/btrfs/volumes.c
> +++ b/fs/btrfs/volumes.c
> @@ -1705,20 +1705,17 @@ static int btrfs_rm_dev_item(struct btrfs_root *root,
>   	return ret;
>   }
>
> -static int btrfs_check_raid_min_devices(struct btrfs_fs_info *fs_info)
> +/*
> + * Verify that @num_devices satisfies the RAID profile constraints in the whole
> + * filesystem. It's up to the caller to adjust that number regarding eg. device
> + * replace.
> + */
> +static int btrfs_check_raid_min_devices(struct btrfs_fs_info *fs_info,
> +		u64 num_devices)
>   {
>   	u64 all_avail;
> -	u64 num_devices;
>   	unsigned seq;
>
> -	num_devices = fs_info->fs_devices->num_devices;
> -	btrfs_dev_replace_lock(&fs_info->dev_replace);
> -	if (btrfs_dev_replace_is_ongoing(&fs_info->dev_replace)) {
> -		WARN_ON(num_devices < 1);
> -		num_devices--;
> -	}
> -	btrfs_dev_replace_unlock(&fs_info->dev_replace);
> -
>   	do {
>   		seq = read_seqbegin(&fs_info->profiles_lock);
>
> @@ -1727,21 +1724,21 @@ static int btrfs_check_raid_min_devices(struct btrfs_fs_info *fs_info)
>   			    fs_info->avail_metadata_alloc_bits;
>   	} while (read_seqretry(&fs_info->profiles_lock, seq));
>
> -	if ((all_avail & BTRFS_BLOCK_GROUP_RAID10) && num_devices <= 4) {
> +	if ((all_avail & BTRFS_BLOCK_GROUP_RAID10) && num_devices < 4) {
>   		return BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET;
>   	}
>
> -	if ((all_avail & BTRFS_BLOCK_GROUP_RAID1) && num_devices <= 2) {
> +	if ((all_avail & BTRFS_BLOCK_GROUP_RAID1) && num_devices < 2) {
>   		return BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET;
>   	}
>
>   	if ((all_avail & BTRFS_BLOCK_GROUP_RAID5) &&
> -	    fs_info->fs_devices->rw_devices <= 2) {
> +	    fs_info->fs_devices->rw_devices < 2) {
>   		return BTRFS_ERROR_DEV_RAID5_MIN_NOT_MET;
>   	}
>
>   	if ((all_avail & BTRFS_BLOCK_GROUP_RAID6) &&
> -	    fs_info->fs_devices->rw_devices <= 3) {
> +	    fs_info->fs_devices->rw_devices < 3) {
>   		return BTRFS_ERROR_DEV_RAID6_MIN_NOT_MET;
>   	}
>
> @@ -1760,7 +1757,15 @@ int btrfs_rm_device(struct btrfs_root *root, char *device_path, u64 devid)
>
>   	mutex_lock(&uuid_mutex);
>
> -	ret = btrfs_check_raid_min_devices(root->fs_info);
> +	num_devices = root->fs_info->fs_devices->num_devices;
> +	btrfs_dev_replace_lock(&root->fs_info->dev_replace);
> +	if (btrfs_dev_replace_is_ongoing(&root->fs_info->dev_replace)) {
> +		WARN_ON(num_devices < 1);
> +		num_devices--;
> +	}
> +	btrfs_dev_replace_unlock(&root->fs_info->dev_replace);
> +
> +	ret = btrfs_check_raid_min_devices(root->fs_info, num_devices - 1);
>   	if (ret)
>   		goto out;
>
>

  reply	other threads:[~2016-02-16  9:08 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-15 17:33 [PATCH 00/15] Device delete by id David Sterba
2016-02-15 17:33 ` [PATCH 01/15] btrfs: create a helper function to read the disk super David Sterba
2016-02-15 17:34 ` [PATCH 02/15] btrfs: create helper function __check_raid_min_devices() David Sterba
2016-02-15 17:34 ` [PATCH 03/15] btrfs: clean up and optimize __check_raid_min_device() David Sterba
2016-02-15 17:34 ` [PATCH 04/15] btrfs: create helper btrfs_find_device_by_user_input() David Sterba
2016-02-15 17:34 ` [PATCH 05/15] btrfs: make use of btrfs_find_device_by_user_input() David Sterba
2016-02-15 17:34 ` [PATCH 06/15] btrfs: enhance btrfs_find_device_by_user_input() to check device path David Sterba
2016-02-15 17:34 ` [PATCH 07/15] btrfs: make use of btrfs_scratch_superblocks() in btrfs_rm_device() David Sterba
2016-02-15 17:34 ` [PATCH 08/15] btrfs: introduce device delete by devid David Sterba
2016-02-15 17:34 ` [PATCH 09/15] btrfs: optimize check for stale device David Sterba
2016-02-15 17:34 ` [PATCH 10/15] btrfs: rename __check_raid_min_devices David Sterba
2016-02-16  9:07   ` Anand Jain
2016-02-15 17:34 ` [PATCH 11/15] btrfs: pass number of devices to btrfs_check_raid_min_devices David Sterba
2016-02-16  9:08   ` Anand Jain [this message]
2016-02-15 17:34 ` [PATCH 12/15] btrfs: indtroduce raid-type to error-code table, for minimum device constraint David Sterba
2016-02-16  9:09   ` Anand Jain
2016-02-15 17:34 ` [PATCH 13/15] btrfs: use existing device constraints table btrfs_raid_array David Sterba
2016-02-16  9:13   ` Anand Jain
2016-02-15 17:34 ` [PATCH 14/15] btrfs: rename btrfs_find_device_by_user_input David Sterba
2016-02-16  9:14   ` Anand Jain
2016-02-15 17:34 ` [PATCH 15/15] btrfs: rename flags for vol args v2 David Sterba
2016-02-16  9:18   ` Anand Jain
2016-02-16  9:43     ` David Sterba
2016-02-25 17:59 ` [PATCH 00/15] Device delete by id David Sterba
2016-03-11  8:16   ` Anand Jain

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=56C2E70B.80502@oracle.com \
    --to=anand.jain@oracle.com \
    --cc=dsterba@suse.com \
    --cc=linux-btrfs@vger.kernel.org \
    /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).