@@ -2500,7 +2500,7 @@ func (sl *maybeStagedLayerExtraction) cleanup() error {
25002500// If the driver does not support stage addition then this is a NOP and does nothing.
25012501// This should be done without holding the storage lock, if a parent is given the caller
25022502// must check for existence beforehand while holding a lock.
2503- func (r * layerStore ) stageWithUnlockedStore (sl * maybeStagedLayerExtraction , parent string , layerOptions * LayerOptions ) error {
2503+ func (r * layerStore ) stageWithUnlockedStore (sl * maybeStagedLayerExtraction , parent string , layerOptions * LayerOptions ) ( retErr error ) {
25042504 if sl .staging == nil {
25052505 return nil
25062506 }
@@ -2520,7 +2520,13 @@ func (r *layerStore) stageWithUnlockedStore(sl *maybeStagedLayerExtraction, pare
25202520 if err != nil {
25212521 return err
25222522 }
2523- defer f .Close ()
2523+ // make sure to check for errors on close and return that one.
2524+ defer func () {
2525+ closeErr := f .Close ()
2526+ if retErr == nil {
2527+ retErr = closeErr
2528+ }
2529+ }()
25242530
25252531 result , err := applyDiff (layerOptions , sl .diff , f , func (payload io.Reader ) (int64 , error ) {
25262532 cleanup , stagedLayer , size , err := sl .staging .StartStagingDiffToApply (parent , drivers.ApplyDiffOpts {
@@ -2537,6 +2543,10 @@ func (r *layerStore) stageWithUnlockedStore(sl *maybeStagedLayerExtraction, pare
25372543 return err
25382544 }
25392545
2546+ if err := f .Sync (); err != nil {
2547+ return fmt .Errorf ("sync staged tar-split file: %w" , err )
2548+ }
2549+
25402550 sl .result = result
25412551 return nil
25422552}
@@ -2675,7 +2685,7 @@ func applyDiff(layerOptions *LayerOptions, diff io.Reader, tarSplitFile *os.File
26752685}
26762686
26772687// Requires startWriting.
2678- func (r * layerStore ) applyDiffWithOptions (to string , layerOptions * LayerOptions , diff io.Reader ) (int64 , error ) {
2688+ func (r * layerStore ) applyDiffWithOptions (to string , layerOptions * LayerOptions , diff io.Reader ) (_ int64 , retErr error ) {
26792689 if ! r .lockfile .IsReadWrite () {
26802690 return - 1 , fmt .Errorf ("not allowed to modify layer contents at %q: %w" , r .layerdir , ErrStoreIsReadOnly )
26812691 }
@@ -2689,7 +2699,13 @@ func (r *layerStore) applyDiffWithOptions(to string, layerOptions *LayerOptions,
26892699 if err != nil {
26902700 return - 1 , err
26912701 }
2692- defer tarSplitFile .Close ()
2702+ // make sure to check for errors on close and return that one.
2703+ defer func () {
2704+ closeErr := tarSplitFile .Close ()
2705+ if retErr == nil {
2706+ retErr = closeErr
2707+ }
2708+ }()
26932709
26942710 result , err := applyDiff (layerOptions , diff , tarSplitFile , func (payload io.Reader ) (int64 , error ) {
26952711 options := drivers.ApplyDiffOpts {
@@ -2741,7 +2757,7 @@ func (r *layerStore) DifferTarget(id string) (string, error) {
27412757}
27422758
27432759// Requires startWriting.
2744- func (r * layerStore ) applyDiffFromStagingDirectory (id string , diffOutput * drivers.DriverWithDifferOutput , options * drivers.ApplyDiffWithDifferOpts ) error {
2760+ func (r * layerStore ) applyDiffFromStagingDirectory (id string , diffOutput * drivers.DriverWithDifferOutput , options * drivers.ApplyDiffWithDifferOpts ) ( retErr error ) {
27452761 ddriver , ok := r .driver .(drivers.DriverWithDiffer )
27462762 if ! ok {
27472763 return ErrNotSupported
@@ -2789,7 +2805,13 @@ func (r *layerStore) applyDiffFromStagingDirectory(id string, diffOutput *driver
27892805 if err != nil {
27902806 return err
27912807 }
2792- defer tarSplitFile .Close ()
2808+ // make sure to check for errors on close and return that one.
2809+ defer func () {
2810+ closeErr := tarSplitFile .Close ()
2811+ if retErr == nil {
2812+ retErr = closeErr
2813+ }
2814+ }()
27932815 tarSplitWriter := pools .BufioWriter32KPool .Get (tarSplitFile )
27942816 defer pools .BufioWriter32KPool .Put (tarSplitWriter )
27952817
0 commit comments