Use lock_page_killable

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Linux Kernel Mailing List
Date: Thursday, January 31, 2008 - 5:59 pm

Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0b94e9...
Commit:     0b94e97a25d9b06ef17fca8da23169200bead1e2
Parent:     2687a3569e40b1302f96698bcd6329aeb0ce3dd2
Author:     Matthew Wilcox <matthew@wil.cx>
AuthorDate: Thu Dec 6 11:19:57 2007 -0500
Committer:  Matthew Wilcox <willy@linux.intel.com>
CommitDate: Thu Dec 6 17:35:48 2007 -0500

    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>
---
 mm/filemap.c |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/mm/filemap.c b/mm/filemap.c
index ac8f690..455119c 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -982,7 +982,8 @@ page_ok:
 
 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 @@ readpage:
 		}
 
 		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 @@ readpage:
 					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;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Use lock_page_killable, Linux Kernel Mailing ..., (Thu Jan 31, 5:59 pm)