* [PATCH v3 0/2] allow xen-blkback to be cleanly unloaded @ 2019-12-02 11:41 ` Paul Durrant 0 siblings, 0 replies; 12+ messages in thread From: Paul Durrant @ 2019-12-02 11:41 UTC (permalink / raw) To: linux-block, linux-kernel, xen-devel; +Cc: Paul Durrant Paul Durrant (2): xen/xenbus: reference count registered modules xen-blkback: allow module to be cleanly unloaded drivers/block/xen-blkback/blkback.c | 8 ++++++++ drivers/block/xen-blkback/common.h | 3 +++ drivers/block/xen-blkback/xenbus.c | 11 +++++++++++ drivers/xen/xenbus/xenbus_probe.c | 13 ++++++++++++- 4 files changed, 34 insertions(+), 1 deletion(-) -- 2.20.1 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [Xen-devel] [PATCH v3 0/2] allow xen-blkback to be cleanly unloaded @ 2019-12-02 11:41 ` Paul Durrant 0 siblings, 0 replies; 12+ messages in thread From: Paul Durrant @ 2019-12-02 11:41 UTC (permalink / raw) To: linux-block, linux-kernel, xen-devel; +Cc: Paul Durrant Paul Durrant (2): xen/xenbus: reference count registered modules xen-blkback: allow module to be cleanly unloaded drivers/block/xen-blkback/blkback.c | 8 ++++++++ drivers/block/xen-blkback/common.h | 3 +++ drivers/block/xen-blkback/xenbus.c | 11 +++++++++++ drivers/xen/xenbus/xenbus_probe.c | 13 ++++++++++++- 4 files changed, 34 insertions(+), 1 deletion(-) -- 2.20.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3 1/2] xen/xenbus: reference count registered modules 2019-12-02 11:41 ` [Xen-devel] " Paul Durrant @ 2019-12-02 11:41 ` Paul Durrant -1 siblings, 0 replies; 12+ messages in thread From: Paul Durrant @ 2019-12-02 11:41 UTC (permalink / raw) To: linux-block, linux-kernel, xen-devel Cc: Paul Durrant, Jan Beulich, Boris Ostrovsky, Juergen Gross, Stefano Stabellini To prevent a PV driver module being removed whilst attached to its other end, and hence xenbus calling into potentially invalid text, take a reference on the module before calling the probe() method (dropping it if unsuccessful) and drop the reference after returning from the remove() method. Suggested-by: Jan Beulich <jbeulich@suse.com> Signed-off-by: Paul Durrant <pdurrant@amazon.com> --- Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com> Cc: Juergen Gross <jgross@suse.com> Cc: Stefano Stabellini <sstabellini@kernel.org> v2: - New in v2 v3: - Use try_module_get() rather than __module)get() and handle failure - Not added Juergen's R-b because of the change --- drivers/xen/xenbus/xenbus_probe.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c index 5b471889d723..4461f4583476 100644 --- a/drivers/xen/xenbus/xenbus_probe.c +++ b/drivers/xen/xenbus/xenbus_probe.c @@ -232,9 +232,16 @@ int xenbus_dev_probe(struct device *_dev) return err; } + if (!try_module_get(drv->driver.owner)) { + dev_warn(&dev->dev, "failed to acquire module reference on '%s'.\n", + drv->driver.name); + err = -ESRCH; + goto fail; + } + err = drv->probe(dev, id); if (err) - goto fail; + goto fail_put; err = watch_otherend(dev); if (err) { @@ -244,6 +251,8 @@ int xenbus_dev_probe(struct device *_dev) } return 0; +fail_put: + module_put(drv->driver.owner); fail: xenbus_dev_error(dev, err, "xenbus_dev_probe on %s", dev->nodename); xenbus_switch_state(dev, XenbusStateClosed); @@ -263,6 +272,8 @@ int xenbus_dev_remove(struct device *_dev) if (drv->remove) drv->remove(dev); + module_put(drv->driver.owner); + free_otherend_details(dev); xenbus_switch_state(dev, XenbusStateClosed); -- 2.20.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Xen-devel] [PATCH v3 1/2] xen/xenbus: reference count registered modules @ 2019-12-02 11:41 ` Paul Durrant 0 siblings, 0 replies; 12+ messages in thread From: Paul Durrant @ 2019-12-02 11:41 UTC (permalink / raw) To: linux-block, linux-kernel, xen-devel Cc: Juergen Gross, Paul Durrant, Stefano Stabellini, Boris Ostrovsky, Jan Beulich To prevent a PV driver module being removed whilst attached to its other end, and hence xenbus calling into potentially invalid text, take a reference on the module before calling the probe() method (dropping it if unsuccessful) and drop the reference after returning from the remove() method. Suggested-by: Jan Beulich <jbeulich@suse.com> Signed-off-by: Paul Durrant <pdurrant@amazon.com> --- Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com> Cc: Juergen Gross <jgross@suse.com> Cc: Stefano Stabellini <sstabellini@kernel.org> v2: - New in v2 v3: - Use try_module_get() rather than __module)get() and handle failure - Not added Juergen's R-b because of the change --- drivers/xen/xenbus/xenbus_probe.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c index 5b471889d723..4461f4583476 100644 --- a/drivers/xen/xenbus/xenbus_probe.c +++ b/drivers/xen/xenbus/xenbus_probe.c @@ -232,9 +232,16 @@ int xenbus_dev_probe(struct device *_dev) return err; } + if (!try_module_get(drv->driver.owner)) { + dev_warn(&dev->dev, "failed to acquire module reference on '%s'.\n", + drv->driver.name); + err = -ESRCH; + goto fail; + } + err = drv->probe(dev, id); if (err) - goto fail; + goto fail_put; err = watch_otherend(dev); if (err) { @@ -244,6 +251,8 @@ int xenbus_dev_probe(struct device *_dev) } return 0; +fail_put: + module_put(drv->driver.owner); fail: xenbus_dev_error(dev, err, "xenbus_dev_probe on %s", dev->nodename); xenbus_switch_state(dev, XenbusStateClosed); @@ -263,6 +272,8 @@ int xenbus_dev_remove(struct device *_dev) if (drv->remove) drv->remove(dev); + module_put(drv->driver.owner); + free_otherend_details(dev); xenbus_switch_state(dev, XenbusStateClosed); -- 2.20.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/2] xen/xenbus: reference count registered modules 2019-12-02 11:41 ` [Xen-devel] " Paul Durrant @ 2019-12-03 9:47 ` Jan Beulich -1 siblings, 0 replies; 12+ messages in thread From: Jan Beulich @ 2019-12-03 9:47 UTC (permalink / raw) To: Paul Durrant Cc: xen-devel, linux-block, linux-kernel, Stefano Stabellini, Boris Ostrovsky, Juergen Gross On 02.12.2019 12:41, Paul Durrant wrote: > To prevent a PV driver module being removed whilst attached to its other > end, and hence xenbus calling into potentially invalid text, take a > reference on the module before calling the probe() method (dropping it if > unsuccessful) and drop the reference after returning from the remove() > method. > > Suggested-by: Jan Beulich <jbeulich@suse.com> > Signed-off-by: Paul Durrant <pdurrant@amazon.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> with ... > --- a/drivers/xen/xenbus/xenbus_probe.c > +++ b/drivers/xen/xenbus/xenbus_probe.c > @@ -232,9 +232,16 @@ int xenbus_dev_probe(struct device *_dev) > return err; > } > > + if (!try_module_get(drv->driver.owner)) { > + dev_warn(&dev->dev, "failed to acquire module reference on '%s'.\n", > + drv->driver.name); ... perhaps the full stop dropped here and ... > + err = -ESRCH; > + goto fail; > + } ... (definitely) indentation here changed to use a tab. Jan ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Xen-devel] [PATCH v3 1/2] xen/xenbus: reference count registered modules @ 2019-12-03 9:47 ` Jan Beulich 0 siblings, 0 replies; 12+ messages in thread From: Jan Beulich @ 2019-12-03 9:47 UTC (permalink / raw) To: Paul Durrant Cc: Juergen Gross, Stefano Stabellini, linux-kernel, linux-block, xen-devel, Boris Ostrovsky On 02.12.2019 12:41, Paul Durrant wrote: > To prevent a PV driver module being removed whilst attached to its other > end, and hence xenbus calling into potentially invalid text, take a > reference on the module before calling the probe() method (dropping it if > unsuccessful) and drop the reference after returning from the remove() > method. > > Suggested-by: Jan Beulich <jbeulich@suse.com> > Signed-off-by: Paul Durrant <pdurrant@amazon.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> with ... > --- a/drivers/xen/xenbus/xenbus_probe.c > +++ b/drivers/xen/xenbus/xenbus_probe.c > @@ -232,9 +232,16 @@ int xenbus_dev_probe(struct device *_dev) > return err; > } > > + if (!try_module_get(drv->driver.owner)) { > + dev_warn(&dev->dev, "failed to acquire module reference on '%s'.\n", > + drv->driver.name); ... perhaps the full stop dropped here and ... > + err = -ESRCH; > + goto fail; > + } ... (definitely) indentation here changed to use a tab. Jan _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/2] xen/xenbus: reference count registered modules 2019-12-02 11:41 ` [Xen-devel] " Paul Durrant @ 2019-12-04 10:36 ` Jürgen Groß -1 siblings, 0 replies; 12+ messages in thread From: Jürgen Groß @ 2019-12-04 10:36 UTC (permalink / raw) To: Paul Durrant, linux-block, linux-kernel, xen-devel Cc: Jan Beulich, Boris Ostrovsky, Stefano Stabellini On 02.12.19 12:41, Paul Durrant wrote: > To prevent a PV driver module being removed whilst attached to its other > end, and hence xenbus calling into potentially invalid text, take a > reference on the module before calling the probe() method (dropping it if > unsuccessful) and drop the reference after returning from the remove() > method. > > Suggested-by: Jan Beulich <jbeulich@suse.com> > Signed-off-by: Paul Durrant <pdurrant@amazon.com> Pushed to xen/tip.git for-linus-5.5b Juergen ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Xen-devel] [PATCH v3 1/2] xen/xenbus: reference count registered modules @ 2019-12-04 10:36 ` Jürgen Groß 0 siblings, 0 replies; 12+ messages in thread From: Jürgen Groß @ 2019-12-04 10:36 UTC (permalink / raw) To: Paul Durrant, linux-block, linux-kernel, xen-devel Cc: Boris Ostrovsky, Stefano Stabellini, Jan Beulich On 02.12.19 12:41, Paul Durrant wrote: > To prevent a PV driver module being removed whilst attached to its other > end, and hence xenbus calling into potentially invalid text, take a > reference on the module before calling the probe() method (dropping it if > unsuccessful) and drop the reference after returning from the remove() > method. > > Suggested-by: Jan Beulich <jbeulich@suse.com> > Signed-off-by: Paul Durrant <pdurrant@amazon.com> Pushed to xen/tip.git for-linus-5.5b Juergen _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3 2/2] xen-blkback: allow module to be cleanly unloaded 2019-12-02 11:41 ` [Xen-devel] " Paul Durrant @ 2019-12-02 11:41 ` Paul Durrant -1 siblings, 0 replies; 12+ messages in thread From: Paul Durrant @ 2019-12-02 11:41 UTC (permalink / raw) To: linux-block, linux-kernel, xen-devel Cc: Paul Durrant, Roger Pau Monné, Juergen Gross, Konrad Rzeszutek Wilk, Jens Axboe Add a module_exit() to perform the necessary clean-up. Signed-off-by: Paul Durrant <pdurrant@amazon.com> Reviewed-by: "Roger Pau Monné" <roger.pau@citrix.com> Reviewed-by: Juergen Gross <jgross@suse.com> --- Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Cc: Jens Axboe <axboe@kernel.dk> Signed-off-by: Paul Durrant <pdurrant@amazon.com> --- drivers/block/xen-blkback/blkback.c | 8 ++++++++ drivers/block/xen-blkback/common.h | 3 +++ drivers/block/xen-blkback/xenbus.c | 11 +++++++++++ 3 files changed, 22 insertions(+) diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c index fd1e19f1a49f..e562a7e20c3c 100644 --- a/drivers/block/xen-blkback/blkback.c +++ b/drivers/block/xen-blkback/blkback.c @@ -1504,5 +1504,13 @@ static int __init xen_blkif_init(void) module_init(xen_blkif_init); +static void __exit xen_blkif_fini(void) +{ + xen_blkif_xenbus_fini(); + xen_blkif_interface_fini(); +} + +module_exit(xen_blkif_fini); + MODULE_LICENSE("Dual BSD/GPL"); MODULE_ALIAS("xen-backend:vbd"); diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h index 1d3002d773f7..49132b0adbbe 100644 --- a/drivers/block/xen-blkback/common.h +++ b/drivers/block/xen-blkback/common.h @@ -375,9 +375,12 @@ struct phys_req { struct block_device *bdev; blkif_sector_t sector_number; }; + int xen_blkif_interface_init(void); +void xen_blkif_interface_fini(void); int xen_blkif_xenbus_init(void); +void xen_blkif_xenbus_fini(void); irqreturn_t xen_blkif_be_int(int irq, void *dev_id); int xen_blkif_schedule(void *arg); diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c index b90dbcd99c03..e8c5c54e1d26 100644 --- a/drivers/block/xen-blkback/xenbus.c +++ b/drivers/block/xen-blkback/xenbus.c @@ -333,6 +333,12 @@ int __init xen_blkif_interface_init(void) return 0; } +void xen_blkif_interface_fini(void) +{ + kmem_cache_destroy(xen_blkif_cachep); + xen_blkif_cachep = NULL; +} + /* * sysfs interface for VBD I/O requests */ @@ -1122,3 +1128,8 @@ int xen_blkif_xenbus_init(void) { return xenbus_register_backend(&xen_blkbk_driver); } + +void xen_blkif_xenbus_fini(void) +{ + xenbus_unregister_driver(&xen_blkbk_driver); +} -- 2.20.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Xen-devel] [PATCH v3 2/2] xen-blkback: allow module to be cleanly unloaded @ 2019-12-02 11:41 ` Paul Durrant 0 siblings, 0 replies; 12+ messages in thread From: Paul Durrant @ 2019-12-02 11:41 UTC (permalink / raw) To: linux-block, linux-kernel, xen-devel Cc: Juergen Gross, Jens Axboe, Paul Durrant, Konrad Rzeszutek Wilk, Roger Pau Monné Add a module_exit() to perform the necessary clean-up. Signed-off-by: Paul Durrant <pdurrant@amazon.com> Reviewed-by: "Roger Pau Monné" <roger.pau@citrix.com> Reviewed-by: Juergen Gross <jgross@suse.com> --- Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Cc: Jens Axboe <axboe@kernel.dk> Signed-off-by: Paul Durrant <pdurrant@amazon.com> --- drivers/block/xen-blkback/blkback.c | 8 ++++++++ drivers/block/xen-blkback/common.h | 3 +++ drivers/block/xen-blkback/xenbus.c | 11 +++++++++++ 3 files changed, 22 insertions(+) diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c index fd1e19f1a49f..e562a7e20c3c 100644 --- a/drivers/block/xen-blkback/blkback.c +++ b/drivers/block/xen-blkback/blkback.c @@ -1504,5 +1504,13 @@ static int __init xen_blkif_init(void) module_init(xen_blkif_init); +static void __exit xen_blkif_fini(void) +{ + xen_blkif_xenbus_fini(); + xen_blkif_interface_fini(); +} + +module_exit(xen_blkif_fini); + MODULE_LICENSE("Dual BSD/GPL"); MODULE_ALIAS("xen-backend:vbd"); diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h index 1d3002d773f7..49132b0adbbe 100644 --- a/drivers/block/xen-blkback/common.h +++ b/drivers/block/xen-blkback/common.h @@ -375,9 +375,12 @@ struct phys_req { struct block_device *bdev; blkif_sector_t sector_number; }; + int xen_blkif_interface_init(void); +void xen_blkif_interface_fini(void); int xen_blkif_xenbus_init(void); +void xen_blkif_xenbus_fini(void); irqreturn_t xen_blkif_be_int(int irq, void *dev_id); int xen_blkif_schedule(void *arg); diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c index b90dbcd99c03..e8c5c54e1d26 100644 --- a/drivers/block/xen-blkback/xenbus.c +++ b/drivers/block/xen-blkback/xenbus.c @@ -333,6 +333,12 @@ int __init xen_blkif_interface_init(void) return 0; } +void xen_blkif_interface_fini(void) +{ + kmem_cache_destroy(xen_blkif_cachep); + xen_blkif_cachep = NULL; +} + /* * sysfs interface for VBD I/O requests */ @@ -1122,3 +1128,8 @@ int xen_blkif_xenbus_init(void) { return xenbus_register_backend(&xen_blkbk_driver); } + +void xen_blkif_xenbus_fini(void) +{ + xenbus_unregister_driver(&xen_blkbk_driver); +} -- 2.20.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 2/2] xen-blkback: allow module to be cleanly unloaded 2019-12-02 11:41 ` [Xen-devel] " Paul Durrant @ 2019-12-04 10:36 ` Jürgen Groß -1 siblings, 0 replies; 12+ messages in thread From: Jürgen Groß @ 2019-12-04 10:36 UTC (permalink / raw) To: Paul Durrant, linux-block, linux-kernel, xen-devel Cc: Roger Pau Monné, Konrad Rzeszutek Wilk, Jens Axboe On 02.12.19 12:41, Paul Durrant wrote: > Add a module_exit() to perform the necessary clean-up. > > Signed-off-by: Paul Durrant <pdurrant@amazon.com> > Reviewed-by: "Roger Pau Monné" <roger.pau@citrix.com> > Reviewed-by: Juergen Gross <jgross@suse.com> Pushed to xen/tip.git for-linus-5.5b Juergen ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Xen-devel] [PATCH v3 2/2] xen-blkback: allow module to be cleanly unloaded @ 2019-12-04 10:36 ` Jürgen Groß 0 siblings, 0 replies; 12+ messages in thread From: Jürgen Groß @ 2019-12-04 10:36 UTC (permalink / raw) To: Paul Durrant, linux-block, linux-kernel, xen-devel Cc: Jens Axboe, Konrad Rzeszutek Wilk, Roger Pau Monné On 02.12.19 12:41, Paul Durrant wrote: > Add a module_exit() to perform the necessary clean-up. > > Signed-off-by: Paul Durrant <pdurrant@amazon.com> > Reviewed-by: "Roger Pau Monné" <roger.pau@citrix.com> > Reviewed-by: Juergen Gross <jgross@suse.com> Pushed to xen/tip.git for-linus-5.5b Juergen _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2019-12-04 10:37 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-12-02 11:41 [PATCH v3 0/2] allow xen-blkback to be cleanly unloaded Paul Durrant 2019-12-02 11:41 ` [Xen-devel] " Paul Durrant 2019-12-02 11:41 ` [PATCH v3 1/2] xen/xenbus: reference count registered modules Paul Durrant 2019-12-02 11:41 ` [Xen-devel] " Paul Durrant 2019-12-03 9:47 ` Jan Beulich 2019-12-03 9:47 ` [Xen-devel] " Jan Beulich 2019-12-04 10:36 ` Jürgen Groß 2019-12-04 10:36 ` [Xen-devel] " Jürgen Groß 2019-12-02 11:41 ` [PATCH v3 2/2] xen-blkback: allow module to be cleanly unloaded Paul Durrant 2019-12-02 11:41 ` [Xen-devel] " Paul Durrant 2019-12-04 10:36 ` Jürgen Groß 2019-12-04 10:36 ` [Xen-devel] " Jürgen Groß
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.