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>, dsterba@suse.cz
Cc: Nikolay Borisov <nborisov@suse.com>,
	linux-btrfs <linux-btrfs@vger.kernel.org>
Subject: Re: [RFC] BTRFS_DEV_REPLACE_ITEM_STATE_* doesn't match with on disk
Date: Wed, 21 Nov 2018 15:31:34 +0800	[thread overview]
Message-ID: <fad69f0c-a56e-0cbc-2ae0-85957b8f339e@oracle.com> (raw)
In-Reply-To: <dd4eb64b-0841-1f81-04e1-309212bbbedd@oracle.com>


David, any comments on this please.

Thanks, Anand


On 11/13/2018 06:32 PM, Anand Jain wrote:
> 
> David, Gentle ping.
> 
> Thanks, Anand
> 
> On 11/12/2018 03:50 PM, Nikolay Borisov wrote:
>>
>>
>> On 12.11.18 г. 6:58 ч., Anand Jain wrote:
>>>
>>> The dev_replace_state defines are miss matched between the
>>> BTRFS_IOCTL_DEV_REPLACE_STATE_* and BTRFS_DEV_REPLACE_ITEM_STATE_* [1].
>>>
>>> [1]
>>> -----------------------------
>>> btrfs.h:#define BTRFS_IOCTL_DEV_REPLACE_STATE_FINISHED        2
>>> btrfs.h:#define BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED        3
>>> btrfs.h:#define BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED        4
>>>
>>> btrfs_tree.h:#define BTRFS_DEV_REPLACE_ITEM_STATE_SUSPENDED    2
>>> btrfs_tree.h:#define BTRFS_DEV_REPLACE_ITEM_STATE_FINISHED    3
>>> btrfs_tree.h:#define BTRFS_DEV_REPLACE_ITEM_STATE_CANCELED    4
>>> -----------------------------
>>>
>>> The BTRFS_DEV_REPLACE_ITEM_STATE_* series is unused in both btrfs.ko and
>>> btrfs-progs, the on-disk also follows BTRFS_IOCTL_DEV_REPLACE_STATE_*
>>> (we set dev_replace->replace_state using the
>>> BTRFS_IOCTL_DEV_REPLACE_STATE_* defines and write to the on-disk).
>>>
>>>   359         btrfs_set_dev_replace_replace_state(eb, ptr,
>>>   360                 dev_replace->replace_state);
>>>
>>> IMO it should be ok to delete the BTRFS_DEV_REPLACE_ITEM_STATE_*
>>> altogether? But how about the userland progs other than btrfs-progs?
>>> If not at least fix the miss match as in [2], any comments?
>>
>> Unfortunately you are right. This seems to stem from sloppy job back in
>> the days of initial dev-replace support. BTRFS_DEV_REPLACE_ITEM_STATE_*
>> were added in e922e087a35c ("Btrfs: enhance btrfs structures for device
>> replace support"), yet they were never used. And the
>> IOCTL_DEV_REPLACE_STATE* were added in e93c89c1aaaa ("Btrfs: add new
>> sources for device replace code").
>>
>> It looks like the ITEM_STATE* definitions were stillborn so to speak and
>> personally I'm in favor of removing them. They shouldn't have been
>> merged in the first place and indeed the patch doesn't even have a
>> Reviewed-by tag. So it originated from the, I'd say, spartan days of
>> btrfs development...
>>
>> David,  any code which is using BTRFS_DEV_REPLACE_ITEM_STATE_SUSPENDED
>> is inherently broken, so how about we remove those definitions, then
>> when it's compilation is broken in the future the author will actually
>> have a chance to fix it, though it's highly unlikely anyone is relying
>> on those definitions.
>>
>>
>>>
>>> [2]
>>> --------------------------------------
>>> diff --git a/include/uapi/linux/btrfs_tree.h
>>> b/include/uapi/linux/btrfs_tree.h
>>> index aff1356c2bb8..9ffa7534cadf 100644
>>> --- a/include/uapi/linux/btrfs_tree.h
>>> +++ b/include/uapi/linux/btrfs_tree.h
>>> @@ -805,9 +805,9 @@ struct btrfs_dev_stats_item {
>>>   #define 
>>> BTRFS_DEV_REPLACE_ITEM_CONT_READING_FROM_SRCDEV_MODE_AVOID     1
>>>   #define BTRFS_DEV_REPLACE_ITEM_STATE_NEVER_STARTED     0
>>>   #define BTRFS_DEV_REPLACE_ITEM_STATE_STARTED           1
>>> -#define BTRFS_DEV_REPLACE_ITEM_STATE_SUSPENDED         2
>>> -#define BTRFS_DEV_REPLACE_ITEM_STATE_FINISHED          3
>>> -#define BTRFS_DEV_REPLACE_ITEM_STATE_CANCELED          4
>>> +#define BTRFS_DEV_REPLACE_ITEM_STATE_FINISHED          2
>>> +#define BTRFS_DEV_REPLACE_ITEM_STATE_CANCELED          3
>>> +#define BTRFS_DEV_REPLACE_ITEM_STATE_SUSPENDED         4
>>>
>>>   struct btrfs_dev_replace_item {
>>>          /*
>>> --------------------------------------
>>>
>>>
>>> Thanks, Anand
>>>


  reply	other threads:[~2018-11-21  7:31 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-12  4:58 [RFC] BTRFS_DEV_REPLACE_ITEM_STATE_* doesn't match with on disk Anand Jain
2018-11-12  7:50 ` Nikolay Borisov
2018-11-13 10:32   ` Anand Jain
2018-11-21  7:31     ` Anand Jain [this message]
2019-08-02  4:07       ` Anand Jain
2019-08-02  9:46   ` David Sterba

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=fad69f0c-a56e-0cbc-2ae0-85957b8f339e@oracle.com \
    --to=anand.jain@oracle.com \
    --cc=dsterba@suse.com \
    --cc=dsterba@suse.cz \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=nborisov@suse.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).