lkml.org 
[lkml]   [2011]   [Sep]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 7/7] LSEEK: BTRFS: Avoid i_mutex for SEEK_{CUR,SET,END}
    Date
    From: Andi Kleen <ak@linux.intel.com>

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

    Signed-off-by: Andi Kleen <ak@linux.intel.com>
    ---
    fs/btrfs/file.c | 18 ++++++------------
    1 files changed, 6 insertions(+), 12 deletions(-)

    diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
    index 62f56d4..ae7f37e 100644
    --- a/fs/btrfs/file.c
    +++ b/fs/btrfs/file.c
    @@ -1809,18 +1809,13 @@ 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:
    - ret = find_desired_extent(inode, &offset, origin);
    - if (ret)
    - goto error;
    - }
    + ret = find_desired_extent(inode, &offset, origin);
    + if (ret)
    + goto error;

    if (offset < 0 && !(file->f_mode & FMODE_UNSIGNED_OFFSET)) {
    ret = -EINVAL;
    @@ -1836,7 +1831,6 @@ static loff_t btrfs_file_llseek(struct file *file, loff_t offset, int origin)
    file->f_pos = offset;
    file->f_version = 0;
    }
    -out:
    mutex_unlock(&inode->i_mutex);
    return offset;
    error:
    --
    1.7.4.4


    \
     
     \ /
      Last update: 2011-09-16 01:11    [W:0.019 / U:152.244 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site