Roman Gushchin f3b6a6df38 writeback, cgroup: keep list of inodes attached to bdi_writeback
Currently there is no way to iterate over inodes attached to a specific
cgwb structure.  It limits the ability to efficiently reclaim the
writeback structure itself and associated memory and block cgroup
structures without scanning all inodes belonging to a sb, which can be
prohibitively expensive.

While dirty/in-active-writeback an inode belongs to one of the
bdi_writeback's io lists: b_dirty, b_io, b_more_io and b_dirty_time.  Once
cleaned up, it's removed from all io lists.  So the inode->i_io_list can
be reused to maintain the list of inodes, attached to a bdi_writeback
structure.

This patch introduces a new wb->b_attached list, which contains all inodes
which were dirty at least once and are attached to the given cgwb.  Inodes
attached to the root bdi_writeback structures are never placed on such
list.  The following patch will use this list to try to release cgwbs
structures more efficiently.

Link: https://lkml.kernel.org/r/20210608230225.2078447-6-guro@fb.com
Signed-off-by: Roman Gushchin <guro@fb.com>
Suggested-by: Jan Kara <jack@suse.cz>
Reviewed-by: Jan Kara <jack@suse.cz>
Acked-by: Tejun Heo <tj@kernel.org>
Acked-by: Dennis Zhou <dennis@kernel.org>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Dave Chinner <dchinner@redhat.com>
Cc: Jan Kara <jack@suse.com>
Cc: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2021-06-29 10:53:48 -07:00
..
2021-05-07 11:18:52 -07:00
2021-01-24 14:27:20 +01:00
2021-02-23 13:39:45 -08:00
2021-06-25 09:41:29 -07:00
2021-03-30 16:54:49 -07:00
2021-01-24 14:27:20 +01:00
2021-06-18 16:39:03 -07:00
2021-04-12 15:04:29 +02:00
2021-05-07 00:26:34 -07:00
2021-01-24 14:27:20 +01:00
2021-04-12 15:04:29 +02:00
2021-02-23 13:39:45 -08:00
2021-01-24 14:27:20 +01:00
2021-05-07 11:23:41 -07:00
2021-01-24 14:27:20 +01:00
2021-04-30 15:17:08 -07:00
2021-04-27 18:09:44 -07:00
2021-02-24 13:38:26 -08:00
2021-01-24 14:27:20 +01:00
\n
2021-04-29 11:06:13 -07:00
2021-01-24 14:27:20 +01:00
2021-01-24 14:27:20 +01:00
2021-05-22 07:40:34 -10:00
2021-02-24 13:38:26 -08:00
2021-02-23 13:39:45 -08:00
2021-01-24 14:27:19 +01:00
2021-02-23 13:39:45 -08:00
2021-04-12 15:04:23 +02:00
2021-05-07 11:23:41 -07:00
2021-03-23 11:20:25 +01:00
2021-04-27 12:49:42 -07:00
2021-02-23 13:39:45 -08:00
2021-02-24 13:38:26 -08:00
2021-01-24 14:27:20 +01:00
2021-01-24 14:27:19 +01:00
2021-02-21 11:02:48 -08:00
2021-02-13 17:17:53 +01:00
2021-04-22 12:22:11 -07:00
2021-01-24 14:27:18 +01:00