Message ID | 20210903075531.20310-1-dinghao.liu@zju.edu.cn (mailing list archive) |
---|---|
State | Superseded, archived |
Delegated to: | Mike Snitzer |
Headers | show |
Series | dm raid: add missed unlock in raid_ctr | expand |
> > On Fri, Sep 3, 2021 at 10:02 AM Dinghao Liu dinghao.liu@zju.edu.cn> wrote: > > mddev_unlock() is called on all paths after we call mddev_lock_nointr(), > > except for three error handling paths, which may cause a deadlock. This > > bug is suggested by a static analysis tool, please advise. > > Hi, > > > > correct, those unlock calls are missing. > > > > As we are bailing out after md_run() with lock held, > > we can clean the lot of error paths underneath up by jumping to before > > md_stop() and add the mddev_unlock upfront it like: Thanks for your advice! I will fix this and send a new patch soon. Regards, Dinghao -- dm-devel mailing list dm-devel@redhat.com https://listman.redhat.com/mailman/listinfo/dm-devel
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c index d9ef52159a22..79f36a806082 100644 --- a/drivers/md/dm-raid.c +++ b/drivers/md/dm-raid.c @@ -3276,15 +3276,19 @@ static int raid_ctr(struct dm_target *ti, unsigned int argc, char **argv) /* Try to adjust the raid4/5/6 stripe cache size to the stripe size */ if (rs_is_raid456(rs)) { r = rs_set_raid456_stripe_cache(rs); - if (r) + if (r) { + mddev_unlock(&rs->md); goto bad_stripe_cache; + } } /* Now do an early reshape check */ if (test_bit(RT_FLAG_RESHAPE_RS, &rs->runtime_flags)) { r = rs_check_reshape(rs); - if (r) + if (r) { + mddev_unlock(&rs->md); goto bad_check_reshape; + } /* Restore new, ctr requested layout to perform check */ rs_config_restore(rs, &rs_layout); @@ -3293,6 +3297,7 @@ static int raid_ctr(struct dm_target *ti, unsigned int argc, char **argv) r = rs->md.pers->check_reshape(&rs->md); if (r) { ti->error = "Reshape check failed"; + mddev_unlock(&rs->md); goto bad_check_reshape; } }
mddev_unlock() is called on all paths after we call mddev_lock_nointr(), except for three error handling paths, which may cause a deadlock. This bug is suggested by a static analysis tool, please advise. Fixes: 9dbd1aa3a81c ("dm raid: add reshaping support to the target") Signed-off-by: Dinghao Liu <dinghao.liu@zju.edu.cn> --- drivers/md/dm-raid.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)