提交 0b94e97a 编写于 作者: M Matthew Wilcox 提交者: Matthew Wilcox

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: NMatthew Wilcox <willy@linux.intel.com>
上级 2687a356
......@@ -982,7 +982,8 @@ void do_generic_mapping_read(struct address_space *mapping,
page_not_up_to_date:
/* 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? */
if (!page->mapping) {
......@@ -1010,7 +1011,8 @@ void do_generic_mapping_read(struct address_space *mapping,
}
if (!PageUptodate(page)) {
lock_page(page);
if (lock_page_killable(page))
goto readpage_eio;
if (!PageUptodate(page)) {
if (page->mapping == NULL) {
/*
......@@ -1021,15 +1023,16 @@ void do_generic_mapping_read(struct address_space *mapping,
goto find_page;
}
unlock_page(page);
error = -EIO;
shrink_readahead_size_eio(filp, ra);
goto readpage_error;
goto readpage_eio;
}
unlock_page(page);
}
goto page_ok;
readpage_eio:
error = -EIO;
readpage_error:
/* UHHUH! A synchronous read error occurred. Report it */
desc->error = error;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册