public inbox for linux-btrfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Gabriel Niebler <gniebler@suse.com>
To: Nikolay Borisov <nborisov@suse.com>, linux-btrfs@vger.kernel.org
Cc: dsterba@suse.com
Subject: Re: [PATCH v2] btrfs: Turn name_cache radix tree into XArray in send_ctx
Date: Thu, 5 May 2022 09:36:23 +0200	[thread overview]
Message-ID: <505ded35-7b1a-b58a-3991-3facf974213b@suse.com> (raw)
In-Reply-To: <58aa36f6-6f86-19b1-2eff-50d172b97a6d@suse.com>

Should I resend with the casts removed?

Am 27.04.22 um 16:36 schrieb Gabriel Niebler:
> Am 27.04.22 um 13:46 schrieb Nikolay Borisov:
>> On 26.04.22 г. 12:51 ч., Gabriel Niebler wrote:
>>> … and adjust all usages of this object to use the XArray API for the 
>>> sake
>>> of consistency.
>>>
>>> XArray API provides array semantics, so it is notionally easier to 
>>> use and
>>> understand, and it also takes care of locking for us.
>>>
>>> None of this makes a real difference in this particular patch, but it 
>>> does
>>> in other places where similar replacements are or have been made and we
>>> want to be consistent in our usage of data structures in btrfs.
>>>
>>> Signed-off-by: Gabriel Niebler <gniebler@suse.com>
>>> ---
>>>
>>> Changes from v1:
>>>   - Let commit message begin with "btrfs: "
>>>
>>> ---
>>>   fs/btrfs/send.c | 40 +++++++++++++++++++---------------------
>>>   1 file changed, 19 insertions(+), 21 deletions(-)
>>>
>>
>> LGTM, one minor nit below though.
>>
>> Reviewed-by: Nikolay Borisov <nborisov@suse.com>
>>
>> <snip>
>>
>>> @@ -262,14 +261,14 @@ struct orphan_dir_info {
>>>   struct name_cache_entry {
>>>       struct list_head list;
>>>       /*
>>> -     * radix_tree has only 32bit entries but we need to handle 64bit 
>>> inums.
>>> -     * We use the lower 32bit of the 64bit inum to store it in the 
>>> tree. If
>>> -     * more then one inum would fall into the same entry, we use 
>>> radix_list
>>> -     * to store the additional entries. radix_list is also used to 
>>> store
>>> -     * entries where two entries have the same inum but different
>>> +     * On 32bit kernels, XArray has only 32bit indices, but we need to
>>> +     * handle 64bit inums. We use the lower 32bit of the 64bit inum 
>>> to store
>>> +     * it in the tree. If more than one inum would fall into the 
>>> same entry,
>>> +     * we use inum_aliases to store the additional entries. 
>>> inum_aliases is
>>> +     * also used to store entries with the same inum but different
>>>        * generations.
>>>        */
>>> -    struct list_head radix_list;
>>> +    struct list_head inum_aliases;
>>>       u64 ino;
>>>       u64 gen;
>>>       u64 parent_ino;
>>> @@ -2019,9 +2018,9 @@ static int did_overwrite_first_ref(struct 
>>> send_ctx *sctx, u64 ino, u64 gen)
>>>   }
>>>   /*
>>> - * Insert a name cache entry. On 32bit kernels the radix tree index 
>>> is 32bit,
>>> + * Insert a name cache entry. On 32bit kernels the XArray index is 
>>> 32bit,
>>>    * so we need to do some special handling in case we have clashes. 
>>> This function
>>> - * takes care of this with the help of name_cache_entry::radix_list.
>>> + * takes care of this with the help of name_cache_entry::inum_aliases.
>>>    * In case of error, nce is kfreed.
>>>    */
>>>   static int name_cache_insert(struct send_ctx *sctx,
>>> @@ -2030,8 +2029,7 @@ static int name_cache_insert(struct send_ctx 
>>> *sctx,
>>>       int ret = 0;
>>>       struct list_head *nce_head;
>>> -    nce_head = radix_tree_lookup(&sctx->name_cache,
>>> -            (unsigned long)nce->ino);
>>> +    nce_head = xa_load(&sctx->name_cache, (unsigned long)nce->ino);
>>
>> The casting is redundant since the function's argument is already 
>> declared as unsigned long so truncation happens anyway. The only 
>> rationale to keep is for documentation purposes but even this is 
>> somewhat dubious. But since there is already something said about that 
>> above the definition of inum_aliases I'd say lets do away with the casts.
> 
> I see your point and I agree with you, but I'd like to point out that I 
> didn't add this cast - it was already there  (and I think there may be 
> others, too).
> 
> I thought about removing it (as we had discussed and I've done in 
> another patch), but then I decided to leave it, thinking that maybe 
> there was a reason for it. Like communicating something explicitely to 
> anyone reading the code.
> 
> It's true, though, that the comment actually explains it.
> 
>>>       if (!nce_head) {
>>>           nce_head = kmalloc(sizeof(*nce_head), GFP_KERNEL);
>>>           if (!nce_head) {
>>> @@ -2040,14 +2038,15 @@ static int name_cache_insert(struct send_ctx 
>>> *sctx,
>>>           }
>>>           INIT_LIST_HEAD(nce_head);
>>> -        ret = radix_tree_insert(&sctx->name_cache, nce->ino, nce_head);
>>> +        ret = xa_insert(&sctx->name_cache, nce->ino, nce_head,
>>
>> Here nce->ino is not cast, yet the parameter is still unsigned long 
>> meaning truncation occurs (as is expected). At the very least this 
>> makes the code style inconsistent.
> 
> Yeah, true. Again, it was inconsistent before I got there, but I'll 
> admit that I didn't notice this one.
> 
> For the sake of consistency, I'm willing to remove the cast (and perhaps 
> others, would have to check) and resend.
> 
> I'll leave that up to the maintainer to decide.
> 

      reply	other threads:[~2022-05-05  7:36 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-26  9:51 [PATCH v2] btrfs: Turn name_cache radix tree into XArray in send_ctx Gabriel Niebler
2022-04-27 11:46 ` Nikolay Borisov
2022-04-27 14:36   ` Gabriel Niebler
2022-05-05  7:36     ` Gabriel Niebler [this message]

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=505ded35-7b1a-b58a-3991-3facf974213b@suse.com \
    --to=gniebler@suse.com \
    --cc=dsterba@suse.com \
    --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