struct btrfs_path *path;
        struct extent_buffer *leaf;
        struct btrfs_key ins;
+       u64 qg_released;
        int extent_inserted = 0;
        int ret;
 
        ins.objectid = disk_bytenr;
        ins.offset = disk_num_bytes;
        ins.type = BTRFS_EXTENT_ITEM_KEY;
-       ret = btrfs_alloc_reserved_file_extent(trans, root->root_key.objectid,
-                       btrfs_ino(BTRFS_I(inode)), file_pos, ram_bytes, &ins);
+
        /*
         * Release the reserved range from inode dirty range map, as it is
         * already moved into delayed_ref_head
         */
-       btrfs_qgroup_release_data(inode, file_pos, ram_bytes);
+       ret = btrfs_qgroup_release_data(inode, file_pos, ram_bytes);
+       if (ret < 0)
+               goto out;
+       qg_released = ret;
+       ret = btrfs_alloc_reserved_file_extent(trans, root->root_key.objectid,
+                       btrfs_ino(BTRFS_I(inode)), file_pos, qg_released, &ins);
 out:
        btrfs_free_path(path);