Skip to contentSkip to conversation

dm bufio: add missed destroy of client's mutex

PATCH New Aliaksei Karaliou 1 participant 2 messages Dec 23, 2017 Device mapper

lore
Share & tools
lore
#0 lore raw

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.

---
 drivers/md/dm-bufio.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/md/dm-bufio.c +2 -0
index c546b567f3b5..1c661d4c211c 100644
@@ -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
#1 lore raw

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.

---
 drivers/md/dm-bufio.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)
drivers/md/dm-bufio.c +9 -6
index 1c661d4c211c..8f3ccf88951e 100644
@@ -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