hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/md/dm-cache-target.c
....@@ -985,14 +985,14 @@
985985 if (get_cache_mode(cache) >= CM_READ_ONLY)
986986 return;
987987
988
- if (dm_cache_metadata_set_needs_check(cache->cmd)) {
989
- DMERR("%s: failed to set 'needs_check' flag in metadata", dev_name);
990
- set_cache_mode(cache, CM_FAIL);
991
- }
992
-
993988 DMERR_LIMIT("%s: aborting current metadata transaction", dev_name);
994989 if (dm_cache_metadata_abort(cache->cmd)) {
995990 DMERR("%s: failed to abort metadata transaction", dev_name);
991
+ set_cache_mode(cache, CM_FAIL);
992
+ }
993
+
994
+ if (dm_cache_metadata_set_needs_check(cache->cmd)) {
995
+ DMERR("%s: failed to set 'needs_check' flag in metadata", dev_name);
996996 set_cache_mode(cache, CM_FAIL);
997997 }
998998 }
....@@ -1883,6 +1883,7 @@
18831883
18841884 else
18851885 commit_needed = process_bio(cache, bio) || commit_needed;
1886
+ cond_resched();
18861887 }
18871888
18881889 if (commit_needed)
....@@ -1905,6 +1906,7 @@
19051906 while ((bio = bio_list_pop(&bios))) {
19061907 bio->bi_status = BLK_STS_DM_REQUEUE;
19071908 bio_endio(bio);
1909
+ cond_resched();
19081910 }
19091911 }
19101912
....@@ -1945,6 +1947,8 @@
19451947 r = mg_start(cache, op, NULL);
19461948 if (r)
19471949 break;
1950
+
1951
+ cond_resched();
19481952 }
19491953 }
19501954
....@@ -1965,6 +1969,7 @@
19651969 if (cache->prison)
19661970 dm_bio_prison_destroy_v2(cache->prison);
19671971
1972
+ cancel_delayed_work_sync(&cache->waker);
19681973 if (cache->wq)
19691974 destroy_workqueue(cache->wq);
19701975