Commit b01d7cb4 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'for-linus-5.5b-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip

Pull xen fixes from Juergen Gross:
 "Two fixes: one for a resource accounting bug in some configurations
  and a fix for another patch which went into rc1"

* tag 'for-linus-5.5b-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
  xen/balloon: fix ballooned page accounting without hotplug enabled
  xen-blkback: prevent premature module unload
parents 2e6d3045 c673ec61
...@@ -171,6 +171,15 @@ static struct xen_blkif *xen_blkif_alloc(domid_t domid) ...@@ -171,6 +171,15 @@ static struct xen_blkif *xen_blkif_alloc(domid_t domid)
blkif->domid = domid; blkif->domid = domid;
atomic_set(&blkif->refcnt, 1); atomic_set(&blkif->refcnt, 1);
init_completion(&blkif->drain_complete); init_completion(&blkif->drain_complete);
/*
* Because freeing back to the cache may be deferred, it is not
* safe to unload the module (and hence destroy the cache) until
* this has completed. To prevent premature unloading, take an
* extra module reference here and release only when the object
* has been freed back to the cache.
*/
__module_get(THIS_MODULE);
INIT_WORK(&blkif->free_work, xen_blkif_deferred_free); INIT_WORK(&blkif->free_work, xen_blkif_deferred_free);
return blkif; return blkif;
...@@ -320,6 +329,7 @@ static void xen_blkif_free(struct xen_blkif *blkif) ...@@ -320,6 +329,7 @@ static void xen_blkif_free(struct xen_blkif *blkif)
/* Make sure everything is drained before shutting down */ /* Make sure everything is drained before shutting down */
kmem_cache_free(xen_blkif_cachep, blkif); kmem_cache_free(xen_blkif_cachep, blkif);
module_put(THIS_MODULE);
} }
int __init xen_blkif_interface_init(void) int __init xen_blkif_interface_init(void)
......
...@@ -394,7 +394,8 @@ static struct notifier_block xen_memory_nb = { ...@@ -394,7 +394,8 @@ static struct notifier_block xen_memory_nb = {
#else #else
static enum bp_state reserve_additional_memory(void) static enum bp_state reserve_additional_memory(void)
{ {
balloon_stats.target_pages = balloon_stats.current_pages; balloon_stats.target_pages = balloon_stats.current_pages +
balloon_stats.target_unpopulated;
return BP_ECANCELED; return BP_ECANCELED;
} }
#endif /* CONFIG_XEN_BALLOON_MEMORY_HOTPLUG */ #endif /* CONFIG_XEN_BALLOON_MEMORY_HOTPLUG */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment