Ok, greybus_message_sent() is too complicated a function, i will check it again.

Thanks for your time.


> -----原始邮件-----
> 发件人: "Johan Hovold" <johan@kernel.org>
> 发送时间: 2021-03-10 22:22:56 (星期三)
> 收件人: "Lv Yunlong" <lyl2019@mail.ustc.edu.cn>
> 抄送: elder@kernel.org, gregkh@linuxfoundation.org, greybus-dev@lists.linaro.org, linux-kernel@vger.kernel.org
> 主题: Re: [PATCH v2] greybus/operation: Drop reference when message has been sent
>
> On Wed, Mar 10, 2021 at 06:17:36AM -0800, Lv Yunlong wrote:
> > In gb_operation_response_send, get an extra reference
> > before gb_message_send() with this comment "/* Reference will
> > be dropped when message has been sent. */". Therefore, we
> > should drop the got reference not only in the error branch,
> > but also in the complete branch.
> >
> > Signed-off-by: Lv Yunlong <lyl2019@mail.ustc.edu.cn>
> > ---
> > drivers/greybus/operation.c | 4 ++++
> > 1 file changed, 4 insertions(+)
> >
> > diff --git a/drivers/greybus/operation.c b/drivers/greybus/operation.c
> > index 8459e9bc0749..500b3fe53a04 100644
> > --- a/drivers/greybus/operation.c
> > +++ b/drivers/greybus/operation.c
> > @@ -855,6 +855,10 @@ static int gb_operation_response_send(struct gb_operation *operation,
> > if (ret)
> > goto err_put_active;
> >
> > + /*Drop reference after message send completes. */
> > + gb_operation_put_active(operation);
> > + gb_operation_put(operation);
>
> No, this is broken.
>
> The reference is dropped in greybus_message_sent().
>
> Johan