diff mbox series

nbd:clear NBD_BOUND flag when NBD connection is closed

Message ID 1544509023-18923-1-git-send-email-medadyoung@gmail.com
State Not Applicable, archived
Headers show
Series nbd:clear NBD_BOUND flag when NBD connection is closed | expand

Commit Message

Medad Young Dec. 11, 2018, 6:17 a.m. UTC
From: Medad <medadyoung@gmail.com>

    If we do NOT clear NBD_BOUND flag when NBD connection is closed,
    then the original NBD device could not be used again.

Signed-off-by: Medad <medadyoung@gmail.com>
---
 drivers/block/nbd.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

Comments

Adriana Kobylak Dec. 13, 2018, 2:21 p.m. UTC | #1
On 2018-12-11 00:17, medadyoung@gmail.com wrote:
> From: Medad <medadyoung@gmail.com>
> 
>     If we do NOT clear NBD_BOUND flag when NBD connection is closed,
>     then the original NBD device could not be used again.
> 
> Signed-off-by: Medad <medadyoung@gmail.com>

Tested on Witherspoon (OpenPOWER P9 with AST2500) and verified with
this patch that the NBD device could be disconnected/reconnected.

Tested by: Adriana Kobylak <anoo@linux.ibm.com>

> ---
>  drivers/block/nbd.c | 11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
> index 64278f4..5c88490 100644
> --- a/drivers/block/nbd.c
> +++ b/drivers/block/nbd.c
> @@ -277,10 +277,14 @@ static void sock_shutdown(struct nbd_device *nbd)
>  	struct nbd_config *config = nbd->config;
>  	int i;
> 
> -	if (config->num_connections == 0)
> +	if (config->num_connections == 0) {
> +		clear_bit(NBD_BOUND, &config->runtime_flags);
>  		return;
> -	if (test_and_set_bit(NBD_DISCONNECTED, &config->runtime_flags))
> +	}
> +	if (test_and_set_bit(NBD_DISCONNECTED, &config->runtime_flags)) {
> +		clear_bit(NBD_BOUND, &config->runtime_flags);
>  		return;
> +	}
> 
>  	for (i = 0; i < config->num_connections; i++) {
>  		struct nbd_sock *nsock = config->socks[i];
> @@ -944,7 +948,7 @@ static int nbd_reconnect_socket(struct nbd_device
> *nbd, unsigned long arg)
>  		sockfd_put(old);
> 
>  		clear_bit(NBD_DISCONNECTED, &config->runtime_flags);
> -
> +		clear_bit(NBD_BOUND, &config->runtime_flags);
>  		/* We take the tx_mutex in an error path in the recv_work, so we
>  		 * need to queue_work outside of the tx_mutex.
>  		 */
> @@ -1020,6 +1024,7 @@ static int nbd_disconnect(struct nbd_device *nbd)
>  	dev_info(disk_to_dev(nbd->disk), "NBD_DISCONNECT\n");
>  	set_bit(NBD_DISCONNECT_REQUESTED, &config->runtime_flags);
>  	send_disconnects(nbd);
> +	clear_bit(NBD_BOUND, &config->runtime_flags);
>  	return 0;
>  }
Adriana Kobylak Jan. 18, 2019, 3:44 p.m. UTC | #2
Hi Joel,

Why has this patch been archived and marked as "Not Applicable"? - 
http://patchwork.ozlabs.org/patch/1011480/
Joel Stanley Jan. 21, 2019, 1:43 a.m. UTC | #3
On Sat, 19 Jan 2019 at 02:38, Adriana Kobylak <anoo@linux.ibm.com> wrote:
>
> Hi Joel,
>
> Why has this patch been archived and marked as "Not Applicable"? -

This is a patch for the upstream kernel, not openbmc.

OpenBMC patches follow this process and contain the target branch they
want the maintainer to apply them to:

https://github.com/openbmc/linux/wiki/DevelopmentProcess#patch-submitters-wishing-to-have-a-change-included-through-this-process

If you want this backported to the openbmc kernel I suggest you follow
this process.

(I notice that this patch has not been accepted upstream. I suggest
you follow up on the upstream list before asking it to be submitted).

Cheers,

Joel
Adriana Kobylak April 3, 2019, 5:13 p.m. UTC | #4
Adding Josef (updated email address in the maintainers file).

On 2018-12-13 08:21, Adriana Kobylak wrote:
> On 2018-12-11 00:17, medadyoung@gmail.com wrote:
>> From: Medad <medadyoung@gmail.com>
>> 
>>     If we do NOT clear NBD_BOUND flag when NBD connection is closed,
>>     then the original NBD device could not be used again.
>> 
>> Signed-off-by: Medad <medadyoung@gmail.com>
> 
> Tested on Witherspoon (OpenPOWER P9 with AST2500) and verified with
> this patch that the NBD device could be disconnected/reconnected.
> 
> Tested by: Adriana Kobylak <anoo@linux.ibm.com>
> 
>> ---
>>  drivers/block/nbd.c | 11 ++++++++---
>>  1 file changed, 8 insertions(+), 3 deletions(-)
>> 
>> diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
>> index 64278f4..5c88490 100644
>> --- a/drivers/block/nbd.c
>> +++ b/drivers/block/nbd.c
>> @@ -277,10 +277,14 @@ static void sock_shutdown(struct nbd_device 
>> *nbd)
>>  	struct nbd_config *config = nbd->config;
>>  	int i;
>> 
>> -	if (config->num_connections == 0)
>> +	if (config->num_connections == 0) {
>> +		clear_bit(NBD_BOUND, &config->runtime_flags);
>>  		return;
>> -	if (test_and_set_bit(NBD_DISCONNECTED, &config->runtime_flags))
>> +	}
>> +	if (test_and_set_bit(NBD_DISCONNECTED, &config->runtime_flags)) {
>> +		clear_bit(NBD_BOUND, &config->runtime_flags);
>>  		return;
>> +	}
>> 
>>  	for (i = 0; i < config->num_connections; i++) {
>>  		struct nbd_sock *nsock = config->socks[i];
>> @@ -944,7 +948,7 @@ static int nbd_reconnect_socket(struct nbd_device
>> *nbd, unsigned long arg)
>>  		sockfd_put(old);
>> 
>>  		clear_bit(NBD_DISCONNECTED, &config->runtime_flags);
>> -
>> +		clear_bit(NBD_BOUND, &config->runtime_flags);
>>  		/* We take the tx_mutex in an error path in the recv_work, so we
>>  		 * need to queue_work outside of the tx_mutex.
>>  		 */
>> @@ -1020,6 +1024,7 @@ static int nbd_disconnect(struct nbd_device 
>> *nbd)
>>  	dev_info(disk_to_dev(nbd->disk), "NBD_DISCONNECT\n");
>>  	set_bit(NBD_DISCONNECT_REQUESTED, &config->runtime_flags);
>>  	send_disconnects(nbd);
>> +	clear_bit(NBD_BOUND, &config->runtime_flags);
>>  	return 0;
>>  }
Josef Bacik April 3, 2019, 5:49 p.m. UTC | #5
On Wed, Apr 03, 2019 at 12:13:53PM -0500, Adriana Kobylak wrote:
> Adding Josef (updated email address in the maintainers file).
> 
> On 2018-12-13 08:21, Adriana Kobylak wrote:
> > On 2018-12-11 00:17, medadyoung@gmail.com wrote:
> > > From: Medad <medadyoung@gmail.com>
> > > 
> > >     If we do NOT clear NBD_BOUND flag when NBD connection is closed,
> > >     then the original NBD device could not be used again.
> > > 
> > > Signed-off-by: Medad <medadyoung@gmail.com>

This doesn't sound right, this is just making sure we don't use the IOCTL
configuration stuff with the netlink stuff.  Once the disconnect happens the
configuration should go away and it doesn't matter anymore.  What are you doing
to reproduce this problem?  Thanks,

Josef
Adriana Kobylak April 4, 2019, 3:31 p.m. UTC | #6
On 2019-04-03 12:49, Josef Bacik wrote:
> On Wed, Apr 03, 2019 at 12:13:53PM -0500, Adriana Kobylak wrote:
>> Adding Josef (updated email address in the maintainers file).
>> 
>> On 2018-12-13 08:21, Adriana Kobylak wrote:
>> > On 2018-12-11 00:17, medadyoung@gmail.com wrote:
>> > > From: Medad <medadyoung@gmail.com>
>> > >
>> > >     If we do NOT clear NBD_BOUND flag when NBD connection is closed,
>> > >     then the original NBD device could not be used again.
>> > >
>> > > Signed-off-by: Medad <medadyoung@gmail.com>
> 
> This doesn't sound right, this is just making sure we don't use the 
> IOCTL
> configuration stuff with the netlink stuff.  Once the disconnect 
> happens the
> configuration should go away and it doesn't matter anymore.  What are 
> you doing
> to reproduce this problem?  Thanks,
> 
> Josef

I'm not seeing an issue now that we've moved to a new version of Yocto 
containing
NBD 3.17. For reference we were reproducing by setting up a virtual 
media device
on a BMC (https://github.com/openbmc/jsnbd).
We can close this patch request unless Medad still sees an issue in his 
environment.
diff mbox series

Patch

diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 64278f4..5c88490 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -277,10 +277,14 @@  static void sock_shutdown(struct nbd_device *nbd)
 	struct nbd_config *config = nbd->config;
 	int i;
 
-	if (config->num_connections == 0)
+	if (config->num_connections == 0) {
+		clear_bit(NBD_BOUND, &config->runtime_flags);
 		return;
-	if (test_and_set_bit(NBD_DISCONNECTED, &config->runtime_flags))
+	}
+	if (test_and_set_bit(NBD_DISCONNECTED, &config->runtime_flags)) {
+		clear_bit(NBD_BOUND, &config->runtime_flags);
 		return;
+	}
 
 	for (i = 0; i < config->num_connections; i++) {
 		struct nbd_sock *nsock = config->socks[i];
@@ -944,7 +948,7 @@  static int nbd_reconnect_socket(struct nbd_device *nbd, unsigned long arg)
 		sockfd_put(old);
 
 		clear_bit(NBD_DISCONNECTED, &config->runtime_flags);
-
+		clear_bit(NBD_BOUND, &config->runtime_flags);
 		/* We take the tx_mutex in an error path in the recv_work, so we
 		 * need to queue_work outside of the tx_mutex.
 		 */
@@ -1020,6 +1024,7 @@  static int nbd_disconnect(struct nbd_device *nbd)
 	dev_info(disk_to_dev(nbd->disk), "NBD_DISCONNECT\n");
 	set_bit(NBD_DISCONNECT_REQUESTED, &config->runtime_flags);
 	send_disconnects(nbd);
+	clear_bit(NBD_BOUND, &config->runtime_flags);
 	return 0;
 }