queue_work(system_highpri_wq, &req->work);
}
-static void read_from_bdev_async(struct zram *zram, struct page *page,
- u32 index, unsigned long blk_idx,
- struct bio *parent)
+static int read_from_bdev_async(struct zram *zram, struct page *page,
+ u32 index, unsigned long blk_idx,
+ struct bio *parent)
{
struct zram_rb_req *req;
struct bio *bio;
req = kmalloc_obj(*req, GFP_NOIO);
if (!req)
- return;
+ return -ENOMEM;
bio = bio_alloc(zram->bdev, 1, parent->bi_opf, GFP_NOIO);
if (!bio) {
kfree(req);
- return;
+ return -ENOMEM;
}
req->zram = zram;
__bio_add_page(bio, page, PAGE_SIZE, 0);
bio_inc_remaining(parent);
submit_bio(bio);
+
+ return 0;
}
static void zram_sync_read(struct work_struct *w)
return -EIO;
return read_from_bdev_sync(zram, page, index, blk_idx);
}
- read_from_bdev_async(zram, page, index, blk_idx, parent);
- return 0;
+ return read_from_bdev_async(zram, page, index, blk_idx, parent);
}
#else
static inline void reset_bdev(struct zram *zram) {};