diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/block/brd.c | 5 | ||||
-rw-r--r-- | drivers/s390/block/dcssblk.c | 8 |
2 files changed, 8 insertions, 5 deletions
diff --git a/drivers/block/brd.c b/drivers/block/brd.c index 7bd76639544c..e8e38faeafd8 100644 --- a/drivers/block/brd.c +++ b/drivers/block/brd.c | |||
@@ -319,7 +319,7 @@ out: | |||
319 | 319 | ||
320 | #ifdef CONFIG_BLK_DEV_XIP | 320 | #ifdef CONFIG_BLK_DEV_XIP |
321 | static int brd_direct_access (struct block_device *bdev, sector_t sector, | 321 | static int brd_direct_access (struct block_device *bdev, sector_t sector, |
322 | unsigned long *data) | 322 | void **kaddr, unsigned long *pfn) |
323 | { | 323 | { |
324 | struct brd_device *brd = bdev->bd_disk->private_data; | 324 | struct brd_device *brd = bdev->bd_disk->private_data; |
325 | struct page *page; | 325 | struct page *page; |
@@ -333,7 +333,8 @@ static int brd_direct_access (struct block_device *bdev, sector_t sector, | |||
333 | page = brd_insert_page(brd, sector); | 333 | page = brd_insert_page(brd, sector); |
334 | if (!page) | 334 | if (!page) |
335 | return -ENOMEM; | 335 | return -ENOMEM; |
336 | *data = (unsigned long)page_address(page); | 336 | *kaddr = page_address(page); |
337 | *pfn = page_to_pfn(page); | ||
337 | 338 | ||
338 | return 0; | 339 | return 0; |
339 | } | 340 | } |
diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c index 04787eab1016..bb52d2fbac18 100644 --- a/drivers/s390/block/dcssblk.c +++ b/drivers/s390/block/dcssblk.c | |||
@@ -36,7 +36,7 @@ static int dcssblk_open(struct inode *inode, struct file *filp); | |||
36 | static int dcssblk_release(struct inode *inode, struct file *filp); | 36 | static int dcssblk_release(struct inode *inode, struct file *filp); |
37 | static int dcssblk_make_request(struct request_queue *q, struct bio *bio); | 37 | static int dcssblk_make_request(struct request_queue *q, struct bio *bio); |
38 | static int dcssblk_direct_access(struct block_device *bdev, sector_t secnum, | 38 | static int dcssblk_direct_access(struct block_device *bdev, sector_t secnum, |
39 | unsigned long *data); | 39 | void **kaddr, unsigned long *pfn); |
40 | 40 | ||
41 | static char dcssblk_segments[DCSSBLK_PARM_LEN] = "\0"; | 41 | static char dcssblk_segments[DCSSBLK_PARM_LEN] = "\0"; |
42 | 42 | ||
@@ -636,7 +636,7 @@ fail: | |||
636 | 636 | ||
637 | static int | 637 | static int |
638 | dcssblk_direct_access (struct block_device *bdev, sector_t secnum, | 638 | dcssblk_direct_access (struct block_device *bdev, sector_t secnum, |
639 | unsigned long *data) | 639 | void **kaddr, unsigned long *pfn) |
640 | { | 640 | { |
641 | struct dcssblk_dev_info *dev_info; | 641 | struct dcssblk_dev_info *dev_info; |
642 | unsigned long pgoff; | 642 | unsigned long pgoff; |
@@ -649,7 +649,9 @@ dcssblk_direct_access (struct block_device *bdev, sector_t secnum, | |||
649 | pgoff = secnum / (PAGE_SIZE / 512); | 649 | pgoff = secnum / (PAGE_SIZE / 512); |
650 | if ((pgoff+1)*PAGE_SIZE-1 > dev_info->end - dev_info->start) | 650 | if ((pgoff+1)*PAGE_SIZE-1 > dev_info->end - dev_info->start) |
651 | return -ERANGE; | 651 | return -ERANGE; |
652 | *data = (unsigned long) (dev_info->start+pgoff*PAGE_SIZE); | 652 | *kaddr = (void *) (dev_info->start+pgoff*PAGE_SIZE); |
653 | *pfn = virt_to_phys(*kaddr) >> PAGE_SHIFT; | ||
654 | |||
653 | return 0; | 655 | return 0; |
654 | } | 656 | } |
655 | 657 | ||