Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0b94e97a25d9b06ef17fca8da23169200bead1e2
Commit:     0b94e97a25d9b06ef17fca8da23169200bead1e2
Parent:     2687a3569e40b1302f96698bcd6329aeb0ce3dd2
Author:     Matthew Wilcox <[EMAIL PROTECTED]>
AuthorDate: Thu Dec 6 11:19:57 2007 -0500
Committer:  Matthew Wilcox <[EMAIL PROTECTED]>
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 <[EMAIL PROTECTED]>
---
 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 [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to