Browse code

devmapper: Remove extra wait after device removal

Currently in device removal path (device deactivation), we wait
for 10 seconds for devive to actually go away. waitRemove().

In current code this is not required. If dm removal task has completed
and one has done the wait on udev cookie, then device is gone and there
is no need to write another loop to wait for device removal.

This patch removes the waitRemove() which waits for 10 seconds after
device removal. This seems unnecessary.

Signed-off-by: Vivek Goyal <vgoyal@redhat.com>

Vivek Goyal authored on 2015/04/03 05:47:14
Showing 1 changed files
... ...
@@ -1157,7 +1157,7 @@ func (devices *DeviceSet) deleteDevice(info *DevInfo) error {
1157 1157
 
1158 1158
 	devinfo, _ := devicemapper.GetInfo(info.Name())
1159 1159
 	if devinfo != nil && devinfo.Exists != 0 {
1160
-		if err := devices.removeDeviceAndWait(info.Name()); err != nil {
1160
+		if err := devices.removeDevice(info.Name()); err != nil {
1161 1161
 			logrus.Debugf("Error removing device: %s", err)
1162 1162
 			return err
1163 1163
 		}
... ...
@@ -1236,7 +1236,7 @@ func (devices *DeviceSet) deactivateDevice(info *DevInfo) error {
1236 1236
 		return err
1237 1237
 	}
1238 1238
 	if devinfo.Exists != 0 {
1239
-		if err := devices.removeDeviceAndWait(info.Name()); err != nil {
1239
+		if err := devices.removeDevice(info.Name()); err != nil {
1240 1240
 			return err
1241 1241
 		}
1242 1242
 	}
... ...
@@ -1244,13 +1244,12 @@ func (devices *DeviceSet) deactivateDevice(info *DevInfo) error {
1244 1244
 	return nil
1245 1245
 }
1246 1246
 
1247
-// Issues the underlying dm remove operation and then waits
1248
-// for it to finish.
1249
-func (devices *DeviceSet) removeDeviceAndWait(devname string) error {
1247
+// Issues the underlying dm remove operation.
1248
+func (devices *DeviceSet) removeDevice(devname string) error {
1250 1249
 	var err error
1251 1250
 
1252
-	logrus.Debugf("[devmapper] removeDeviceAndWait START(%s)", devname)
1253
-	defer logrus.Debugf("[devmapper] removeDeviceAndWait END(%s)", devname)
1251
+	logrus.Debugf("[devmapper] removeDevice START(%s)", devname)
1252
+	defer logrus.Debugf("[devmapper] removeDevice END(%s)", devname)
1254 1253
 
1255 1254
 	for i := 0; i < 1000; i++ {
1256 1255
 		err = devicemapper.RemoveDevice(devname)
... ...
@@ -1267,45 +1266,8 @@ func (devices *DeviceSet) removeDeviceAndWait(devname string) error {
1267 1267
 		time.Sleep(10 * time.Millisecond)
1268 1268
 		devices.Lock()
1269 1269
 	}
1270
-	if err != nil {
1271
-		return err
1272
-	}
1273
-
1274
-	if err := devices.waitRemove(devname); err != nil {
1275
-		return err
1276
-	}
1277
-	return nil
1278
-}
1279
-
1280
-// waitRemove blocks until either:
1281
-// a) the device registered at <device_set_prefix>-<hash> is removed,
1282
-// or b) the 10 second timeout expires.
1283
-func (devices *DeviceSet) waitRemove(devname string) error {
1284
-	logrus.Debugf("[deviceset %s] waitRemove(%s)", devices.devicePrefix, devname)
1285
-	defer logrus.Debugf("[deviceset %s] waitRemove(%s) END", devices.devicePrefix, devname)
1286
-	i := 0
1287
-	for ; i < 1000; i++ {
1288
-		devinfo, err := devicemapper.GetInfo(devname)
1289
-		if err != nil {
1290
-			// If there is an error we assume the device doesn't exist.
1291
-			// The error might actually be something else, but we can't differentiate.
1292
-			return nil
1293
-		}
1294
-		if i%100 == 0 {
1295
-			logrus.Debugf("Waiting for removal of %s: exists=%d", devname, devinfo.Exists)
1296
-		}
1297
-		if devinfo.Exists == 0 {
1298
-			break
1299
-		}
1300 1270
 
1301
-		devices.Unlock()
1302
-		time.Sleep(10 * time.Millisecond)
1303
-		devices.Lock()
1304
-	}
1305
-	if i == 1000 {
1306
-		return fmt.Errorf("Timeout while waiting for device %s to be removed", devname)
1307
-	}
1308
-	return nil
1271
+	return err
1309 1272
 }
1310 1273
 
1311 1274
 // waitClose blocks until either: