• Paul Durrant's avatar
    xen-blkback: support dynamic unbind/bind · f4eef1b6
    Paul Durrant authored
    By simply re-attaching to shared rings during connect_ring() rather than
    assuming they are freshly allocated (i.e assuming the counters are zero)
    it is possible for vbd instances to be unbound and re-bound from and to
    (respectively) a running guest.
    
    This has been tested by running:
    
    while true;
      do fio --name=randwrite --ioengine=libaio --iodepth=16 \
      --rw=randwrite --bs=4k --direct=1 --size=1G --verify=crc32;
      done
    
    in a PV guest whilst running:
    
    while true;
      do echo vbd-$DOMID-$VBD >unbind;
      echo unbound;
      sleep 5;
      echo vbd-$DOMID-$VBD >bind;
      echo bound;
      sleep 3;
      done
    
    in dom0 from /sys/bus/xen-backend/drivers/vbd to continuously unbind and
    re-bind its system disk image.
    
    This is a highly useful feature for a backend module as it allows it to be
    unloaded and re-loaded (i.e. updated) without requiring domUs to be halted.
    This was also tested by running:
    
    while true;
      do echo vbd-$DOMID-$VBD >unbind;
      echo unbound;
      sleep 5;
      rmmod xen-blkback;
      echo unloaded;
      sleep 1;
      modprobe xen-blkback;
      echo bound;
      cd $(pwd);
      sleep 3;
      done
    
    in dom0 whilst running the same loop as above in the (single) PV guest.
    
    Some (less stressful) testing has also been done using a Windows HVM guest
    with the latest 9.0 PV drivers installed.
    Signed-off-by: default avatarPaul Durrant <pdurrant@amazon.com>
    Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
    Reviewed-by: default avatarRoger Pau Monné <roger.pau@citrix.com>
    Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
    f4eef1b6
xenbus.c 28.6 KB