From 22fdca5318397c60f564ba993e10e37af63a2c37 Mon Sep 17 00:00:00 2001 From: Lee Jones Date: Thu, 31 Mar 2022 08:37:33 +0000 Subject: [PATCH] Revert "ANDROID: dm-bow: Protect Ranges fetched and erased from the RB tree" This reverts commit 5b194414a86d3b098004ed42b64152b41940baf7. Reason for revert: Needs rework - causes unforeseen deadlock. Bug: 227141277 Signed-off-by: Lee Jones Change-Id: Idc442f6504de071eaf81a05f72b6db94dc16e333 --- drivers/md/dm-bow.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/drivers/md/dm-bow.c b/drivers/md/dm-bow.c index 31f87fe170d6..62a1203589b2 100644 --- a/drivers/md/dm-bow.c +++ b/drivers/md/dm-bow.c @@ -236,7 +236,6 @@ static void set_type(struct bow_context *bc, struct bow_range **br, int type) (*br)->type = type; - mutex_lock(&bc->ranges_lock); if (next->type == type) { if (type == TRIMMED) list_del(&next->trimmed_list); @@ -250,7 +249,6 @@ static void set_type(struct bow_context *bc, struct bow_range **br, int type) rb_erase(&(*br)->node, &bc->ranges); kfree(*br); } - mutex_unlock(&bc->ranges_lock); *br = NULL; } @@ -601,7 +599,6 @@ static void dm_bow_dtr(struct dm_target *ti) struct bow_context *bc = (struct bow_context *) ti->private; struct kobject *kobj; - mutex_lock(&bc->ranges_lock); while (rb_first(&bc->ranges)) { struct bow_range *br = container_of(rb_first(&bc->ranges), struct bow_range, node); @@ -609,8 +606,6 @@ static void dm_bow_dtr(struct dm_target *ti) rb_erase(&br->node, &bc->ranges); kfree(br); } - mutex_unlock(&bc->ranges_lock); - if (bc->workqueue) destroy_workqueue(bc->workqueue); if (bc->bufio) @@ -1187,7 +1182,6 @@ static void dm_bow_tablestatus(struct dm_target *ti, char *result, return; } - mutex_lock(&bc->ranges_lock); for (i = rb_first(&bc->ranges); i; i = rb_next(i)) { struct bow_range *br = container_of(i, struct bow_range, node); @@ -1195,11 +1189,11 @@ static void dm_bow_tablestatus(struct dm_target *ti, char *result, readable_type[br->type], (unsigned long long)br->sector); if (result >= end) - goto unlock; + return; result += scnprintf(result, end - result, "\n"); if (result >= end) - goto unlock; + return; if (br->type == TRIMMED) ++trimmed_range_count; @@ -1221,22 +1215,19 @@ static void dm_bow_tablestatus(struct dm_target *ti, char *result, if (!rb_next(i)) { scnprintf(result, end - result, "\nERROR: Last range not of type TOP"); - goto unlock; + return; } if (br->sector > range_top(br)) { scnprintf(result, end - result, "\nERROR: sectors out of order"); - goto unlock; + return; } } if (trimmed_range_count != trimmed_list_length) scnprintf(result, end - result, "\nERROR: not all trimmed ranges in trimmed list"); - -unlock: - mutex_unlock(&bc->ranges_lock); } static void dm_bow_status(struct dm_target *ti, status_type_t type,