Skip to content

Commit a9caf9b

Browse files
Merge pull request #1877 from yanxuean/add-unmount-fail-error
output unmount error when unmount fail in diff.Apply
2 parents 6a1ef90 + 147d498 commit a9caf9b

1 file changed

Lines changed: 23 additions & 3 deletions

File tree

diff/walking/differ.go

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,20 @@ func (s *walkingDiff) Apply(ctx context.Context, desc ocispec.Descriptor, mounts
9494
if err != nil {
9595
return emptyDesc, errors.Wrap(err, "failed to create temporary directory")
9696
}
97+
// We change RemoveAll to Remove so that we either leak a temp dir
98+
// if it fails but not RM snapshot data. refer to #1868 #1785
9799
defer os.Remove(dir)
98100

99101
if err := mount.All(mounts, dir); err != nil {
100102
return emptyDesc, errors.Wrap(err, "failed to mount")
101103
}
102-
defer mount.Unmount(dir, 0)
104+
defer func() {
105+
if uerr := mount.Unmount(dir, 0); uerr != nil {
106+
if err == nil {
107+
err = uerr
108+
}
109+
}
110+
}()
103111

104112
ra, err := s.store.ReaderAt(ctx, desc.Digest)
105113
if err != nil {
@@ -175,12 +183,24 @@ func (s *walkingDiff) DiffMounts(ctx context.Context, lower, upper []mount.Mount
175183
if err := mount.All(lower, aDir); err != nil {
176184
return emptyDesc, errors.Wrap(err, "failed to mount")
177185
}
178-
defer mount.Unmount(aDir, 0)
186+
defer func() {
187+
if uerr := mount.Unmount(aDir, 0); uerr != nil {
188+
if err == nil {
189+
err = uerr
190+
}
191+
}
192+
}()
179193

180194
if err := mount.All(upper, bDir); err != nil {
181195
return emptyDesc, errors.Wrap(err, "failed to mount")
182196
}
183-
defer mount.Unmount(bDir, 0)
197+
defer func() {
198+
if uerr := mount.Unmount(bDir, 0); uerr != nil {
199+
if err == nil {
200+
err = uerr
201+
}
202+
}
203+
}()
184204

185205
var newReference bool
186206
if config.Reference == "" {

0 commit comments

Comments
 (0)