From: David Sterba <dsterba@suse.cz>
To: Anand Jain <anand.jain@oracle.com>
Cc: linux-btrfs@vger.kernel.org
Subject: Re: [PATCH 0/4] btrfs, sysfs cleanup and add dev_state
Date: Thu, 5 Dec 2019 16:00:22 +0100 [thread overview]
Message-ID: <20191205150022.GR2734@twin.jikos.cz> (raw)
In-Reply-To: <20191205112706.8125-1-anand.jain@oracle.com>
On Thu, Dec 05, 2019 at 07:27:02PM +0800, Anand Jain wrote:
> Anand Jain (4):
> btrfs: sysfs, use btrfs_sysfs_remove_fsid in fail return in add_fsid
> btrfs: sysfs, add UUID/devinfo kobject
> btrfs: sysfs, rename device_link add,remove functions
> btrfs: sysfs, add devid/dev_state kobject and attribute
So we can start adding things to devinfo, I did a quick test how the
sysfs directory looks like, the base structure seems ok.
Unlike other sources for sysfs file data (like superblock), the devices
can appear and disappear during the lifetime of the filesystem and as
pointed out in the patches, some synchronization is needed.
But it could be more tricky. Reading from the sysfs files should not
block normal operation (no device_list_mutex) but also must not lead to
use-after-free in case the device gets deleted.
I haven't found a simple locking scheme that would avoid accessing a
freed device structure, the sysfs callback can happen at any time and
the structure can be freed already.
So this means that btrfs_sysfs_dev_state_show cannot access it directly
(using offsetof(kobj, ...)). The safe (but not necessarily the best) way
I have so far is to track the device kobjects in the superblock and add
own lock for accessing this structure.
This avoids increasing contention of device_list_mutex, each sysfs
callback needs to take the lock first, lookup the device and print the
value if it's found. Otherwise we know the device is gone.
The lock is rwlock_t, sysfs callbacks take read-side, device deletion
takes write possibly outside of the device_list_mutex before the device
is actually going to be deleted. This relies on fairness of the lock so
the write will happen eventually (even if there are many readers).
next prev parent reply other threads:[~2019-12-05 15:00 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-05 11:27 [PATCH 0/4] btrfs, sysfs cleanup and add dev_state Anand Jain
2019-12-05 11:27 ` [PATCH 1/4] btrfs: sysfs, use btrfs_sysfs_remove_fsid in fail return in add_fsid Anand Jain
2019-12-05 11:27 ` [PATCH 2/4] btrfs: sysfs, add UUID/devinfo kobject Anand Jain
2020-01-14 18:32 ` David Sterba
2020-02-03 10:40 ` Anand Jain
2019-12-05 11:27 ` [PATCH v2 3/4] btrfs: sysfs, rename device_link add,remove functions Anand Jain
2019-12-05 11:27 ` [PATCH 4/4] btrfs: sysfs, add devid/dev_state kobject and attribute Anand Jain
2019-12-05 14:10 ` David Sterba
2019-12-05 14:38 ` Anand Jain
2019-12-05 14:21 ` David Sterba
2019-12-05 14:38 ` Anand Jain
2019-12-05 15:14 ` David Sterba
2019-12-06 13:49 ` Anand Jain
2019-12-09 14:05 ` Anand Jain
2019-12-09 18:31 ` David Sterba
2019-12-13 16:43 ` David Sterba
2019-12-13 17:02 ` David Sterba
2019-12-14 0:26 ` Anand Jain
2020-01-06 16:00 ` David Sterba
2019-12-09 14:06 ` [PATCH v2 " Anand Jain
2019-12-19 10:41 ` [PATCH v3 " Anand Jain
2020-01-06 11:38 ` [PATCH v4] " Anand Jain
2020-01-09 15:20 ` [PATCH v4 4/4] " David Sterba
2020-01-10 1:03 ` Anand Jain
2019-12-05 15:00 ` David Sterba [this message]
2019-12-06 13:46 ` [PATCH 0/4] btrfs, sysfs cleanup and add dev_state Anand Jain
2019-12-09 14:09 ` Anand Jain
2019-12-09 22:48 ` Anand Jain
2019-12-10 16:41 ` David Sterba
2020-01-14 18:39 ` David Sterba
2020-01-15 8:22 ` [PATCH] btrfs: update devid after replace Anand Jain
2020-01-15 16:17 ` David Sterba
2020-01-20 19:10 ` 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=20191205150022.GR2734@twin.jikos.cz \
--to=dsterba@suse.cz \
--cc=anand.jain@oracle.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