* Check sectorsize and nodesize first, other check will need it.
         * Check all possible sectorsize(4K, 8K, 16K, 32K, 64K) here.
         */
-       if (!is_power_of_2(sectorsize) || sectorsize < 4096 ||
+       if (!is_power_of_2(sectorsize) || sectorsize < BTRFS_MIN_BLOCKSIZE ||
            sectorsize > BTRFS_MAX_METADATA_BLOCKSIZE) {
                btrfs_err(fs_info, "invalid sectorsize %llu", sectorsize);
                ret = -EINVAL;
        }
 
        /*
-        * We only support at most two sectorsizes: 4K and PAGE_SIZE.
+        * We only support at most 3 sectorsizes: 4K, PAGE_SIZE, MIN_BLOCKSIZE.
+        *
+        * For 4K page sized systems with non-debug builds, all 3 matches (4K).
+        * For 4K page sized systems with debug builds, there are two block sizes
+        * supported. (4K and 2K)
         *
         * We can support 16K sectorsize with 64K page size without problem,
         * but such sectorsize/pagesize combination doesn't make much sense.
         * 4K will be our future standard, PAGE_SIZE is supported from the very
         * beginning.
         */
-       if (sectorsize > PAGE_SIZE || (sectorsize != SZ_4K && sectorsize != PAGE_SIZE)) {
+       if (sectorsize > PAGE_SIZE || (sectorsize != SZ_4K &&
+                                      sectorsize != PAGE_SIZE &&
+                                      sectorsize != BTRFS_MIN_BLOCKSIZE)) {
                btrfs_err(fs_info,
                        "sectorsize %llu not yet supported for page size %lu",
                        sectorsize, PAGE_SIZE);
 
 struct btrfs_stripe_hash_table;
 struct btrfs_space_info;
 
+/*
+ * Minimum data and metadata block size.
+ *
+ * Normally it's 4K, but for testing subpage block size on 4K page systems, we
+ * allow DEBUG builds to accept 2K page size.
+ */
+#ifdef CONFIG_BTRFS_DEBUG
+#define BTRFS_MIN_BLOCKSIZE    (SZ_2K)
+#else
+#define BTRFS_MIN_BLOCKSIZE    (SZ_4K)
+#endif
+
 #define BTRFS_MAX_EXTENT_SIZE SZ_128M
 
 #define BTRFS_OLDEST_GENERATION        0ULL
 
 {
        ssize_t ret = 0;
 
-       /* An artificial limit to only support 4K and PAGE_SIZE */
+       if (BTRFS_MIN_BLOCKSIZE != SZ_4K && BTRFS_MIN_BLOCKSIZE != PAGE_SIZE)
+               ret += sysfs_emit_at(buf, ret, "%u ", BTRFS_MIN_BLOCKSIZE);
        if (PAGE_SIZE > SZ_4K)
                ret += sysfs_emit_at(buf, ret, "%u ", SZ_4K);
        ret += sysfs_emit_at(buf, ret, "%lu\n", PAGE_SIZE);