lkml.org 
[lkml]   [2009]   [Jun]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 23/23] vfs: Teach readahead to use the file_hotplug_lock
    From: Eric W. Biederman <ebiederm@maxwell.aristanetworks.com>

    Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com>
    ---
    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


    \
     
     \ /
      Last update: 2009-06-02 00:03    [W:0.025 / U:30.836 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site