[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [Xen-users] Xen shutdown fails to release DRBD device
On Wed, Aug 22, 2018 at 03:55:46PM +0200, Valentin Vidic wrote: > DRBD end for this seems rather simple, it only checks if the > device->open_cnt is zero. So it would seem like drbd_release > was not called yet when the block-drbd script is run? > > > static enum drbd_state_rv > is_valid_state(struct drbd_device *device, union drbd_state ns) > { > ... > else if (ns.role == R_SECONDARY && device->open_cnt) > rv = SS_DEVICE_IN_USE; > ... > } > > static void drbd_release(struct gendisk *gd, fmode_t mode) > { > struct drbd_device *device = gd->private_data; > mutex_lock(&drbd_main_mutex); > device->open_cnt--; > mutex_unlock(&drbd_main_mutex); > } On the Xen side it seems that XenbusStateClosed event is sent to xenbus to run the block-drbd script. However the call to xen_blkif_disconnect in the line before that can fail with -EBUSY if there is still some in-flight IO for the device. Could it be that a lot of IO during shutdown is holding the DRBD device open while the block-drbd script has already started running? /* * Callback received when the frontend's state changes. */ static void frontend_changed(struct xenbus_device *dev, enum xenbus_state frontend_state) { ... case XenbusStateClosed: xen_blkif_disconnect(be->blkif); xenbus_switch_state(dev, XenbusStateClosed); if (xenbus_dev_is_online(dev)) break; /* fall through if not online */ ... } Maybe the XenbusStateClosed event should only be send when the device is closed in xen_blkif_free or some other place? -- Valentin _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |