| From foo@baz Mon Apr 9 17:09:24 CEST 2018 |
| From: Guoqing Jiang <gqjiang@suse.com> |
| Date: Tue, 16 May 2017 14:01:25 +0800 |
| Subject: md-cluster: fix potential lock issue in add_new_disk |
| |
| From: Guoqing Jiang <gqjiang@suse.com> |
| |
| |
| [ Upstream commit 2dffdc0724004f38f5e39907747b53e4b0d80e59 ] |
| |
| The add_new_disk returns with communication locked if |
| __sendmsg returns failure, fix it with call unlock_comm |
| before return. |
| |
| Reported-by: Dan Carpenter <dan.carpenter@oracle.com> |
| CC: Goldwyn Rodrigues <rgoldwyn@suse.com> |
| Signed-off-by: Guoqing Jiang <gqjiang@suse.com> |
| Signed-off-by: Shaohua Li <shli@fb.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/md/md-cluster.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/md/md-cluster.c |
| +++ b/drivers/md/md-cluster.c |
| @@ -1122,8 +1122,10 @@ static int add_new_disk(struct mddev *md |
| cmsg.raid_slot = cpu_to_le32(rdev->desc_nr); |
| lock_comm(cinfo); |
| ret = __sendmsg(cinfo, &cmsg); |
| - if (ret) |
| + if (ret) { |
| + unlock_comm(cinfo); |
| return ret; |
| + } |
| cinfo->no_new_dev_lockres->flags |= DLM_LKF_NOQUEUE; |
| ret = dlm_lock_sync(cinfo->no_new_dev_lockres, DLM_LOCK_EX); |
| cinfo->no_new_dev_lockres->flags &= ~DLM_LKF_NOQUEUE; |