From: Alex Elder <elder@inktank.com>
To: Sage Weil <sage@inktank.com>
Cc: ceph-devel@vger.kernel.org
Subject: Re: [PATCH] libceph: avoid NULL kref_put when osd reset races with alloc_msg
Date: Thu, 25 Oct 2012 09:28:46 -0500 [thread overview]
Message-ID: <50894C9E.1090705@inktank.com> (raw)
In-Reply-To: <1351120829-12219-1-git-send-email-sage@inktank.com>
On 10/24/2012 06:20 PM, Sage Weil wrote:
> The ceph_on_in_msg_alloc() method drops con->mutex while it allocates a
> message. If that races with a timeout that resends a zillion messages and
> resets the connection, and the ->alloc_msg() method returns a NULL message,
> it will call ceph_msg_put(NULL) and BUG.
The fix is the right thing to do, but your explanation is wrong.
If msg is null at that point, it's because con->ops->alloc_msg()
failed, and has nothing to do with the mutex state.
So yes, the returned pointer should be checked for null before
dropping a reference, but that's all there is to it...
Perhaps it's the zillion messages that are leading to the
message allocation failure somehow.
> Fix by only calling put if msg is non-NULL.
>
> Fixes http://tracker.newdream.net/issues/3142
Is that the right bug number?
>
> Signed-off-by: Sage Weil <sage@inktank.com>
Please fix the explanation, but otherwise this looks good.
Reviewed-by: Alex Elder <elder@inktank.com>
> net/ceph/messenger.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
> index 66f6f56..1041114 100644
> --- a/net/ceph/messenger.c
> +++ b/net/ceph/messenger.c
> @@ -2742,7 +2742,8 @@ static int ceph_con_in_msg_alloc(struct ceph_connection *con, int *skip)
> msg = con->ops->alloc_msg(con, hdr, skip);
> mutex_lock(&con->mutex);
> if (con->state != CON_STATE_OPEN) {
> - ceph_msg_put(msg);
> + if (msg)
> + ceph_msg_put(msg);
> return -EAGAIN;
> }
> con->in_msg = msg;
>
next prev parent reply other threads:[~2012-10-25 14:28 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-24 23:20 [PATCH] libceph: avoid NULL kref_put when osd reset races with alloc_msg Sage Weil
2012-10-25 14:28 ` Alex Elder [this message]
2012-10-25 15:50 ` Sage Weil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=50894C9E.1090705@inktank.com \
--to=elder@inktank.com \
--cc=ceph-devel@vger.kernel.org \
--cc=sage@inktank.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.