All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wei Liu <wei.liu2@citrix.com>
To: Filipe Manco <filipe.manco@neclab.eu>
Cc: <netdev@vger.kernel.org>, <wei.liu2@citrix.com>,
	Xen-devel <xen-devel@lists.xenproject.org>
Subject: Re: [RFC PATCH] xen-netback: fix error handling on netback_probe()
Date: Wed, 14 Sep 2016 11:10:23 +0100	[thread overview]
Message-ID: <20160914101023.GY15958@citrix.com> (raw)
In-Reply-To: <1473768687-27384-1-git-send-email-filipe.manco@neclab.eu>

CC xen-devel as well.

On Tue, Sep 13, 2016 at 02:11:27PM +0200, Filipe Manco wrote:
> In case of error during netback_probe() (e.g. an entry missing on the
> xenstore) netback_remove() is called on the new device, which will set
> the device backend state to XenbusStateClosed by calling
> set_backend_state(). However, the backend state wasn't initialized by
> netback_probe() at this point, which will cause and invalid transaction
> and set_backend_state() to BUG().
> 
> Initialize the backend state at the beginning of netback_probe() to
> XenbusStateInitialising, and create a new valid state transaction on
> set_backend_state(), from XenbusStateInitialising to XenbusStateClosed.
> 
> Signed-off-by: Filipe Manco <filipe.manco@neclab.eu>

There is a state machine right before set_backend_state. You would also
need to update that.

According to the definition of XenbusStateInitialising, this patch looks
plausible to me.

Wei.

> ---
>  drivers/net/xen-netback/xenbus.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c
> index 6a31f2610c23..c0e5f6994d01 100644
> --- a/drivers/net/xen-netback/xenbus.c
> +++ b/drivers/net/xen-netback/xenbus.c
> @@ -270,6 +270,7 @@ static int netback_probe(struct xenbus_device *dev,
>  
>  	be->dev = dev;
>  	dev_set_drvdata(&dev->dev, be);
> +	be->state = XenbusStateInitialising;
>  
>  	sg = 1;
>  
> @@ -515,6 +516,15 @@ static void set_backend_state(struct backend_info *be,
>  {
>  	while (be->state != state) {
>  		switch (be->state) {
> +		case XenbusStateInitialising:
> +			switch (state) {
> +			case XenbusStateClosed:
> +				backend_switch_state(be, XenbusStateClosed);
> +				break;
> +			default:
> +				BUG();
> +			}
> +			break;
>  		case XenbusStateClosed:
>  			switch (state) {
>  			case XenbusStateInitWait:
> -- 
> 2.7.4
> 

  reply	other threads:[~2016-09-14 10:10 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-13 12:11 [RFC PATCH] xen-netback: fix error handling on netback_probe() Filipe Manco
2016-09-14 10:10 ` Wei Liu [this message]
2016-09-15 14:05   ` [Xen-devel] " Filipe Manco
2016-09-15 14:10     ` Wei Liu
2016-09-15 14:10     ` [Xen-devel] " Wei Liu
2016-09-15 14:05   ` Filipe Manco
2016-09-14 10:10 ` Wei Liu

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=20160914101023.GY15958@citrix.com \
    --to=wei.liu2@citrix.com \
    --cc=filipe.manco@neclab.eu \
    --cc=netdev@vger.kernel.org \
    --cc=xen-devel@lists.xenproject.org \
    /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.