Am 09.11.2015 um 23:39 hat Max Reitz geschrieben:
> Make use of the BDS-BB removal and insertion notifiers to remove or set
> up, respectively, virtio-scsi's op blockers.
>
> Signed-off-by: Max Reitz <[email protected]>
> @@ -797,6 +830,29 @@ static void virtio_scsi_hotunplug(HotplugHandler
> *hotplug_dev, DeviceState *dev,
> if (s->ctx) {
> blk_op_unblock_all(sd->conf.blk, s->blocker);
> }
> +
> + QTAILQ_FOREACH(insert_notifier, &s->insert_notifiers, next) {
> + if (insert_notifier->sd == sd) {
> + break;
> + }
> + }
> + if (insert_notifier) {
> + notifier_remove(&insert_notifier->n);
> + QTAILQ_REMOVE(&s->insert_notifiers, insert_notifier, next);
> + g_free(insert_notifier);
> + }
Why a separate if block instead of just doing that inside the loop?
> + QTAILQ_FOREACH(remove_notifier, &s->remove_notifiers, next) {
> + if (remove_notifier->sd == sd) {
> + break;
> + }
> + }
> + if (remove_notifier) {
> + notifier_remove(&remove_notifier->n);
> + QTAILQ_REMOVE(&s->remove_notifiers, remove_notifier, next);
> + g_free(remove_notifier);
> + }
> +
> qdev_simple_device_unplug_cb(hotplug_dev, dev, errp);
> }
Kevin