diff --git a/documentation/ref-manual/variables.rst b/documentation/ref-manual/variables.rst
index fc29e476cd..d0e476d2eb 100644
--- a/documentation/ref-manual/variables.rst
+++ b/documentation/ref-manual/variables.rst
@@ -3476,6 +3476,20 @@ system and gives an overview of their function and contents.
       variable, see the ":ref:`dev-manual/customizing-images:customizing images using custom \`\`image_features\`\` and \`\`extra_image_features\`\``"
       section in the Yocto Project Development Tasks Manual.
 
+   :term:`IMAGE_FILE_MAXSIZE`
+      Specifies the maximum size in kilobytes to create the image file for a
+      specific image type, which corresponds to the value set in
+      :term:`IMAGE_FSTYPES`, (e.g. ``ext3``,
+      ``btrfs``, and so forth). When setting this variable, you should use
+      an override for the associated type. Here is an example::
+
+         IMAGE_FILE_MAXSIZE:ext4 = "8192"
+
+      It overrides the :term:`IMAGE_OVERHEAD_FACTOR` and
+      :term:`IMAGE_ROOTFS_EXTRA_SPACE` mechanism for some filesystems.
+      If the maximum size is below the required size to store the rootfs content,
+      the operation will fail.
+
    :term:`IMAGE_FSTYPES`
       Specifies the formats the OpenEmbedded build system uses during the
       build when creating the root filesystem. For example, setting
diff --git a/meta/classes-recipe/image_types.bbclass b/meta/classes-recipe/image_types.bbclass
index 023eb87537..33c65e8282 100644
--- a/meta/classes-recipe/image_types.bbclass
+++ b/meta/classes-recipe/image_types.bbclass
@@ -54,6 +54,13 @@ def imagetypes_getdepends(d):
     # Sort the set so that ordering is consistant
     return " ".join(sorted(deps))
 
+def get_max_image_size(d, fs):
+    max_size = d.getVar("IMAGE_FILE_MAXSIZE:%s" % fs)
+    if max_size is not None:
+        return max_size
+
+    return 0
+
 XZ_COMPRESSION_LEVEL ?= "-9"
 XZ_INTEGRITY_CHECK ?= "crc32"
 
