All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Sterba <dsterba@suse.cz>
To: Anand Jain <anand.jain@oracle.com>
Cc: linux-btrfs@vger.kernel.org
Subject: Re: [PATCH v3] btrfs: drop uuid_mutex in btrfs_free_extra_devids()
Date: Fri, 25 May 2018 17:55:30 +0200	[thread overview]
Message-ID: <20180525155530.GP6649@twin.jikos.cz> (raw)
In-Reply-To: <20180523025422.32572-1-anand.jain@oracle.com>

On Wed, May 23, 2018 at 10:54:22AM +0800, Anand Jain wrote:
> btrfs_free_extra_devids() is called only in the mount context which
> traverses through the fs_devices::devices and frees the orphan devices
> devices in the given %fs_devices if any. As the search for the orphan
> device is limited to fs_devices::devices so we don't need the global
> uuid_mutex.
> 
> There can't be any mount-point based ioctl threads in this context as
> the mount thread is not yet returned. But there can be the btrfs-control
> based scan ioctls thread which calls device_list_add().
> 
> Here in the mount thread the fs_devices::opened is incremented way before
> btrfs_free_extra_devids() is called and in the scan context the fs_devices
> which are already opened neither be freed or alloc-able at
> device_list_add().
> 
> But lets say you change the device-path and call the scan again, then scan
> would update the new device path and this operation could race against the
> btrfs_free_extra_devids() thread, which might be in the process of
> free-ing the same device. So synchronize it by using the
> device_list_mutex.
> 
> This scenario is a very corner case, and practically the scan and mount
> are anyway serialized by the usage so unless the race is instrumented its
> very difficult to achieve.
> 
> Signed-off-by: Anand Jain <anand.jain@oracle.com>

Thanks, this explanation is much better and addresses the questions I
have while reading the code.

Reviewed-by: David Sterba <dsterba@suse.com>

> ---
> Currently device_list_add() is very lean on its device_list_mutex usage,
> a cleanup and fix is wip.

I also have a WIP patch to rewrite device_list_add. There were quite
some changes around the device locking so I'd need to refresh it on top
of current code first, it's not in a shape to be posted yet.

  reply	other threads:[~2018-05-25 15:58 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-12  2:29 [PATCH 0/15] Review uuid_mutex usage Anand Jain
2018-04-12  2:29 ` [PATCH 01/15] btrfs: optimize move uuid_mutex closer to the critical section Anand Jain
2018-04-12  2:29 ` [PATCH 02/15] btrfs: rename struct btrfs_fs_devices::list Anand Jain
2018-04-12  2:29 ` [PATCH 03/15] btrfs: cleanup __btrfs_open_devices() drop head pointer Anand Jain
2018-04-12  2:29 ` [PATCH 04/15] btrfs: rename __btrfs_close_devices to close_fs_devices Anand Jain
2018-04-12  2:29 ` [PATCH 05/15] btrfs: rename __btrfs_open_devices to open_fs_devices Anand Jain
2018-04-12  2:29 ` [PATCH 06/15] btrfs: cleanup find_device() drop list_head pointer Anand Jain
2018-04-12  2:29 ` [PATCH 07/15] btrfs: cleanup btrfs_rm_device() promote fs_devices pointer Anand Jain
2018-04-12  2:29 ` [PATCH 08/15] btrfs: cleanup btrfs_rm_device() use cur_devices Anand Jain
2018-04-12  2:29 ` [PATCH 09/15] btrfs: uuid_mutex in read_chunk_tree, add a comment Anand Jain
2018-04-12  2:29 ` [PATCH 10/15] btrfs: drop uuid_mutex in btrfs_free_extra_devids() Anand Jain
2018-05-15 16:26   ` David Sterba
2018-05-22  9:11     ` Anand Jain
2018-05-23  2:54   ` [PATCH v3] " Anand Jain
2018-05-25 15:55     ` David Sterba [this message]
2018-05-28 10:14   ` [PATCH v4] " Anand Jain
2018-04-12  2:29 ` [PATCH 11/15] btrfs: drop uuid_mutex in btrfs_open_devices() Anand Jain
2018-04-12  2:29 ` [PATCH 12/15] btrfs: drop uuid_mutex in close_fs_devices() Anand Jain
2018-05-15 16:30   ` David Sterba
2018-05-22  9:12     ` Anand Jain
2018-04-12  2:29 ` [PATCH 13/15] btrfs: drop uuid_mutex in btrfs_dev_replace_finishing() Anand Jain
2018-04-12  2:29 ` [PATCH 14/15] btrfs: drop uuid_mutex in btrfs_destroy_dev_replace_tgtdev() Anand Jain
2018-04-12  2:29 ` [PATCH 15/15] btrfs: cleanup btrfs_destroy_dev_replace_tgtdev() localize btrfs_fs_devices Anand Jain
2018-04-16 19:52 ` [PATCH 0/15] Review uuid_mutex usage David Sterba
2018-04-18  9:56 ` [PATCH] btrfs: update uuid_mutex and device_list_mutex comments Anand Jain
2018-04-24 15:48   ` David Sterba
2018-05-16  5:09     ` Anand Jain
2018-04-19 15:22 ` [PATCH 0/15] Review uuid_mutex usage David Sterba
2018-05-15 16:33 ` David Sterba
2018-05-22  9:27   ` 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=20180525155530.GP6649@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 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.