brd.c (8c57a5e7b2820f349c95b8c8393fec1e0f4070d2) brd.c (70246286e94c335b5bea0cbc68a17a96dd620281)
1/*
2 * Ram backed block device driver.
3 *
4 * Copyright (C) 2007 Nick Piggin
5 * Copyright (C) 2007 Novell Inc.
6 *
7 * Parts derived from drivers/block/rd.c, and drivers/block/loop.c, copyright
8 * of their respective owners.

--- 325 unchanged lines hidden (view full) ---

334 struct bio_vec bvec;
335 sector_t sector;
336 struct bvec_iter iter;
337
338 sector = bio->bi_iter.bi_sector;
339 if (bio_end_sector(bio) > get_capacity(bdev->bd_disk))
340 goto io_error;
341
1/*
2 * Ram backed block device driver.
3 *
4 * Copyright (C) 2007 Nick Piggin
5 * Copyright (C) 2007 Novell Inc.
6 *
7 * Parts derived from drivers/block/rd.c, and drivers/block/loop.c, copyright
8 * of their respective owners.

--- 325 unchanged lines hidden (view full) ---

334 struct bio_vec bvec;
335 sector_t sector;
336 struct bvec_iter iter;
337
338 sector = bio->bi_iter.bi_sector;
339 if (bio_end_sector(bio) > get_capacity(bdev->bd_disk))
340 goto io_error;
341
342 if (unlikely(bio->bi_rw & REQ_DISCARD)) {
342 if (unlikely(bio_op(bio) == REQ_OP_DISCARD)) {
343 if (sector & ((PAGE_SIZE >> SECTOR_SHIFT) - 1) ||
344 bio->bi_iter.bi_size & ~PAGE_MASK)
345 goto io_error;
346 discard_from_brd(brd, sector, bio->bi_iter.bi_size);
347 goto out;
348 }
349
343 if (sector & ((PAGE_SIZE >> SECTOR_SHIFT) - 1) ||
344 bio->bi_iter.bi_size & ~PAGE_MASK)
345 goto io_error;
346 discard_from_brd(brd, sector, bio->bi_iter.bi_size);
347 goto out;
348 }
349
350 rw = bio_rw(bio);
351 if (rw == READA)
352 rw = READ;
350 rw = bio_data_dir(bio);
353
354 bio_for_each_segment(bvec, bio, iter) {
355 unsigned int len = bvec.bv_len;
356 int err;
357
358 err = brd_do_bvec(brd, bvec.bv_page, len,
359 bvec.bv_offset, rw, sector);
360 if (err)

--- 15 unchanged lines hidden (view full) ---

376 struct brd_device *brd = bdev->bd_disk->private_data;
377 int err = brd_do_bvec(brd, page, PAGE_SIZE, 0, rw, sector);
378 page_endio(page, rw & WRITE, err);
379 return err;
380}
381
382#ifdef CONFIG_BLK_DEV_RAM_DAX
383static long brd_direct_access(struct block_device *bdev, sector_t sector,
351
352 bio_for_each_segment(bvec, bio, iter) {
353 unsigned int len = bvec.bv_len;
354 int err;
355
356 err = brd_do_bvec(brd, bvec.bv_page, len,
357 bvec.bv_offset, rw, sector);
358 if (err)

--- 15 unchanged lines hidden (view full) ---

374 struct brd_device *brd = bdev->bd_disk->private_data;
375 int err = brd_do_bvec(brd, page, PAGE_SIZE, 0, rw, sector);
376 page_endio(page, rw & WRITE, err);
377 return err;
378}
379
380#ifdef CONFIG_BLK_DEV_RAM_DAX
381static long brd_direct_access(struct block_device *bdev, sector_t sector,
384 void __pmem **kaddr, pfn_t *pfn)
382 void __pmem **kaddr, pfn_t *pfn, long size)
385{
386 struct brd_device *brd = bdev->bd_disk->private_data;
387 struct page *page;
388
389 if (!brd)
390 return -ENODEV;
391 page = brd_insert_page(brd, sector);
392 if (!page)

--- 265 unchanged lines hidden ---
383{
384 struct brd_device *brd = bdev->bd_disk->private_data;
385 struct page *page;
386
387 if (!brd)
388 return -ENODEV;
389 page = brd_insert_page(brd, sector);
390 if (!page)

--- 265 unchanged lines hidden ---