return bl;
  }
  
 -      bip->bip_size = (cmd->data_length / dev->dev_attrib.block_size) *
+ static int
+ iblock_alloc_bip(struct se_cmd *cmd, struct bio *bio)
+ {
+       struct se_device *dev = cmd->se_dev;
+       struct blk_integrity *bi;
+       struct bio_integrity_payload *bip;
+       struct iblock_dev *ib_dev = IBLOCK_DEV(dev);
+       struct scatterlist *sg;
+       int i, rc;
+ 
+       bi = bdev_get_integrity(ib_dev->ibd_bd);
+       if (!bi) {
+               pr_err("Unable to locate bio_integrity\n");
+               return -ENODEV;
+       }
+ 
+       bip = bio_integrity_alloc(bio, GFP_NOIO, cmd->t_prot_nents);
+       if (!bip) {
+               pr_err("Unable to allocate bio_integrity_payload\n");
+               return -ENOMEM;
+       }
+ 
 -      bip->bip_sector = bio->bi_sector;
++      bip->bip_iter.bi_size = (cmd->data_length / dev->dev_attrib.block_size) *
+                        dev->prot_length;
 -      pr_debug("IBLOCK BIP Size: %u Sector: %llu\n", bip->bip_size,
 -               (unsigned long long)bip->bip_sector);
++      bip->bip_iter.bi_sector = bio->bi_iter.bi_sector;
+ 
++      pr_debug("IBLOCK BIP Size: %u Sector: %llu\n", bip->bip_iter.bi_size,
++               (unsigned long long)bip->bip_iter.bi_sector);
+ 
+       for_each_sg(cmd->t_prot_sg, sg, cmd->t_prot_nents, i) {
+ 
+               rc = bio_integrity_add_page(bio, sg_page(sg), sg->length,
+                                           sg->offset);
+               if (rc != sg->length) {
+                       pr_err("bio_integrity_add_page() failed; %d\n", rc);
+                       return -ENOMEM;
+               }
+ 
+               pr_debug("Added bio integrity page: %p length: %d offset; %d\n",
+                        sg_page(sg), sg->length, sg->offset);
+       }
+ 
+       return 0;
+ }
+ 
  static sense_reason_t
  iblock_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
                  enum dma_data_direction data_direction)
 
        spin_lock_init(&lun->lun_sep_lock);
        init_completion(&lun->lun_ref_comp);
  
-       ret = core_tpg_post_addlun(se_tpg, lun, lun_access, dev);
 -      ret = percpu_ref_init(&lun->lun_ref, core_tpg_lun_ref_release);
 -      if (ret < 0)
 -              return ret;
 -
+       ret = core_tpg_add_lun(se_tpg, lun, lun_access, dev);
 -      if (ret < 0) {
 -              percpu_ref_cancel_init(&lun->lun_ref);
 +      if (ret < 0)
                return ret;
 -      }
  
        return 0;
  }