Re: [PATCH 2/4] bdi: Add bdi->id
From: Tejun Heo <tj@kernel.org>
Date: 2019-08-07 18:31:57
Also in:
linux-block, linux-mm, lkml
From: Tejun Heo <tj@kernel.org>
Date: 2019-08-07 18:31:57
Also in:
linux-block, linux-mm, lkml
Hello, On Tue, Aug 06, 2019 at 04:01:02PM -0700, Andrew Morton wrote:
On Sat, 3 Aug 2019 07:01:53 -0700 Tejun Heo [off-list ref] wrote:quoted
There currently is no way to universally identify and lookup a bdi without holding a reference and pointer to it. This patch adds an non-recycling bdi->id and implements bdi_get_by_id() which looks up bdis by their ids. This will be used by memcg foreign inode flushing.Why is the id non-recycling? Presumably to address some lifetime/lookup issues, but what are they?
The ID by itself is used to point to the bdi from cgroup and idr recycles really aggressively. Combined with, for example, loop device based containers, stale pointing can become pretty common. We're having similar issues with cgroup IDs.
Why was the IDR code not used?
Because of the rapid recycling. In the longer term, I think we want IDR to be able to support non-recycling IDs, or at least less agressive recycling.
quoted
+struct backing_dev_info *bdi_get_by_id(u64 id) +{ + struct backing_dev_info *bdi = NULL; + struct rb_node **p; + + spin_lock_irq(&bdi_lock);Why irq-safe? Everywhere else uses spin_lock_bh(&bdi_lock).
By mistake, I'll change them to bh. Thanks. -- tejun