From: Anand Jain <anand.jain@oracle.com>
To: dsterba@suse.cz, linux-btrfs@vger.kernel.org
Subject: Re: [PATCH v5.1 24/27] Btrfs: free the stale device
Date: Sat, 30 May 2015 23:34:40 +0800 [thread overview]
Message-ID: <5569D890.5060001@oracle.com> (raw)
In-Reply-To: <20150527113437.GQ23255@twin.jikos.cz>
Hi David, Thanks for comments, more below..
On 05/27/2015 07:34 PM, David Sterba wrote:
> On Fri, May 22, 2015 at 11:33:48PM +0800, Anand Jain wrote:
>> +void btrfs_free_stale_device(struct btrfs_device *cur_dev)
>> +{
>> + int del = 0;
>> + struct btrfs_fs_devices *fs_devs;
>> + struct btrfs_device *dev;
>> +
>> + if (!rcu_str_deref(cur_dev->name))
>> + return;
>
> This looks like rcu-unprotected access, though there's an outer mutext
> held in device_list_add that calls btrfs_free_stale_device. I'm not sure
> that the device name should be used to do any sorts of checks at all.
you are right. I got this corrected in v5.2 just sent out.
>> + list_for_each_entry(fs_devs, &fs_uuids, list) {
>> + if (fs_devs->opened)
>> + continue;
>> + if (fs_devs->seeding)
>> + continue;
>> + list_for_each_entry(dev, &fs_devs->devices, dev_list) {
>> + if (dev == cur_dev)
>> + continue;
>> +
>> + /*
>> + * Todo: This won't be enough. What if same device
>> + * comes back with new uuid and with its mapper path?
>> + * But for now, this does helps as mostly an admin will
>> + * use either mapper or non mapper path throughout.
>> + */
>> + if (!rcu_str_deref(dev->name))
>> + continue;
>> + if (!strcmp(rcu_str_deref(dev->name),
>> + rcu_str_deref(cur_dev->name))) {
>> + del = 1;
>> + break;
>> + }
>> + }
>> + if (del) {
>> + /* delete the stale */
>> + if (fs_devs->num_devices == 1) {
>> + btrfs_sysfs_remove_fsid(fs_devs);
>> + list_del(&fs_devs->list);
>> + free_fs_devices(fs_devs);
>> + } else {
>> + fs_devs->num_devices--;
>> + list_del(&dev->dev_list);
>> + rcu_string_free(dev->name);
>> + kfree(dev);
>
> Devices are normally freed by the rcu through free_device, this looks
> suspicious to mix both approaches.
yes its bit of mixed up, also in other parts as well, for eg:
free_fs_devices(). Here I am following free_fs_devices,
since free_stale will check on the devices that are unmounted.
>> + }
>> + break;
>> + }
>> + }
>> + return;
>
> Unnecessary return
right.
>> +}
>> +
>> /*
>> * Add new device to list of registered devices
>> *
>> @@ -560,6 +609,8 @@ static noinline int device_list_add(const char *path,
>> if (!fs_devices->opened)
>> device->generation = found_transid;
>>
>> + btrfs_free_stale_device(device);
>
> It might be safe to do that in the end, but it should be explained
> somewhere.
Added, Thanks, Anand
>> +
>> *fs_devices_ret = fs_devices;
>>
>> return ret;
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2015-05-30 15:34 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-20 10:01 [PATCH 00/27 V5] provide framework so that sysfs attributs from the fs_devices can be added Anand Jain
2015-03-20 10:01 ` [PATCH 01/27] export symbol kobject_move() Anand Jain
2015-03-20 10:01 ` [PATCH 02/27] Btrfs: sysfs: fix, btrfs_release_super_kobj() should to clean up the kobject data Anand Jain
2015-03-20 10:01 ` [PATCH 03/27] Btrfs: sysfs: fix, fs_info kobject_unregister has init_completion() twice Anand Jain
2015-03-20 10:01 ` [PATCH 04/27] Btrfs: sysfs: fix, undo sysfs device links Anand Jain
2015-03-20 10:01 ` [PATCH 05/27] Btrfs: sysfs: fix, kobject pointer clean up needed after kobject release Anand Jain
2015-03-20 10:01 ` [PATCH 06/27] Btrfc: sysfs: fix, check if device_dir_kobj is init before destroy Anand Jain
2015-03-20 10:01 ` [PATCH 07/27] Btrfs: sysfs: reorder the kobject creations Anand Jain
2015-03-20 10:01 ` [PATCH 08/27] Btrfs: sysfs: rename __btrfs_sysfs_remove_one to btrfs_sysfs_remove_fsid Anand Jain
2015-03-20 10:01 ` [PATCH 09/27] Btrfs: sysfs: introduce function btrfs_sysfs_add_fsid() to create sysfs fsid Anand Jain
2015-03-20 10:01 ` [PATCH 10/27] Btrfs: sysfs: let default_attrs be separate from the kset Anand Jain
2015-03-20 10:01 ` [PATCH 11/27] Btrfs: sysfs: separate device kobject and its attribute creation Anand Jain
2015-03-20 10:01 ` [PATCH 12/27] Btrfs: sysfs: move super_kobj and device_dir_kobj from fs_info to btrfs_fs_devices Anand Jain
2015-03-20 10:01 ` [PATCH 13/27] Btrfs: introduce btrfs_get_fs_uuids to get fs_uuids Anand Jain
2015-03-20 10:01 ` [PATCH 14/27] Btrfs: sysfs: add pointer to access fs_info from fs_devices Anand Jain
2015-03-20 10:01 ` [PATCH 15/27] Btrfs: sysfs: provide framework to remove all fsid sysfs kobject Anand Jain
2015-03-20 10:01 ` [PATCH 16/27] Btrfs: sysfs btrfs_kobj_add_device() pass fs_devices instead of fs_info Anand Jain
2015-03-20 10:01 ` [PATCH 17/27] Btrfs: sysfs btrfs_kobj_rm_device() " Anand Jain
2015-03-20 10:01 ` [PATCH 18/27] Btrfs: sysfs: make btrfs_sysfs_add_fsid() non static Anand Jain
2015-03-20 10:01 ` [PATCH 19/27] Btrfs: sysfs: make btrfs_sysfs_add_device() " Anand Jain
2015-03-20 10:01 ` [PATCH 20/27] Btrfs: sysfs: btrfs_sysfs_remove_fsid() make it " Anand Jain
2015-03-20 10:01 ` [PATCH 21/27] Btrfs: sysfs: separate kobject and attribute creation Anand Jain
2015-03-20 10:01 ` [PATCH 22/27] Btrfs: sysfs: add support to add parent for fsid Anand Jain
2015-03-20 10:01 ` [PATCH 23/27] Btrfs: sysfs: don't fail seeding for the sake of sysfs kobject issue Anand Jain
2015-03-20 10:01 ` [PATCH 24/27] Btrfs: free the stale device Anand Jain
2015-05-22 15:33 ` [PATCH v5.1 " Anand Jain
2015-05-27 11:34 ` David Sterba
2015-05-30 15:34 ` Anand Jain [this message]
2015-05-30 15:32 ` [PATCH v5.2 24/42] " Anand Jain
2015-06-17 13:10 ` [PATCH v5.3 24/27] " Anand Jain
2015-03-20 10:01 ` [PATCH 25/27] Btrfs: sysfs: add support to show replacing target in the sysfs Anand Jain
2015-03-20 10:01 ` [PATCH 26/27] Btrfs: sysfs: support seed devices in the sysfs layout Anand Jain
2015-03-20 10:01 ` [PATCH 27/27] Btrfs: create sys/fs/btrfs/fsid when scanned instead of when mounted Anand Jain
2015-04-07 8:08 ` [PATCH 00/27 V5] provide framework so that sysfs attributs from the fs_devices can be added Anand Jain
2015-05-05 13:51 ` David Sterba
2015-05-20 16:40 ` David Sterba
2015-05-21 14:48 ` Anand Jain
2015-05-21 15:14 ` 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=5569D890.5060001@oracle.com \
--to=anand.jain@oracle.com \
--cc=dsterba@suse.cz \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.