projects
/
cascardo
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
UBIFS: add no_chk_data_crc mount option
[cascardo/linux.git]
/
fs
/
direct-io.c
diff --git
a/fs/direct-io.c
b/fs/direct-io.c
index
b5928a7
..
9606ee8
100644
(file)
--- a/
fs/direct-io.c
+++ b/
fs/direct-io.c
@@
-150,20
+150,14
@@
static int dio_refill_pages(struct dio *dio)
int nr_pages;
nr_pages = min(dio->total_pages - dio->curr_page, DIO_PAGES);
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? */
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)) {
if (ret < 0 && dio->blocks_available && (dio->rw & WRITE)) {
- struct page *page = ZERO_PAGE(
dio->curr_user_address
);
+ struct page *page = ZERO_PAGE(
0
);
/*
* A memory fault, but the filesystem has some outstanding
* mapped blocks. We need to use those blocks up to avoid
/*
* A memory fault, but the filesystem has some outstanding
* mapped blocks. We need to use those blocks up to avoid
@@
-763,7
+757,7
@@
static void dio_zero_block(struct dio *dio, int end)
this_chunk_bytes = this_chunk_blocks << dio->blkbits;
this_chunk_bytes = this_chunk_blocks << dio->blkbits;
- page = ZERO_PAGE(
dio->curr_user_address
);
+ page = ZERO_PAGE(
0
);
if (submit_page_section(dio, page, 0, this_chunk_bytes,
dio->next_block_for_io))
return;
if (submit_page_section(dio, page, 0, this_chunk_bytes,
dio->next_block_for_io))
return;
@@
-878,8
+872,8
@@
do_holes:
page_cache_release(page);
goto out;
}
page_cache_release(page);
goto out;
}
- zero_user
_page
(page, block_in_page << blkbits,
- 1 << blkbits
, KM_USER0
);
+ zero_user(page, block_in_page << blkbits,
+ 1 << blkbits);
dio->block_in_file++;
block_in_page++;
goto next_block;
dio->block_in_file++;
block_in_page++;
goto next_block;