lkml.org 
[lkml]   [2011]   [Oct]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/2] LSEEK: BTRFS: Avoid i_mutex for SEEK_{CUR,SET,END}
    Date

    Don't need the i_mutex for those cases, only for SEEK_HOLE/DATA.

    Really-From: Andi Kleen <ak@linux.intel.com>
    Signed-off-by: Andi Kleen <ak@linux.intel.com>
    Signed-off-by: Andres Freund <andres@anarazel.de>
    ---
    fs/btrfs/file.c | 27 +++++++++++----------------
    1 files changed, 11 insertions(+), 16 deletions(-)

    diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
    index 7a13337..5bc7116 100644
    --- a/fs/btrfs/file.c
    +++ b/fs/btrfs/file.c
    @@ -1809,24 +1809,19 @@ static loff_t btrfs_file_llseek(struct file *file, loff_t offset, int origin)
    struct inode *inode = file->f_mapping->host;
    int ret;

    + if (origin != SEEK_DATA && origin != SEEK_HOLE)
    + return generic_file_llseek(file, offset, origin);
    +
    mutex_lock(&inode->i_mutex);
    - switch (origin) {
    - case SEEK_END:
    - case SEEK_CUR:
    - offset = generic_file_llseek(file, offset, origin);
    - goto out;
    - case SEEK_DATA:
    - case SEEK_HOLE:
    - if (offset >= i_size_read(inode)) {
    - mutex_unlock(&inode->i_mutex);
    - return -ENXIO;
    - }
    + if (offset >= i_size_read(inode)) {
    + mutex_unlock(&inode->i_mutex);
    + return -ENXIO;
    + }

    - ret = find_desired_extent(inode, &offset, origin);
    - if (ret) {
    - mutex_unlock(&inode->i_mutex);
    - return ret;
    - }
    + ret = find_desired_extent(inode, &offset, origin);
    + if (ret) {
    + mutex_unlock(&inode->i_mutex);
    + return ret;
    }

    if (offset < 0 && !(file->f_mode & FMODE_UNSIGNED_OFFSET)) {
    --
    1.7.6.409.ge7a85.dirty


    \
     
     \ /
      Last update: 2011-10-01 22:51    [W:0.025 / U:0.216 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site