diff --git a/pkg/volume/util/operationexecutor/operation_generator.go b/pkg/volume/util/operationexecutor/operation_generator.go index a4779c86009..cf16f99688f 100644 --- a/pkg/volume/util/operationexecutor/operation_generator.go +++ b/pkg/volume/util/operationexecutor/operation_generator.go @@ -588,6 +588,7 @@ func (og *operationGenerator) GenerateMountVolumeFunc( Recorder: og.recorder, SELinuxLabel: volumeToMount.SELinuxLabel, ReconstructedVolume: actualStateOfWorld.IsVolumeReconstructed(volumeToMount.VolumeName, volumeToMount.PodName), + IsRemount: isRemount, }) // Update actual state of world markOpts := MarkVolumeOpts{ diff --git a/pkg/volume/volume.go b/pkg/volume/volume.go index 152c7bc68ef..4a166f000f2 100644 --- a/pkg/volume/volume.go +++ b/pkg/volume/volume.go @@ -139,6 +139,16 @@ type MounterArgs struct { // mainly used by unit tests VolumeOwnershipApplicator VolumeOwnershipChanger ReconstructedVolume bool + + // IsRemount is true when SetUp is being invoked on a volume that the + // reconciler considers already mounted to the pod, e.g. a periodic + // republish triggered by CSIDriver.spec.requiresRepublish=true. Volume + // plugins should use this to avoid destroying state (e.g. mount + // directories, volume metadata files) that the pod is currently + // observing through an existing bind mount, since teardown on a + // failed remount cannot be repaired by a subsequent successful + // remount and would leave the pod with stale contents. + IsRemount bool } type VolumeOwnershipChanger interface {