From d6cf32516589eea9a53d9a79a081c8842579d64b Mon Sep 17 00:00:00 2001 From: David Howells Date: Thu, 27 Aug 2009 13:09:06 +0100 Subject: [PATCH] --- yaml --- r: 157130 b: refs/heads/master c: 9886e836a6a5dbd273dc55b17e713f0a188d137f h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/afs/file.c | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 960608492fd5..c653ca11e160 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1e23502cc57cef33455ac7cb9111e3c6d991a894 +refs/heads/master: 9886e836a6a5dbd273dc55b17e713f0a188d137f diff --git a/trunk/fs/afs/file.c b/trunk/fs/afs/file.c index 0149dab365e7..681c2a7b013f 100644 --- a/trunk/fs/afs/file.c +++ b/trunk/fs/afs/file.c @@ -134,9 +134,16 @@ static int afs_readpage(struct file *file, struct page *page) inode = page->mapping->host; - ASSERT(file != NULL); - key = file->private_data; - ASSERT(key != NULL); + if (file) { + key = file->private_data; + ASSERT(key != NULL); + } else { + key = afs_request_key(AFS_FS_S(inode->i_sb)->volume->cell); + if (IS_ERR(key)) { + ret = PTR_ERR(key); + goto error_nokey; + } + } _enter("{%x},{%lu},{%lu}", key_serial(key), inode->i_ino, page->index); @@ -207,12 +214,17 @@ static int afs_readpage(struct file *file, struct page *page) unlock_page(page); } + if (!file) + key_put(key); _leave(" = 0"); return 0; error: SetPageError(page); unlock_page(page); + if (!file) + key_put(key); +error_nokey: _leave(" = %d", ret); return ret; }