mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00: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
2 changed files with 4 additions and 14 deletions
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 page_limit = cur_page + local_nr_pages;
|
||||
|
||||
down_read(¤t->mm->mmap_sem);
|
||||
ret = get_user_pages(current, current->mm, uaddr,
|
||||
local_nr_pages,
|
||||
write_to_vm, 0, &pages[cur_page], NULL);
|
||||
up_read(¤t->mm->mmap_sem);
|
||||
|
||||
ret = get_user_pages_fast(uaddr, local_nr_pages,
|
||||
write_to_vm, &pages[cur_page]);
|
||||
if (ret < local_nr_pages) {
|
||||
ret = -EFAULT;
|
||||
goto out_unmap;
|
||||
|
|
|
@ -150,17 +150,11 @@ static int dio_refill_pages(struct dio *dio)
|
|||
int nr_pages;
|
||||
|
||||
nr_pages = min(dio->total_pages - dio->curr_page, DIO_PAGES);
|
||||
down_read(¤t->mm->mmap_sem);
|
||||
ret = get_user_pages(
|
||||
current, /* Task for fault acounting */
|
||||
current->mm, /* whose pages? */
|
||||
ret = get_user_pages_fast(
|
||||
dio->curr_user_address, /* Where from? */
|
||||
nr_pages, /* How many pages? */
|
||||
dio->rw == READ, /* Write to memory? */
|
||||
0, /* force (?) */
|
||||
&dio->pages[0],
|
||||
NULL); /* vmas */
|
||||
up_read(¤t->mm->mmap_sem);
|
||||
&dio->pages[0]); /* Put results here */
|
||||
|
||||
if (ret < 0 && dio->blocks_available && (dio->rw & WRITE)) {
|
||||
struct page *page = ZERO_PAGE(0);
|
||||
|
|
Loading…
Reference in a new issue