Fixes Issue # 22992: docker commit failing.
1) docker create / run / start: this would create a snapshot device and mounts it onto the filesystem. So the first time GET operation is called. it will create the rootfs directory and return the path to rootfs 2) Now when I do docker commit. It will call the GET operation second time. This time the refcount will check that the count > 1 (count=2). so the rootfs already exists, it will just return the path to rootfs. Earlier it was just returning the mp: /var/lib/docker/devicemapper/mnt/{ID} and hence the inconsistent paths error. Signed-off-by: Shishir Mahajan <shishir.mahajan@redhat.com>
This commit is contained in:
parent
1d87f788b1
commit
09d0720e2f
|
@ -160,8 +160,9 @@ func (d *Driver) Remove(id string) error {
|
||||||
// Get mounts a device with given id into the root filesystem
|
// Get mounts a device with given id into the root filesystem
|
||||||
func (d *Driver) Get(id, mountLabel string) (string, error) {
|
func (d *Driver) Get(id, mountLabel string) (string, error) {
|
||||||
mp := path.Join(d.home, "mnt", id)
|
mp := path.Join(d.home, "mnt", id)
|
||||||
|
rootFs := path.Join(mp, "rootfs")
|
||||||
if count := d.ctr.Increment(mp); count > 1 {
|
if count := d.ctr.Increment(mp); count > 1 {
|
||||||
return mp, nil
|
return rootFs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
uid, gid, err := idtools.GetRootUIDGID(d.uidMaps, d.gidMaps)
|
uid, gid, err := idtools.GetRootUIDGID(d.uidMaps, d.gidMaps)
|
||||||
|
@ -186,7 +187,6 @@ func (d *Driver) Get(id, mountLabel string) (string, error) {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
rootFs := path.Join(mp, "rootfs")
|
|
||||||
if err := idtools.MkdirAllAs(rootFs, 0755, uid, gid); err != nil && !os.IsExist(err) {
|
if err := idtools.MkdirAllAs(rootFs, 0755, uid, gid); err != nil && !os.IsExist(err) {
|
||||||
d.ctr.Decrement(mp)
|
d.ctr.Decrement(mp)
|
||||||
d.DeviceSet.UnmountDevice(id, mp)
|
d.DeviceSet.UnmountDevice(id, mp)
|
||||||
|
|
Loading…
Reference in New Issue