if (dynamic_fault("bcachefs:add:super_realloc"))
                return -BCH_ERR_ENOMEM_sb_realloc_injected;
 
+       new_sb = krealloc(sb->sb, new_buffer_size, GFP_NOFS|__GFP_ZERO);
+       if (!new_sb)
+               return -BCH_ERR_ENOMEM_sb_buf_realloc;
+
+       sb->sb = new_sb;
+
        if (sb->have_bio) {
-               unsigned nr_bvecs = DIV_ROUND_UP(new_buffer_size, PAGE_SIZE);
+               unsigned nr_bvecs = buf_pages(sb->sb, new_buffer_size);
 
                bio = bio_kmalloc(nr_bvecs, GFP_KERNEL);
                if (!bio)
                sb->bio = bio;
        }
 
-       new_sb = krealloc(sb->sb, new_buffer_size, GFP_NOFS|__GFP_ZERO);
-       if (!new_sb)
-               return -BCH_ERR_ENOMEM_sb_buf_realloc;
-
-       sb->sb = new_sb;
        sb->buffer_size = new_buffer_size;
 
        return 0;