mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
dio: use get_user_pages_fast
Use get_user_pages_fast in the common/generic block and fs direct IO paths. Signed-off-by: Nick Piggin <npiggin@suse.de> Cc: Dave Kleikamp <shaggy@austin.ibm.com> Cc: Andy Whitcroft <apw@shadowen.org> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Andi Kleen <andi@firstfloor.org> Cc: Dave Kleikamp <shaggy@austin.ibm.com> Cc: Badari Pulavarty <pbadari@us.ibm.com> Cc: Zach Brown <zach.brown@oracle.com> Cc: Jens Axboe <jens.axboe@oracle.com> Reviewed-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
8174c430e4
commit
f5dd33c494
8
fs/bio.c
8
fs/bio.c
@ -721,12 +721,8 @@ static struct bio *__bio_map_user_iov(struct request_queue *q,
|
|||||||
const int local_nr_pages = end - start;
|
const int local_nr_pages = end - start;
|
||||||
const int page_limit = cur_page + local_nr_pages;
|
const int page_limit = cur_page + local_nr_pages;
|
||||||
|
|
||||||
down_read(¤t->mm->mmap_sem);
|
ret = get_user_pages_fast(uaddr, local_nr_pages,
|
||||||
ret = get_user_pages(current, current->mm, uaddr,
|
write_to_vm, &pages[cur_page]);
|
||||||
local_nr_pages,
|
|
||||||
write_to_vm, 0, &pages[cur_page], NULL);
|
|
||||||
up_read(¤t->mm->mmap_sem);
|
|
||||||
|
|
||||||
if (ret < local_nr_pages) {
|
if (ret < local_nr_pages) {
|
||||||
ret = -EFAULT;
|
ret = -EFAULT;
|
||||||
goto out_unmap;
|
goto out_unmap;
|
||||||
|
@ -150,17 +150,11 @@ static int dio_refill_pages(struct dio *dio)
|
|||||||
int nr_pages;
|
int nr_pages;
|
||||||
|
|
||||||
nr_pages = min(dio->total_pages - dio->curr_page, DIO_PAGES);
|
nr_pages = min(dio->total_pages - dio->curr_page, DIO_PAGES);
|
||||||
down_read(¤t->mm->mmap_sem);
|
ret = get_user_pages_fast(
|
||||||
ret = get_user_pages(
|
|
||||||
current, /* Task for fault acounting */
|
|
||||||
current->mm, /* whose pages? */
|
|
||||||
dio->curr_user_address, /* Where from? */
|
dio->curr_user_address, /* Where from? */
|
||||||
nr_pages, /* How many pages? */
|
nr_pages, /* How many pages? */
|
||||||
dio->rw == READ, /* Write to memory? */
|
dio->rw == READ, /* Write to memory? */
|
||||||
0, /* force (?) */
|
&dio->pages[0]); /* Put results here */
|
||||||
&dio->pages[0],
|
|
||||||
NULL); /* vmas */
|
|
||||||
up_read(¤t->mm->mmap_sem);
|
|
||||||
|
|
||||||
if (ret < 0 && dio->blocks_available && (dio->rw & WRITE)) {
|
if (ret < 0 && dio->blocks_available && (dio->rw & WRITE)) {
|
||||||
struct page *page = ZERO_PAGE(0);
|
struct page *page = ZERO_PAGE(0);
|
||||||
|
Loading…
Reference in New Issue
Block a user