diff --git a/charts/ceph-csi-rbd/templates/storageclass.yaml b/charts/ceph-csi-rbd/templates/storageclass.yaml
index 459a6ea312a..188362fc050 100644
--- a/charts/ceph-csi-rbd/templates/storageclass.yaml
+++ b/charts/ceph-csi-rbd/templates/storageclass.yaml
@@ -16,8 +16,10 @@ metadata:
 provisioner: {{ .Values.driverName }}
 parameters:
   clusterID: {{ .Values.storageClass.clusterID }}
-  pool: {{ .Values.storageClass.pool }}
   imageFeatures: {{ .Values.storageClass.imageFeatures }}
+{{- if .Values.storageClass.pool }}  
+  pool: {{ .Values.storageClass.pool }}
+{{- end }}  
 {{- if .Values.storageClass.tryOtherMounters }}
   tryOtherMounters: {{ .Values.storageClass.tryOtherMounters | quote}}
 {{- end }}
diff --git a/charts/ceph-csi-rbd/values.yaml b/charts/ceph-csi-rbd/values.yaml
index 7dc4d019ab1..1f071a20afe 100644
--- a/charts/ceph-csi-rbd/values.yaml
+++ b/charts/ceph-csi-rbd/values.yaml
@@ -321,6 +321,7 @@ storageClass:
   dataPool: ""
 
   # (required) Ceph pool into which the RBD image shall be created
+  # (optional) if topologyConstrainedPools is provided
   # eg: pool: replicapool
   pool: replicapool
 
diff --git a/examples/rbd/storageclass.yaml b/examples/rbd/storageclass.yaml
index ca7fc9a7247..601a6696af4 100644
--- a/examples/rbd/storageclass.yaml
+++ b/examples/rbd/storageclass.yaml
@@ -26,6 +26,7 @@ parameters:
    # dataPool: <ec-data-pool>
 
    # (required) Ceph pool into which the RBD image shall be created
+   # (optional) If the topologyConstrainedPools is provided
    # eg: pool: rbdpool
    pool: <rbd-pool-name>
 
diff --git a/internal/rbd/controllerserver.go b/internal/rbd/controllerserver.go
index e3796b6611d..2663781314e 100644
--- a/internal/rbd/controllerserver.go
+++ b/internal/rbd/controllerserver.go
@@ -225,31 +225,33 @@ func (cs *ControllerServer) parseVolCreateRequest(
 }
 
 func buildCreateVolumeResponse(req *csi.CreateVolumeRequest, rbdVol *rbdVolume) *csi.CreateVolumeResponse {
-	// remove kubernetes csi prefixed parameters.
-	volumeContext := k8s.RemoveCSIPrefixedParameters(req.GetParameters())
-	volumeContext["pool"] = rbdVol.Pool
-	volumeContext["journalPool"] = rbdVol.JournalPool
-	volumeContext["imageName"] = rbdVol.RbdImageName
-	if rbdVol.RadosNamespace != "" {
-		volumeContext["radosNamespace"] = rbdVol.RadosNamespace
-	}
-
-	if rbdVol.DataPool != "" {
-		volumeContext["dataPool"] = rbdVol.DataPool
-	}
-
 	volume := &csi.Volume{
 		VolumeId:      rbdVol.VolID,
 		CapacityBytes: rbdVol.VolSize,
-		VolumeContext: volumeContext,
 		ContentSource: req.GetVolumeContentSource(),
 	}
-	if rbdVol.Topology != nil {
-		volume.AccessibleTopology = []*csi.Topology{
+
+	// remove kubernetes csi prefixed parameters.
+	volumeContext := k8s.RemoveCSIPrefixedParameters(req.GetParameters())
+	if rbdVol.Topology == nil {
+		volumeContext["pool"] = rbdVol.Pool
+		volumeContext["journalPool"] = rbdVol.JournalPool
+		volumeContext["imageName"] = rbdVol.RbdImageName
+		if rbdVol.RadosNamespace != "" {
+			volumeContext["radosNamespace"] = rbdVol.RadosNamespace
+		}
+
+		if rbdVol.DataPool != "" {
+			volumeContext["dataPool"] = rbdVol.DataPool
+		}
+		volume.VolumeContext = volumeContext
+	} else {
+		accessibleTopology := []*csi.Topology{
 			{
 				Segments: rbdVol.Topology,
 			},
 		}
+		volume.AccessibleTopology = accessibleTopology
 	}
 
 	return &csi.CreateVolumeResponse{Volume: volume}