Thread (24 messages) 24 messages, 5 authors, 2019-08-15

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

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help