diff --git a/doc/source/admin/cephfs_driver.rst b/doc/source/admin/cephfs_driver.rst
index 07650be21e..e08ac6eb75 100644
--- a/doc/source/admin/cephfs_driver.rst
+++ b/doc/source/admin/cephfs_driver.rst
@@ -314,6 +314,22 @@ using the section name, ``cephfsnfs1``.
     enabled_share_backends = generic1, cephfsnfs1
 
 
+Space considerations
+~~~~~~~~~~~~~~~~~~~~
+
+The CephFS driver reports total and free capacity available across the Ceph
+cluster to manila to allow provisioning. All CephFS shares are thinly
+provisioned, i.e., empty shares do not consume any significant space
+on the cluster. The CephFS driver does not allow controlling oversubscription
+via manila. So, as long as there is free space, provisioning will continue,
+and eventually this may cause your Ceph cluster to be over provisioned and
+you may run out of space if shares are being filled to capacity. It is advised
+that you use Ceph's monitoring tools to monitor space usage and add more
+storage when required in order to honor space requirements for provisioned
+manila shares. You may use the driver configuration option
+``reserved_share_percentage`` to prevent manila from filling up your Ceph
+cluster, and allow existing shares to grow.
+
 Creating shares
 ~~~~~~~~~~~~~~~
 
diff --git a/manila/share/drivers/cephfs/driver.py b/manila/share/drivers/cephfs/driver.py
index 2b821bd41c..42cfa38c47 100644
--- a/manila/share/drivers/cephfs/driver.py
+++ b/manila/share/drivers/cephfs/driver.py
@@ -167,8 +167,8 @@ class CephFSDriver(driver.ExecuteMixin, driver.GaneshaMixin,
     def _update_share_stats(self):
         stats = self.volume_client.rados.get_cluster_stats()
 
-        total_capacity_gb = stats['kb'] * units.Mi
-        free_capacity_gb = stats['kb_avail'] * units.Mi
+        total_capacity_gb = round(stats['kb'] / units.Mi, 2)
+        free_capacity_gb = round(stats['kb_avail'] / units.Mi, 2)
 
         data = {
             'vendor_name': 'Ceph',
@@ -182,7 +182,8 @@ class CephFSDriver(driver.ExecuteMixin, driver.GaneshaMixin,
                     'total_capacity_gb': total_capacity_gb,
                     'free_capacity_gb': free_capacity_gb,
                     'qos': 'False',
-                    'reserved_percentage': 0,
+                    'reserved_percentage': self.configuration.safe_get(
+                        'reserved_share_percentage'),
                     'dedupe': [False],
                     'compression': [False],
                     'thin_provisioning': [False]
diff --git a/manila/tests/share/drivers/cephfs/test_driver.py b/manila/tests/share/drivers/cephfs/test_driver.py
index 854cf9686b..ab52a73191 100644
--- a/manila/tests/share/drivers/cephfs/test_driver.py
+++ b/manila/tests/share/drivers/cephfs/test_driver.py
@@ -75,8 +75,10 @@ class MockVolumeClientModule(object):
             self.get_used_bytes = mock.Mock(return_value=self.mock_used_bytes)
             self.rados = mock.Mock()
             self.rados.get_cluster_stats = mock.Mock(return_value={
-                "kb": 1000,
-                "kb_avail": 500
+                "kb": 172953600,
+                "kb_avail": 157123584,
+                "kb_used": 15830016,
+                "num_objects": 26,
             })
 
 
@@ -352,10 +354,15 @@ class CephFSDriverTestCase(test.TestCase):
 
     def test_update_share_stats(self):
         self._driver.get_configured_ip_versions = mock.Mock(return_value=[4])
-        self._driver._volume_client
+        self._driver.configuration.local_conf.set_override(
+            'reserved_share_percentage', 5)
+
         self._driver._update_share_stats()
         result = self._driver._stats
 
+        self.assertEqual(5, result['pools'][0]['reserved_percentage'])
+        self.assertEqual(164.94, result['pools'][0]['total_capacity_gb'])
+        self.assertEqual(149.84, result['pools'][0]['free_capacity_gb'])
         self.assertTrue(result['ipv4_support'])
         self.assertFalse(result['ipv6_support'])
         self.assertEqual("CEPHFS", result['storage_protocol'])
diff --git a/releasenotes/notes/bug-1890833-fix-cephfs-incorrect-capacity-report-3a9bdaffcc62ec71.yaml b/releasenotes/notes/bug-1890833-fix-cephfs-incorrect-capacity-report-3a9bdaffcc62ec71.yaml
new file mode 100644
index 0000000000..7417cc930f
--- /dev/null
+++ b/releasenotes/notes/bug-1890833-fix-cephfs-incorrect-capacity-report-3a9bdaffcc62ec71.yaml
@@ -0,0 +1,22 @@
+---
+upgrade:
+  - |
+    This version includes a fix to the CephFS drivers to address `an issue
+    <https://launchpad.net/bugs/1890833>`_ with total and free space calculation
+    in the CephFS driver. When you update, you will notice that the space
+    calculations reflect reality in your Ceph clusters, and provisioning may
+    fail if the share sizes exceed the cluster's free space. CephFS shares are
+    always thin provisioned, and the driver does not support oversubscription
+    via Manila; so space can be claimed for new shares as long as there is free
+    space on the cluster. Use the "reserved_share_percentage" back end
+    configuration option to ensure there's always space left aside for
+    provisioned workloads to grow over time.
+fixes:
+  - |
+    The CephFS driver has now been fixed to report total and available space on
+    the storage system correctly. See `Launchpad bug#1890833
+    <https://launchpad.net/bugs/1890833>`_ for more details.
+  - |
+    The CephFS driver now honors the configuration option
+    "reserved_share_percentage", and it can be used to prevent save
+    space for provisioned workloads to grow over time.