mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-04-01 11:54:10 +00:00
Use lock_page_killable
Replacing lock_page with lock_page_killable in do_generic_mapping_read() allows us to kill `cat' of a file on an NFS-mounted filesystem Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
This commit is contained in:
parent
2687a3569e
commit
0b94e97a25
1 changed files with 7 additions and 4 deletions
11
mm/filemap.c
11
mm/filemap.c
|
@ -982,7 +982,8 @@ page_ok:
|
||||||
|
|
||||||
page_not_up_to_date:
|
page_not_up_to_date:
|
||||||
/* Get exclusive access to the page ... */
|
/* Get exclusive access to the page ... */
|
||||||
lock_page(page);
|
if (lock_page_killable(page))
|
||||||
|
goto readpage_eio;
|
||||||
|
|
||||||
/* Did it get truncated before we got the lock? */
|
/* Did it get truncated before we got the lock? */
|
||||||
if (!page->mapping) {
|
if (!page->mapping) {
|
||||||
|
@ -1010,7 +1011,8 @@ readpage:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!PageUptodate(page)) {
|
if (!PageUptodate(page)) {
|
||||||
lock_page(page);
|
if (lock_page_killable(page))
|
||||||
|
goto readpage_eio;
|
||||||
if (!PageUptodate(page)) {
|
if (!PageUptodate(page)) {
|
||||||
if (page->mapping == NULL) {
|
if (page->mapping == NULL) {
|
||||||
/*
|
/*
|
||||||
|
@ -1021,15 +1023,16 @@ readpage:
|
||||||
goto find_page;
|
goto find_page;
|
||||||
}
|
}
|
||||||
unlock_page(page);
|
unlock_page(page);
|
||||||
error = -EIO;
|
|
||||||
shrink_readahead_size_eio(filp, ra);
|
shrink_readahead_size_eio(filp, ra);
|
||||||
goto readpage_error;
|
goto readpage_eio;
|
||||||
}
|
}
|
||||||
unlock_page(page);
|
unlock_page(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
goto page_ok;
|
goto page_ok;
|
||||||
|
|
||||||
|
readpage_eio:
|
||||||
|
error = -EIO;
|
||||||
readpage_error:
|
readpage_error:
|
||||||
/* UHHUH! A synchronous read error occurred. Report it */
|
/* UHHUH! A synchronous read error occurred. Report it */
|
||||||
desc->error = error;
|
desc->error = error;
|
||||||
|
|
Loading…
Add table
Reference in a new issue