From 8fa6aee04a9bcc3c6dea1deebffc35c079b10c25 Mon Sep 17 00:00:00 2001 From: andyzhangx Date: Thu, 6 Nov 2025 14:04:35 +0000 Subject: [PATCH 1/2] fix: skip chmod setting in readonly mode --- pkg/blob/nodeserver.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/blob/nodeserver.go b/pkg/blob/nodeserver.go index 8e349f25f..90c431d95 100644 --- a/pkg/blob/nodeserver.go +++ b/pkg/blob/nodeserver.go @@ -389,8 +389,12 @@ func (d *Driver) NodeStageVolume(ctx context.Context, req *csi.NodeStageVolumeRe } if performChmodOp { - if err := chmodIfPermissionMismatch(targetPath, os.FileMode(mountPermissions)); err != nil { - return nil, status.Error(codes.Internal, err.Error()) + if !isReadOnlyFromCapability(volumeCapability) { + if err := chmodIfPermissionMismatch(targetPath, os.FileMode(mountPermissions)); err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + } else { + klog.V(2).Infof("skip chmod on targetPath(%s) since it's a read-only mount", targetPath) } } else { klog.V(2).Infof("skip chmod on targetPath(%s) since mountPermissions is set as 0", targetPath) From ffb724b347ca070441f9e3c245178504a71824d6 Mon Sep 17 00:00:00 2001 From: andyzhangx Date: Fri, 7 Nov 2025 07:14:14 +0000 Subject: [PATCH 2/2] test: set readOnly flag in e2e test --- test/e2e/dynamic_provisioning_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/test/e2e/dynamic_provisioning_test.go b/test/e2e/dynamic_provisioning_test.go index e10eda557..af403b067 100644 --- a/test/e2e/dynamic_provisioning_test.go +++ b/test/e2e/dynamic_provisioning_test.go @@ -270,6 +270,7 @@ var _ = ginkgo.Describe("[blob-csi-e2e] Dynamic Provisioning", func() { VolumeMount: testsuites.VolumeMountDetails{ NameGenerate: "test-volume-", MountPathGenerate: "/mnt/test-", + ReadOnly: true, }, AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadOnlyMany}, },