hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/md/dm-raid.c
....@@ -3258,8 +3258,7 @@
32583258 r = md_start(&rs->md);
32593259 if (r) {
32603260 ti->error = "Failed to start raid array";
3261
- mddev_unlock(&rs->md);
3262
- goto bad_md_start;
3261
+ goto bad_unlock;
32633262 }
32643263
32653264 /* If raid4/5/6 journal mode explicitly requested (only possible with journal dev) -> set it */
....@@ -3267,8 +3266,7 @@
32673266 r = r5c_journal_mode_set(&rs->md, rs->journal_dev.mode);
32683267 if (r) {
32693268 ti->error = "Failed to set raid4/5/6 journal mode";
3270
- mddev_unlock(&rs->md);
3271
- goto bad_journal_mode_set;
3269
+ goto bad_unlock;
32723270 }
32733271 }
32743272
....@@ -3279,14 +3277,14 @@
32793277 if (rs_is_raid456(rs)) {
32803278 r = rs_set_raid456_stripe_cache(rs);
32813279 if (r)
3282
- goto bad_stripe_cache;
3280
+ goto bad_unlock;
32833281 }
32843282
32853283 /* Now do an early reshape check */
32863284 if (test_bit(RT_FLAG_RESHAPE_RS, &rs->runtime_flags)) {
32873285 r = rs_check_reshape(rs);
32883286 if (r)
3289
- goto bad_check_reshape;
3287
+ goto bad_unlock;
32903288
32913289 /* Restore new, ctr requested layout to perform check */
32923290 rs_config_restore(rs, &rs_layout);
....@@ -3295,7 +3293,7 @@
32953293 r = rs->md.pers->check_reshape(&rs->md);
32963294 if (r) {
32973295 ti->error = "Reshape check failed";
3298
- goto bad_check_reshape;
3296
+ goto bad_unlock;
32993297 }
33003298 }
33013299 }
....@@ -3306,11 +3304,9 @@
33063304 mddev_unlock(&rs->md);
33073305 return 0;
33083306
3309
-bad_md_start:
3310
-bad_journal_mode_set:
3311
-bad_stripe_cache:
3312
-bad_check_reshape:
3307
+bad_unlock:
33133308 md_stop(&rs->md);
3309
+ mddev_unlock(&rs->md);
33143310 bad:
33153311 raid_set_free(rs);
33163312
....@@ -3321,7 +3317,9 @@
33213317 {
33223318 struct raid_set *rs = ti->private;
33233319
3320
+ mddev_lock_nointr(&rs->md);
33243321 md_stop(&rs->md);
3322
+ mddev_unlock(&rs->md);
33253323 raid_set_free(rs);
33263324 }
33273325