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 |
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; > }
Hi Joel, Why has this patch been archived and marked as "Not Applicable"? - http://patchwork.ozlabs.org/patch/1011480/
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
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; >> }
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
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 --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; }