From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail203.messagelabs.com (mail203.messagelabs.com [216.82.254.243]) by kanga.kvack.org (Postfix) with SMTP id 7D8A06B00FC for ; Wed, 3 Jun 2009 14:17:44 -0400 (EDT) From: "Eric W. Biederman" Date: Mon, 1 Jun 2009 14:50:48 -0700 Message-Id: <1243893048-17031-23-git-send-email-ebiederm@xmission.com> In-Reply-To: References: Subject: [PATCH 23/23] vfs: Teach readahead to use the file_hotplug_lock Sender: owner-linux-mm@kvack.org To: Al Viro Cc: linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, Hugh Dickins , Tejun Heo , Alexey Dobriyan , Linus Torvalds , Alan Cox , Greg Kroah-Hartman , Nick Piggin , Andrew Morton , Christoph Hellwig , "Eric W. Biederman" , "Eric W. Biederman" List-ID: From: Eric W. Biederman Signed-off-by: Eric W. Biederman --- mm/filemap.c | 25 ++++++++++++++++--------- 1 files changed, 16 insertions(+), 9 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 379ff0b..5016aa5 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1402,16 +1402,23 @@ SYSCALL_DEFINE(readahead)(int fd, loff_t offset, size_t count) ret = -EBADF; file = fget(fd); - if (file) { - if (file->f_mode & FMODE_READ) { - struct address_space *mapping = file->f_mapping; - pgoff_t start = offset >> PAGE_CACHE_SHIFT; - pgoff_t end = (offset + count - 1) >> PAGE_CACHE_SHIFT; - unsigned long len = end - start + 1; - ret = do_readahead(mapping, file, start, len); - } - fput(file); + if (!file) + goto out; + + if (!(file->f_mode & FMODE_READ)) + goto out_fput; + + if (file_hotplug_read_trylock(file)) { + struct address_space *mapping = file->f_mapping; + pgoff_t start = offset >> PAGE_CACHE_SHIFT; + pgoff_t end = (offset + count - 1) >> PAGE_CACHE_SHIFT; + unsigned long len = end - start + 1; + ret = do_readahead(mapping, file, start, len); + file_hotplug_read_unlock(file); } +out_fput: + fput(file); +out: return ret; } #ifdef CONFIG_HAVE_SYSCALL_WRAPPERS -- 1.6.3.1.54.g99dd.dirty -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org