From: Qi Zheng <zhengqi.arch@bytedance.com> To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, Qi Zheng <zhengqi.arch@bytedance.com>, Muchun Song <songmuchun@bytedance.com>, Alasdair Kergon <agk@redhat.com>, Mike Snitzer <snitzer@kernel.org>, dm-devel@redhat.com Subject: [PATCH v6 23/45] dm: dynamically allocate the dm-bufio shrinker Date: Mon, 11 Sep 2023 17:44:22 +0800 [thread overview] Message-ID: <20230911094444.68966-24-zhengqi.arch@bytedance.com> (raw) In-Reply-To: <20230911094444.68966-1-zhengqi.arch@bytedance.com> In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the dm-bufio shrinker, so that it can be freed asynchronously via RCU. Then it doesn't need to wait for RCU read-side critical section when releasing the struct dm_bufio_client. Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com> Reviewed-by: Muchun Song <songmuchun@bytedance.com> CC: Alasdair Kergon <agk@redhat.com> CC: Mike Snitzer <snitzer@kernel.org> CC: dm-devel@redhat.com --- drivers/md/dm-bufio.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c index bc309e41d074..62eb27639c9b 100644 --- a/drivers/md/dm-bufio.c +++ b/drivers/md/dm-bufio.c @@ -963,7 +963,7 @@ struct dm_bufio_client { sector_t start; - struct shrinker shrinker; + struct shrinker *shrinker; struct work_struct shrink_work; atomic_long_t need_shrink; @@ -2368,7 +2368,7 @@ static unsigned long dm_bufio_shrink_scan(struct shrinker *shrink, struct shrink { struct dm_bufio_client *c; - c = container_of(shrink, struct dm_bufio_client, shrinker); + c = shrink->private_data; atomic_long_add(sc->nr_to_scan, &c->need_shrink); queue_work(dm_bufio_wq, &c->shrink_work); @@ -2377,7 +2377,7 @@ static unsigned long dm_bufio_shrink_scan(struct shrinker *shrink, struct shrink static unsigned long dm_bufio_shrink_count(struct shrinker *shrink, struct shrink_control *sc) { - struct dm_bufio_client *c = container_of(shrink, struct dm_bufio_client, shrinker); + struct dm_bufio_client *c = shrink->private_data; unsigned long count = cache_total(&c->cache); unsigned long retain_target = get_retain_buffers(c); unsigned long queued_for_cleanup = atomic_long_read(&c->need_shrink); @@ -2490,14 +2490,20 @@ struct dm_bufio_client *dm_bufio_client_create(struct block_device *bdev, unsign INIT_WORK(&c->shrink_work, shrink_work); atomic_long_set(&c->need_shrink, 0); - c->shrinker.count_objects = dm_bufio_shrink_count; - c->shrinker.scan_objects = dm_bufio_shrink_scan; - c->shrinker.seeks = 1; - c->shrinker.batch = 0; - r = register_shrinker(&c->shrinker, "dm-bufio:(%u:%u)", - MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev)); - if (r) + c->shrinker = shrinker_alloc(0, "dm-bufio:(%u:%u)", + MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev)); + if (!c->shrinker) { + r = -ENOMEM; goto bad; + } + + c->shrinker->count_objects = dm_bufio_shrink_count; + c->shrinker->scan_objects = dm_bufio_shrink_scan; + c->shrinker->seeks = 1; + c->shrinker->batch = 0; + c->shrinker->private_data = c; + + shrinker_register(c->shrinker); mutex_lock(&dm_bufio_clients_lock); dm_bufio_client_count++; @@ -2537,7 +2543,7 @@ void dm_bufio_client_destroy(struct dm_bufio_client *c) drop_buffers(c); - unregister_shrinker(&c->shrinker); + shrinker_free(c->shrinker); flush_work(&c->shrink_work); mutex_lock(&dm_bufio_clients_lock); -- 2.30.2
WARNING: multiple messages have this Message-ID (diff)
From: Qi Zheng <zhengqi.arch@bytedance.com> To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev Cc: Mike Snitzer <snitzer@kernel.org>, linux-kernel@vger.kernel.org, Qi Zheng <zhengqi.arch@bytedance.com>, linux-mm@kvack.org, dm-devel@redhat.com, Muchun Song <songmuchun@bytedance.com>, linux-fsdevel@vger.kernel.org, Alasdair Kergon <agk@redhat.com> Subject: [dm-devel] [PATCH v6 23/45] dm: dynamically allocate the dm-bufio shrinker Date: Mon, 11 Sep 2023 17:44:22 +0800 [thread overview] Message-ID: <20230911094444.68966-24-zhengqi.arch@bytedance.com> (raw) In-Reply-To: <20230911094444.68966-1-zhengqi.arch@bytedance.com> In preparation for implementing lockless slab shrink, use new APIs to dynamically allocate the dm-bufio shrinker, so that it can be freed asynchronously via RCU. Then it doesn't need to wait for RCU read-side critical section when releasing the struct dm_bufio_client. Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com> Reviewed-by: Muchun Song <songmuchun@bytedance.com> CC: Alasdair Kergon <agk@redhat.com> CC: Mike Snitzer <snitzer@kernel.org> CC: dm-devel@redhat.com --- drivers/md/dm-bufio.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c index bc309e41d074..62eb27639c9b 100644 --- a/drivers/md/dm-bufio.c +++ b/drivers/md/dm-bufio.c @@ -963,7 +963,7 @@ struct dm_bufio_client { sector_t start; - struct shrinker shrinker; + struct shrinker *shrinker; struct work_struct shrink_work; atomic_long_t need_shrink; @@ -2368,7 +2368,7 @@ static unsigned long dm_bufio_shrink_scan(struct shrinker *shrink, struct shrink { struct dm_bufio_client *c; - c = container_of(shrink, struct dm_bufio_client, shrinker); + c = shrink->private_data; atomic_long_add(sc->nr_to_scan, &c->need_shrink); queue_work(dm_bufio_wq, &c->shrink_work); @@ -2377,7 +2377,7 @@ static unsigned long dm_bufio_shrink_scan(struct shrinker *shrink, struct shrink static unsigned long dm_bufio_shrink_count(struct shrinker *shrink, struct shrink_control *sc) { - struct dm_bufio_client *c = container_of(shrink, struct dm_bufio_client, shrinker); + struct dm_bufio_client *c = shrink->private_data; unsigned long count = cache_total(&c->cache); unsigned long retain_target = get_retain_buffers(c); unsigned long queued_for_cleanup = atomic_long_read(&c->need_shrink); @@ -2490,14 +2490,20 @@ struct dm_bufio_client *dm_bufio_client_create(struct block_device *bdev, unsign INIT_WORK(&c->shrink_work, shrink_work); atomic_long_set(&c->need_shrink, 0); - c->shrinker.count_objects = dm_bufio_shrink_count; - c->shrinker.scan_objects = dm_bufio_shrink_scan; - c->shrinker.seeks = 1; - c->shrinker.batch = 0; - r = register_shrinker(&c->shrinker, "dm-bufio:(%u:%u)", - MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev)); - if (r) + c->shrinker = shrinker_alloc(0, "dm-bufio:(%u:%u)", + MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev)); + if (!c->shrinker) { + r = -ENOMEM; goto bad; + } + + c->shrinker->count_objects = dm_bufio_shrink_count; + c->shrinker->scan_objects = dm_bufio_shrink_scan; + c->shrinker->seeks = 1; + c->shrinker->batch = 0; + c->shrinker->private_data = c; + + shrinker_register(c->shrinker); mutex_lock(&dm_bufio_clients_lock); dm_bufio_client_count++; @@ -2537,7 +2543,7 @@ void dm_bufio_client_destroy(struct dm_bufio_client *c) drop_buffers(c); - unregister_shrinker(&c->shrinker); + shrinker_free(c->shrinker); flush_work(&c->shrink_work); mutex_lock(&dm_bufio_clients_lock); -- 2.30.2 -- dm-devel mailing list dm-devel@redhat.com https://listman.redhat.com/mailman/listinfo/dm-devel
next prev parent reply other threads:[~2023-09-11 20:49 UTC|newest] Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-09-11 9:43 [PATCH v6 00/45] use refcount+RCU method to implement lockless slab shrink Qi Zheng 2023-09-11 9:44 ` [PATCH v6 01/45] mm: shrinker: add infrastructure for dynamically allocating shrinker Qi Zheng 2023-09-18 9:03 ` Muchun Song 2023-09-18 12:06 ` Qi Zheng 2023-09-19 2:36 ` Muchun Song 2023-09-19 2:46 ` [PATCH] mm: shrinker: some cleanup Qi Zheng 2023-09-19 8:04 ` Greg KH 2023-09-19 8:41 ` Qi Zheng 2023-09-11 9:44 ` [PATCH v6 02/45] kvm: mmu: dynamically allocate the x86-mmu shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 03/45] binder: dynamically allocate the android-binder shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 04/45] drm/ttm: dynamically allocate the drm-ttm_pool shrinker Qi Zheng 2023-09-11 9:44 ` Qi Zheng 2023-09-11 9:44 ` [PATCH v6 05/45] xenbus/backend: dynamically allocate the xen-backend shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 06/45] erofs: dynamically allocate the erofs-shrinker Qi Zheng 2023-09-11 9:44 ` Qi Zheng via Linux-erofs 2023-09-11 9:44 ` [PATCH v6 07/45] f2fs: dynamically allocate the f2fs-shrinker Qi Zheng 2023-09-11 9:44 ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel 2023-09-11 9:44 ` [PATCH v6 08/45] gfs2: dynamically allocate the gfs2-glock shrinker Qi Zheng 2023-09-11 9:44 ` [Cluster-devel] " Qi Zheng 2023-09-11 9:44 ` [PATCH v6 09/45] gfs2: dynamically allocate the gfs2-qd shrinker Qi Zheng 2023-09-11 9:44 ` [Cluster-devel] " Qi Zheng 2023-09-11 9:44 ` [PATCH v6 10/45] NFSv4.2: dynamically allocate the nfs-xattr shrinkers Qi Zheng 2023-09-11 9:44 ` [PATCH v6 11/45] nfs: dynamically allocate the nfs-acl shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 12/45] nfsd: dynamically allocate the nfsd-filecache shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 13/45] quota: dynamically allocate the dquota-cache shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 14/45] ubifs: dynamically allocate the ubifs-slab shrinker Qi Zheng 2023-09-11 9:44 ` Qi Zheng 2023-09-11 9:44 ` [PATCH v6 15/45] rcu: dynamically allocate the rcu-lazy shrinker Qi Zheng 2023-09-18 7:27 ` Muchun Song 2023-09-11 9:44 ` [PATCH v6 16/45] rcu: dynamically allocate the rcu-kfree shrinker Qi Zheng 2023-09-12 7:30 ` Uladzislau Rezki 2023-09-11 9:44 ` [PATCH v6 17/45] mm: thp: dynamically allocate the thp-related shrinkers Qi Zheng 2023-09-11 9:44 ` [PATCH v6 18/45] sunrpc: dynamically allocate the sunrpc_cred shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 19/45] mm: workingset: dynamically allocate the mm-shadow shrinker Qi Zheng 2023-09-18 7:26 ` Muchun Song 2023-09-11 9:44 ` [PATCH v6 20/45] drm/i915: dynamically allocate the i915_gem_mm shrinker Qi Zheng 2023-09-11 9:44 ` Qi Zheng 2023-09-11 9:44 ` [PATCH v6 21/45] drm/msm: dynamically allocate the drm-msm_gem shrinker Qi Zheng 2023-09-11 9:44 ` Qi Zheng 2023-09-11 9:44 ` [PATCH v6 22/45] drm/panfrost: dynamically allocate the drm-panfrost shrinker Qi Zheng 2023-09-11 9:44 ` Qi Zheng 2023-09-11 9:44 ` Qi Zheng [this message] 2023-09-11 9:44 ` [dm-devel] [PATCH v6 23/45] dm: dynamically allocate the dm-bufio shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 24/45] dm zoned: dynamically allocate the dm-zoned-meta shrinker Qi Zheng 2023-09-11 9:44 ` [dm-devel] " Qi Zheng 2023-09-11 9:44 ` [PATCH v6 25/45] md/raid5: dynamically allocate the md-raid5 shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 26/45] bcache: dynamically allocate the md-bcache shrinker Qi Zheng 2023-09-18 7:24 ` Muchun Song 2023-09-11 9:44 ` [PATCH v6 27/45] vmw_balloon: dynamically allocate the vmw-balloon shrinker Qi Zheng 2023-09-11 18:40 ` Nadav Amit 2023-09-11 9:44 ` [PATCH v6 28/45] virtio_balloon: dynamically allocate the virtio-balloon shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 29/45] mbcache: dynamically allocate the mbcache shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 30/45] ext4: dynamically allocate the ext4-es shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 31/45] jbd2,ext4: dynamically allocate the jbd2-journal shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 32/45] nfsd: dynamically allocate the nfsd-client shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 33/45] nfsd: dynamically allocate the nfsd-reply shrinker Qi Zheng 2023-09-18 7:21 ` Muchun Song 2023-09-11 9:44 ` [PATCH v6 34/45] xfs: dynamically allocate the xfs-buf shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 35/45] xfs: dynamically allocate the xfs-inodegc shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 36/45] xfs: dynamically allocate the xfs-qm shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 37/45] zsmalloc: dynamically allocate the mm-zspool shrinker Qi Zheng 2023-09-11 9:44 ` [PATCH v6 38/45] fs: super: dynamically allocate the s_shrink Qi Zheng 2023-09-13 17:03 ` David Sterba 2023-09-11 9:44 ` [PATCH v6 39/45] mm: shrinker: remove old APIs Qi Zheng 2023-09-11 9:44 ` [PATCH v6 40/45] mm: shrinker: add a secondary array for shrinker_info::{map, nr_deferred} Qi Zheng 2023-09-28 14:15 ` [PATCH] fixup: " Qi Zheng 2023-09-28 14:17 ` Qi Zheng 2023-10-01 2:58 ` kernel test robot 2023-10-01 3:15 ` Qi Zheng 2023-10-01 9:55 ` kernel test robot 2023-09-11 9:44 ` [PATCH v6 41/45] mm: shrinker: rename {prealloc|unregister}_memcg_shrinker() to shrinker_memcg_{alloc|remove}() Qi Zheng 2023-09-18 7:20 ` Muchun Song 2023-09-11 9:44 ` [PATCH v6 42/45] mm: shrinker: make global slab shrink lockless Qi Zheng 2023-12-06 7:47 ` Lai Jiangshan 2023-12-06 7:55 ` Qi Zheng 2023-12-06 8:10 ` Lai Jiangshan 2023-12-06 8:23 ` Lai Jiangshan 2023-12-06 8:37 ` Qi Zheng 2023-12-06 9:13 ` Dave Chinner 2023-09-11 9:44 ` [PATCH v6 43/45] mm: shrinker: make memcg " Qi Zheng 2023-09-11 9:44 ` [PATCH v6 44/45] mm: shrinker: hold write lock to reparent shrinker nr_deferred Qi Zheng 2023-09-18 7:17 ` Muchun Song 2023-09-11 9:44 ` [PATCH v6 45/45] mm: shrinker: convert shrinker_rwsem to mutex Qi Zheng 2023-09-18 7:16 ` Muchun Song 2023-11-26 14:27 ` [PATCH v6 00/45] use refcount+RCU method to implement lockless slab shrink Ryan Lahfa 2023-11-27 13:53 ` Greg KH
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=20230911094444.68966-24-zhengqi.arch@bytedance.com \ --to=zhengqi.arch@bytedance.com \ --cc=agk@redhat.com \ --cc=akpm@linux-foundation.org \ --cc=brauner@kernel.org \ --cc=cel@kernel.org \ --cc=david@fromorbit.com \ --cc=djwong@kernel.org \ --cc=dm-devel@redhat.com \ --cc=gregkh@linuxfoundation.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=muchun.song@linux.dev \ --cc=paulmck@kernel.org \ --cc=roman.gushchin@linux.dev \ --cc=senozhatsky@chromium.org \ --cc=snitzer@kernel.org \ --cc=songmuchun@bytedance.com \ --cc=steven.price@arm.com \ --cc=tkhai@ya.ru \ --cc=tytso@mit.edu \ --cc=vbabka@suse.cz \ --cc=yujie.liu@intel.com \ /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: linkBe 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.