Browse Source

devicemapper: Unmount when removing device

Without this the remove will fail due to a busy device.
Alexander Larsson 11 năm trước cách đây
mục cha
commit
0ed762f2d2
1 tập tin đã thay đổi với 15 bổ sung0 xóa
  1. 15 0
      graphdriver/devmapper/driver.go

+ 15 - 0
graphdriver/devmapper/driver.go

@@ -61,6 +61,10 @@ func (d *Driver) Create(id string, parent string) error {
 }
 
 func (d *Driver) Remove(id string) error {
+	mp := path.Join(d.home, "mnt", id)
+	if err := d.unmount(id, mp); err != nil {
+		return err
+	}
 	return d.DeviceSet.RemoveDevice(id)
 }
 
@@ -90,3 +94,14 @@ func (d *Driver) mount(id, mountPoint string) error {
 	// Mount the device
 	return d.DeviceSet.MountDevice(id, mountPoint, false)
 }
+
+func (d *Driver) unmount(id, mountPoint string) error {
+	// If mountpoint is not mounted, do nothing
+	if mounted, err := Mounted(mountPoint); err != nil {
+		return fmt.Errorf("Error checking mountpoint: %s", err)
+	} else if !mounted {
+		return nil
+	}
+	// Unmount the device
+	return d.DeviceSet.UnmountDevice(id, mountPoint, true)
+}