size_t start_offset = eb->start & ((u64)PAGE_SIZE - 1);
        unsigned long i = (start_offset + start) >> PAGE_SHIFT;
 
-       WARN_ON(start > eb->len);
-       WARN_ON(start + len > eb->start + eb->len);
+       if (start + len > eb->len) {
+               WARN(1, KERN_ERR "btrfs bad mapping eb start %llu len %lu, wanted %lu %lu\n",
+                    eb->start, eb->len, start, len);
+               memset(dst, 0, len);
+               return;
+       }
 
        offset = (start_offset + start) & (PAGE_SIZE - 1);
 
        unsigned long end_i = (start_offset + start + min_len - 1) >>
                PAGE_SHIFT;
 
+       if (start + min_len > eb->len) {
+               WARN(1, KERN_ERR "btrfs bad mapping eb start %llu len %lu, wanted %lu %lu\n",
+                      eb->start, eb->len, start, min_len);
+               return -EINVAL;
+       }
+
        if (i != end_i)
                return 1;
 
                *map_start = ((u64)i << PAGE_SHIFT) - start_offset;
        }
 
-       if (start + min_len > eb->len) {
-               WARN(1, KERN_ERR "btrfs bad mapping eb start %llu len %lu, wanted %lu %lu\n",
-                      eb->start, eb->len, start, min_len);
-               return -EINVAL;
-       }
-
        p = eb->pages[i];
        kaddr = page_address(p);
        *map = kaddr + offset;