*/
  bool __bio_integrity_endio(struct bio *bio)
  {
 -      struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev);
 +      struct blk_integrity *bi = blk_get_integrity(bio->bi_disk);
+       struct bio_integrity_payload *bip = bio_integrity(bio);
  
        if (bio_op(bio) == REQ_OP_READ && !bio->bi_status &&
-           bi->profile->verify_fn) {
-               struct bio_integrity_payload *bip = bio_integrity(bio);
- 
+           (bip->bip_flags & BIP_BLOCK_INTEGRITY) && bi->profile->verify_fn) {
                INIT_WORK(&bip->bip_work, bio_integrity_verify_fn);
                queue_work(kintegrityd_wq, &bip->bip_work);
                return false;
 
                ret = -ENOMEM;
                goto out;
        }
 -      bdev = bio->bi_bdev;
+       /*
+        * Keep this task valid during swap readpage because the oom killer may
+        * attempt to access it in the page fault retry time check.
+        */
+       get_task_struct(current);
 +      disk = bio->bi_disk;
        bio->bi_private = current;
        bio_set_op_attrs(bio, REQ_OP_READ, 0);
        count_vm_event(PSWPIN);