dm bufio: add missed destroy of client's mutex
PATCH 1/2 dm bufio: add missed destroy of client's mutex
dm_bufio_client_destroy() does not destroy dm_bufio_client->lock. dm_bufio_client_create() does not do that on fallback path too.
Signed-off-by Aliaksei Karaliou <[email protected]>
--- drivers/md/dm-bufio.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/md/dm-bufio.c +2 -0
@@ -1767,6 +1767,7 @@ struct dm_bufio_client *dm_bufio_client_create(struct block_device *bdev, unsign }dm_io_client_destroy (c->dm_io); bad_dm_io: +mutex_destroy (&c->lock);kfree (c); bad_client:return ERR_PTR (r);
@@ -1811,6 +1812,7 @@ void dm_bufio_client_destroy(struct dm_bufio_client *c)BUG_ON (c->n_buffers[i]);dm_io_client_destroy (c->dm_io); +mutex_destroy (&c->lock);kfree (c); }EXPORT_SYMBOL_GPL (dm_bufio_client_destroy);
Signature · 1 line
2.11.0
PATCH 2/2 dm bufio: check result of register_shrinker()
dm_bufio_client_create() does not check result of register_shrinker() which was tagged as __must_check recently, reported by sparse.
Signed-off-by Aliaksei Karaliou <[email protected]>
--- drivers/md/dm-bufio.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)
drivers/md/dm-bufio.c +9 -6
@@ -1743,20 +1743,23 @@ struct dm_bufio_client *dm_bufio_client_create(struct block_device *bdev, unsign__free_buffer_wake (b); } + 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); +if (r) + goto bad_shrinker; +mutex_lock (&dm_bufio_clients_lock); dm_bufio_client_count++;list_add (&c->client_list, &dm_bufio_all_clients);__cache_size_refresh ();mutex_unlock (&dm_bufio_clients_lock); - c->shrinker.count_objects = dm_bufio_shrink_count; - c->shrinker.scan_objects = dm_bufio_shrink_scan; - c->shrinker.seeks =1 ; - c->shrinker.batch =0 ; -register_shrinker (&c->shrinker); -return c; +bad_shrinker: bad_buffer: bad_cache:while (!list_empty (&c->reserved_buffers)) {
Signature · 1 line
2.11.0