When device is removed, backend domain (which may be a driver domain) is
responsible for removing backend entries from xenstore. But in case of
driver domain, it has no access to remove all of them - specifically the
directory named after frontend-id remains. This may accumulate enough to
exceed xenstore quote of the driver domain, breaking further devices.
Fix this by calling libxl__xs_path_cleanup() on the backend path from
libxl__device_destroy() in the toolstack domain too. Note
libxl__device_destroy() is called when the driver domain already removed
what it can (see device_destroy_be_watch_cb()->device_hotplug_done()).
Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Acked-by: Wei Liu <wl@xen.org>
* from the backend path.
*/
libxl__xs_path_cleanup(gc, t, be_path);
+ } else if (domid == LIBXL_TOOLSTACK_DOMID && !libxl_only) {
+ /*
+ * Then, toolstack domain is in charge of removing the parent
+ * directory if empty already.
+ */
+ libxl__xs_path_cleanup(gc, t, be_path);
}
rc = libxl__xs_transaction_commit(gc, &t);