lkml.org 
[lkml]   [2008]   [Apr]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [patch 3/5] fuse: fix race in llseek
    On Fri, 25 Apr 2008 19:55:23 +0200 Miklos Szeredi <miklos@szeredi.hu> wrote:

    > +static loff_t fuse_file_llseek(struct file *file, loff_t offset, int origin)
    > +{
    > + long long retval;

    I switched this to have a type of loff_t.

    > + struct inode *inode = file->f_path.dentry->d_inode;
    > +
    > + mutex_lock(&inode->i_mutex);
    > + switch (origin) {
    > + case SEEK_END:
    > + offset += i_size_read(inode);

    As we hold i_mutex we could directly read inode->i_size here, save a few
    cycles.

    > + break;
    > + case SEEK_CUR:
    > + offset += file->f_pos;
    > + }
    > + retval = -EINVAL;
    > + if (offset >= 0 && offset <= inode->i_sb->s_maxbytes) {
    > + if (offset != file->f_pos) {
    > + file->f_pos = offset;
    > + file->f_version = 0;
    > + }
    > + retval = offset;
    > + }
    > + mutex_unlock(&inode->i_mutex);
    > + return retval;
    > +}


    \
     
     \ /
      Last update: 2008-04-28 04:29    [W:0.035 / U:0.428 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site