|
@@ -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;
|