.. | .. |
---|
3258 | 3258 | r = md_start(&rs->md); |
---|
3259 | 3259 | if (r) { |
---|
3260 | 3260 | ti->error = "Failed to start raid array"; |
---|
3261 | | - mddev_unlock(&rs->md); |
---|
3262 | | - goto bad_md_start; |
---|
| 3261 | + goto bad_unlock; |
---|
3263 | 3262 | } |
---|
3264 | 3263 | |
---|
3265 | 3264 | /* If raid4/5/6 journal mode explicitly requested (only possible with journal dev) -> set it */ |
---|
.. | .. |
---|
3267 | 3266 | r = r5c_journal_mode_set(&rs->md, rs->journal_dev.mode); |
---|
3268 | 3267 | if (r) { |
---|
3269 | 3268 | 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; |
---|
3272 | 3270 | } |
---|
3273 | 3271 | } |
---|
3274 | 3272 | |
---|
.. | .. |
---|
3279 | 3277 | if (rs_is_raid456(rs)) { |
---|
3280 | 3278 | r = rs_set_raid456_stripe_cache(rs); |
---|
3281 | 3279 | if (r) |
---|
3282 | | - goto bad_stripe_cache; |
---|
| 3280 | + goto bad_unlock; |
---|
3283 | 3281 | } |
---|
3284 | 3282 | |
---|
3285 | 3283 | /* Now do an early reshape check */ |
---|
3286 | 3284 | if (test_bit(RT_FLAG_RESHAPE_RS, &rs->runtime_flags)) { |
---|
3287 | 3285 | r = rs_check_reshape(rs); |
---|
3288 | 3286 | if (r) |
---|
3289 | | - goto bad_check_reshape; |
---|
| 3287 | + goto bad_unlock; |
---|
3290 | 3288 | |
---|
3291 | 3289 | /* Restore new, ctr requested layout to perform check */ |
---|
3292 | 3290 | rs_config_restore(rs, &rs_layout); |
---|
.. | .. |
---|
3295 | 3293 | r = rs->md.pers->check_reshape(&rs->md); |
---|
3296 | 3294 | if (r) { |
---|
3297 | 3295 | ti->error = "Reshape check failed"; |
---|
3298 | | - goto bad_check_reshape; |
---|
| 3296 | + goto bad_unlock; |
---|
3299 | 3297 | } |
---|
3300 | 3298 | } |
---|
3301 | 3299 | } |
---|
.. | .. |
---|
3306 | 3304 | mddev_unlock(&rs->md); |
---|
3307 | 3305 | return 0; |
---|
3308 | 3306 | |
---|
3309 | | -bad_md_start: |
---|
3310 | | -bad_journal_mode_set: |
---|
3311 | | -bad_stripe_cache: |
---|
3312 | | -bad_check_reshape: |
---|
| 3307 | +bad_unlock: |
---|
3313 | 3308 | md_stop(&rs->md); |
---|
| 3309 | + mddev_unlock(&rs->md); |
---|
3314 | 3310 | bad: |
---|
3315 | 3311 | raid_set_free(rs); |
---|
3316 | 3312 | |
---|
.. | .. |
---|
3321 | 3317 | { |
---|
3322 | 3318 | struct raid_set *rs = ti->private; |
---|
3323 | 3319 | |
---|
| 3320 | + mddev_lock_nointr(&rs->md); |
---|
3324 | 3321 | md_stop(&rs->md); |
---|
| 3322 | + mddev_unlock(&rs->md); |
---|
3325 | 3323 | raid_set_free(rs); |
---|
3326 | 3324 | } |
---|
3327 | 3325 | |
---|