Переглянути джерело

Merge remote-tracking branch 'alexlarsson/dm-readonly-images' into dm

Conflicts:
	devmapper/deviceset_devmapper.go
Solomon Hykes 11 роки тому
батько
коміт
d3505d836a
2 змінених файлів з 12 додано та 6 видалено
  1. 9 3
      devmapper/deviceset_devmapper.go
  2. 3 3
      image.go

+ 9 - 3
devmapper/deviceset_devmapper.go

@@ -650,7 +650,7 @@ func (devices *DeviceSet) Shutdown() error {
 	return nil
 }
 
-func (devices *DeviceSet) MountDevice(hash, path string) error {
+func (devices *DeviceSet) MountDevice(hash, path string, readOnly bool) error {
 	devices.Lock()
 	defer devices.Unlock()
 
@@ -666,9 +666,15 @@ func (devices *DeviceSet) MountDevice(hash, path string) error {
 
 	info := devices.Devices[hash]
 
-	err := syscall.Mount(info.DevName(), path, "ext4", syscall.MS_MGC_VAL, "discard")
+	var flags uintptr = syscall.MS_MGC_VAL
+
+	if readOnly {
+		flags = flags | syscall.MS_RDONLY
+	}
+
+	err := syscall.Mount(info.DevName(), path, "ext4", flags, "discard")
 	if err != nil && err == syscall.EINVAL {
-		err = syscall.Mount(info.DevName(), path, "ext4", syscall.MS_MGC_VAL, "")
+		err = syscall.Mount(info.DevName(), path, "ext4", flags, "")
 	}
 	if err != nil {
 		utils.Debugf("\n--->Err: %s\n", err)

+ 3 - 3
image.go

@@ -385,7 +385,7 @@ func (image *Image) ensureImageDevice(devices *devmapper.DeviceSet) error {
 		return err
 	}
 
-	if err := devices.MountDevice(image.ID, mountDir); err != nil {
+	if err := devices.MountDevice(image.ID, mountDir, false); err != nil {
 		utils.Debugf("Error mounting device: %s", err)
 		devices.RemoveDevice(image.ID)
 		return err
@@ -459,7 +459,7 @@ func (image *Image) Mount(runtime *Runtime, root, rw string, id string) error {
 	}
 
 	utils.Debugf("Mounting container %s at %s for container", id, root)
-	if err := devices.MountDevice(id, root); err != nil {
+	if err := devices.MountDevice(id, root, false); err != nil {
 		return err
 	}
 
@@ -494,7 +494,7 @@ func (image *Image) Changes(runtime *Runtime, root, rw, id string) ([]Change, er
 
 	// We re-use rw for the temporary mount of the base image as its
 	// not used by device-mapper otherwise
-	err = devices.MountDevice(image.ID, rw)
+	err = devices.MountDevice(image.ID, rw, true)
 	if err != nil {
 		return nil, err
 	}