Patchwork [3/5] xen-pcifront: handle backend CLOSED without CLOSING

login
register
mail settings
Submitter David Vrabel
Date Oct. 18, 2012, 10:03 a.m.
Message ID <1350554618-14582-3-git-send-email-david.vrabel@citrix.com>
Download mbox | patch
Permalink /patch/192257/
State Accepted
Headers show

Comments

David Vrabel - Oct. 18, 2012, 10:03 a.m.
From: David Vrabel <david.vrabel@citrix.com>

Backend drivers shouldn't transistion to CLOSED unless the frontend is
CLOSED.  If a backend does transition to CLOSED too soon then the
frontend may not see the CLOSING state and will not properly shutdown.

So, treat an unexpected backend CLOSED state the same as CLOSING.

Signed-off-by: David Vrabel <david.vrabel@citrix.com>
Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
---
Cc: linux-pci@vger.kernel.org
Cc: Bjorn Helgaas <bhelgaas@google.com>
---
 drivers/pci/xen-pcifront.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)
Konrad Rzeszutek Wilk - Oct. 19, 2012, 12:59 p.m.
On Thu, Oct 18, 2012 at 11:03:36AM +0100, David Vrabel wrote:
> From: David Vrabel <david.vrabel@citrix.com>
> 
> Backend drivers shouldn't transistion to CLOSED unless the frontend is
> CLOSED.  If a backend does transition to CLOSED too soon then the
> frontend may not see the CLOSING state and will not properly shutdown.
> 
> So, treat an unexpected backend CLOSED state the same as CLOSING.
> 
> Signed-off-by: David Vrabel <david.vrabel@citrix.com>
> Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> ---
> Cc: linux-pci@vger.kernel.org
> Cc: Bjorn Helgaas <bhelgaas@google.com>

Bjorn, do you want me to prep a git pull with this patch
or can I have your Ack to put it my tree and have it part of my
git pull to Linus?

Thx.
> ---
>  drivers/pci/xen-pcifront.c |    5 ++++-
>  1 files changed, 4 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
> index 0aab85a..a0c7312 100644
> --- a/drivers/pci/xen-pcifront.c
> +++ b/drivers/pci/xen-pcifront.c
> @@ -1068,13 +1068,16 @@ static void __init_refok pcifront_backend_changed(struct xenbus_device *xdev,
>  	case XenbusStateInitialising:
>  	case XenbusStateInitWait:
>  	case XenbusStateInitialised:
> -	case XenbusStateClosed:
>  		break;
>  
>  	case XenbusStateConnected:
>  		pcifront_try_connect(pdev);
>  		break;
>  
> +	case XenbusStateClosed:
> +		if (xdev->state == XenbusStateClosed)
> +			break;
> +		/* Missed the backend's CLOSING state -- fallthrough */
>  	case XenbusStateClosing:
>  		dev_warn(&xdev->dev, "backend going away!\n");
>  		pcifront_try_disconnect(pdev);
> -- 
> 1.7.2.5
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bjorn Helgaas - Nov. 30, 2012, 6:41 p.m.
On Fri, Oct 19, 2012 at 6:59 AM, Konrad Rzeszutek Wilk
<konrad.wilk@oracle.com> wrote:
> On Thu, Oct 18, 2012 at 11:03:36AM +0100, David Vrabel wrote:
>> From: David Vrabel <david.vrabel@citrix.com>
>>
>> Backend drivers shouldn't transistion to CLOSED unless the frontend is
>> CLOSED.  If a backend does transition to CLOSED too soon then the
>> frontend may not see the CLOSING state and will not properly shutdown.
>>
>> So, treat an unexpected backend CLOSED state the same as CLOSING.
>>
>> Signed-off-by: David Vrabel <david.vrabel@citrix.com>
>> Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
>> ---
>> Cc: linux-pci@vger.kernel.org
>> Cc: Bjorn Helgaas <bhelgaas@google.com>
>
> Bjorn, do you want me to prep a git pull with this patch
> or can I have your Ack to put it my tree and have it part of my
> git pull to Linus?

Sorry, I missed this.  I can put it in my -next branch for the v3.8
merge window.  Would that work for you?

>> ---
>>  drivers/pci/xen-pcifront.c |    5 ++++-
>>  1 files changed, 4 insertions(+), 1 deletions(-)
>>
>> diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
>> index 0aab85a..a0c7312 100644
>> --- a/drivers/pci/xen-pcifront.c
>> +++ b/drivers/pci/xen-pcifront.c
>> @@ -1068,13 +1068,16 @@ static void __init_refok pcifront_backend_changed(struct xenbus_device *xdev,
>>       case XenbusStateInitialising:
>>       case XenbusStateInitWait:
>>       case XenbusStateInitialised:
>> -     case XenbusStateClosed:
>>               break;
>>
>>       case XenbusStateConnected:
>>               pcifront_try_connect(pdev);
>>               break;
>>
>> +     case XenbusStateClosed:
>> +             if (xdev->state == XenbusStateClosed)
>> +                     break;
>> +             /* Missed the backend's CLOSING state -- fallthrough */
>>       case XenbusStateClosing:
>>               dev_warn(&xdev->dev, "backend going away!\n");
>>               pcifront_try_disconnect(pdev);
>> --
>> 1.7.2.5
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bjorn Helgaas - Nov. 30, 2012, 9:42 p.m.
On Fri, Nov 30, 2012 at 11:41 AM, Bjorn Helgaas <bhelgaas@google.com> wrote:
> On Fri, Oct 19, 2012 at 6:59 AM, Konrad Rzeszutek Wilk
> <konrad.wilk@oracle.com> wrote:
>> On Thu, Oct 18, 2012 at 11:03:36AM +0100, David Vrabel wrote:
>>> From: David Vrabel <david.vrabel@citrix.com>
>>>
>>> Backend drivers shouldn't transistion to CLOSED unless the frontend is
>>> CLOSED.  If a backend does transition to CLOSED too soon then the
>>> frontend may not see the CLOSING state and will not properly shutdown.
>>>
>>> So, treat an unexpected backend CLOSED state the same as CLOSING.
>>>
>>> Signed-off-by: David Vrabel <david.vrabel@citrix.com>
>>> Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
>>> ---
>>> Cc: linux-pci@vger.kernel.org
>>> Cc: Bjorn Helgaas <bhelgaas@google.com>
>>
>> Bjorn, do you want me to prep a git pull with this patch
>> or can I have your Ack to put it my tree and have it part of my
>> git pull to Linus?
>
> Sorry, I missed this.  I can put it in my -next branch for the v3.8
> merge window.  Would that work for you?

I put this in my -next branch, so we'll at least have a chance of
making a linux-next cycle before v3.7 pops.

>>> ---
>>>  drivers/pci/xen-pcifront.c |    5 ++++-
>>>  1 files changed, 4 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
>>> index 0aab85a..a0c7312 100644
>>> --- a/drivers/pci/xen-pcifront.c
>>> +++ b/drivers/pci/xen-pcifront.c
>>> @@ -1068,13 +1068,16 @@ static void __init_refok pcifront_backend_changed(struct xenbus_device *xdev,
>>>       case XenbusStateInitialising:
>>>       case XenbusStateInitWait:
>>>       case XenbusStateInitialised:
>>> -     case XenbusStateClosed:
>>>               break;
>>>
>>>       case XenbusStateConnected:
>>>               pcifront_try_connect(pdev);
>>>               break;
>>>
>>> +     case XenbusStateClosed:
>>> +             if (xdev->state == XenbusStateClosed)
>>> +                     break;
>>> +             /* Missed the backend's CLOSING state -- fallthrough */
>>>       case XenbusStateClosing:
>>>               dev_warn(&xdev->dev, "backend going away!\n");
>>>               pcifront_try_disconnect(pdev);
>>> --
>>> 1.7.2.5
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Konrad Rzeszutek Wilk - Nov. 30, 2012, 10:39 p.m.
On Fri, Nov 30, 2012 at 02:42:14PM -0700, Bjorn Helgaas wrote:
> On Fri, Nov 30, 2012 at 11:41 AM, Bjorn Helgaas <bhelgaas@google.com> wrote:
> > On Fri, Oct 19, 2012 at 6:59 AM, Konrad Rzeszutek Wilk
> > <konrad.wilk@oracle.com> wrote:
> >> On Thu, Oct 18, 2012 at 11:03:36AM +0100, David Vrabel wrote:
> >>> From: David Vrabel <david.vrabel@citrix.com>
> >>>
> >>> Backend drivers shouldn't transistion to CLOSED unless the frontend is
> >>> CLOSED.  If a backend does transition to CLOSED too soon then the
> >>> frontend may not see the CLOSING state and will not properly shutdown.
> >>>
> >>> So, treat an unexpected backend CLOSED state the same as CLOSING.
> >>>
> >>> Signed-off-by: David Vrabel <david.vrabel@citrix.com>
> >>> Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> >>> ---
> >>> Cc: linux-pci@vger.kernel.org
> >>> Cc: Bjorn Helgaas <bhelgaas@google.com>
> >>
> >> Bjorn, do you want me to prep a git pull with this patch
> >> or can I have your Ack to put it my tree and have it part of my
> >> git pull to Linus?
> >
> > Sorry, I missed this.  I can put it in my -next branch for the v3.8
> > merge window.  Would that work for you?
> 
> I put this in my -next branch, so we'll at least have a chance of
> making a linux-next cycle before v3.7 pops.

Great. Thx!
> 
> >>> ---
> >>>  drivers/pci/xen-pcifront.c |    5 ++++-
> >>>  1 files changed, 4 insertions(+), 1 deletions(-)
> >>>
> >>> diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
> >>> index 0aab85a..a0c7312 100644
> >>> --- a/drivers/pci/xen-pcifront.c
> >>> +++ b/drivers/pci/xen-pcifront.c
> >>> @@ -1068,13 +1068,16 @@ static void __init_refok pcifront_backend_changed(struct xenbus_device *xdev,
> >>>       case XenbusStateInitialising:
> >>>       case XenbusStateInitWait:
> >>>       case XenbusStateInitialised:
> >>> -     case XenbusStateClosed:
> >>>               break;
> >>>
> >>>       case XenbusStateConnected:
> >>>               pcifront_try_connect(pdev);
> >>>               break;
> >>>
> >>> +     case XenbusStateClosed:
> >>> +             if (xdev->state == XenbusStateClosed)
> >>> +                     break;
> >>> +             /* Missed the backend's CLOSING state -- fallthrough */
> >>>       case XenbusStateClosing:
> >>>               dev_warn(&xdev->dev, "backend going away!\n");
> >>>               pcifront_try_disconnect(pdev);
> >>> --
> >>> 1.7.2.5
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
index 0aab85a..a0c7312 100644
--- a/drivers/pci/xen-pcifront.c
+++ b/drivers/pci/xen-pcifront.c
@@ -1068,13 +1068,16 @@  static void __init_refok pcifront_backend_changed(struct xenbus_device *xdev,
 	case XenbusStateInitialising:
 	case XenbusStateInitWait:
 	case XenbusStateInitialised:
-	case XenbusStateClosed:
 		break;
 
 	case XenbusStateConnected:
 		pcifront_try_connect(pdev);
 		break;
 
+	case XenbusStateClosed:
+		if (xdev->state == XenbusStateClosed)
+			break;
+		/* Missed the backend's CLOSING state -- fallthrough */
 	case XenbusStateClosing:
 		dev_warn(&xdev->dev, "backend going away!\n");
 		pcifront_try_disconnect(pdev);