Browse code

devicemapper: fix suspend removed device

when doing devices.cancelDeferredRemoval, the device could have been removed
and return ErrEnxio, but it continue to check if it is need to do suspend.
doSuspend := devinfo != nil && devinfo.Exists != 0 uses a devinfo which is
get before devices.cancelDeferredRemoval(baseInfo), it is outdate, the device
has been removed and there is no need to do suspend. If do suspend it will return
devicemapper: Error running deviceSuspend dm_task_run failed.

Signed-off-by: Lei Jitang <leijitang@huawei.com>

Lei Jitang authored on 2017/03/01 22:58:14
Showing 1 changed files
... ...
@@ -858,6 +858,7 @@ func (devices *DeviceSet) takeSnapshot(hash string, baseInfo *devInfo, size uint
858 858
 				if err != devicemapper.ErrEnxio {
859 859
 					return err
860 860
 				}
861
+				devinfo = nil
861 862
 			} else {
862 863
 				defer devices.deactivateDevice(baseInfo)
863 864
 			}