pplhdr->entries_count = cpu_to_le32(io->entries_count);
        pplhdr->checksum = cpu_to_le32(~crc32c_le(~0, pplhdr, PPL_HEADER_SIZE));
  
+       /* Rewind the buffer if current PPL is larger then remaining space */
+       if (log->use_multippl &&
+           log->rdev->ppl.sector + log->rdev->ppl.size - log->next_io_sector <
+           (PPL_HEADER_SIZE + io->pp_size) >> 9)
+               log->next_io_sector = log->rdev->ppl.sector;
+ 
+ 
        bio->bi_end_io = ppl_log_endio;
        bio->bi_opf = REQ_OP_WRITE | REQ_FUA;
 -      bio->bi_bdev = log->rdev->bdev;
 +      bio_set_dev(bio, log->rdev->bdev);
-       bio->bi_iter.bi_sector = log->rdev->ppl.sector;
+       bio->bi_iter.bi_sector = log->next_io_sector;
        bio_add_page(bio, io->header_page, PAGE_SIZE, 0);
  
+       pr_debug("%s: log->current_io_sector: %llu\n", __func__,
+           (unsigned long long)log->next_io_sector);
+ 
+       if (log->use_multippl)
+               log->next_io_sector += (PPL_HEADER_SIZE + io->pp_size) >> 9;
+ 
        list_for_each_entry(sh, &io->stripe_list, log_list) {
                /* entries for full stripe writes have no partial parity */
                if (test_bit(STRIPE_FULL_WRITE, &sh->state))