diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index d7600e5fa3d9..2117b2a80edd 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -1895,9 +1895,14 @@ static int submit_one_sector(struct btrfs_inode *inode, queued = submit_extent_folio(bio_ctrl, disk_bytenr, folio, sectorsize, filepos - folio_pos(folio), 0); if (unlikely(queued < sectorsize)) { + u32 unqueued = sectorsize - queued; + btrfs_folio_clear_writeback(fs_info, folio, filepos, sectorsize); - btrfs_mark_ordered_io_finished(inode, filepos, fs_info->sectorsize, - false); + if (unqueued) + btrfs_mark_ordered_io_finished(inode, filepos + queued, + unqueued, false); + if (bio_ctrl->bbio && bio_ctrl->bbio->bio.bi_iter.bi_size) + submit_one_bio(bio_ctrl); return -EUCLEAN; } return 0;