[Ocfs2-devel] [PATCH] ocfs2: using i_size_read() to access i_size

Junxiao Bi junxiao.bi at oracle.com
Mon Jul 22 01:57:32 PDT 2013


Hi Jeff,

On 07/19/2013 05:50 PM, Jeff Liu wrote:
> On 07/19/2013 05:16 PM, Junxiao Bi wrote:
>
>> Hi Jeff,
>>
>> On 07/19/2013 04:30 PM, Jeff Liu wrote:
>>> On 07/19/2013 04:12 PM, Junxiao Bi wrote:
>>>
>>>> Hi Jeff,
>>>>
>>>> On 07/19/2013 04:03 PM, Jeff Liu wrote:
>>>>> Hi Junxiao,
>>>>>
>>>>> On 07/19/2013 03:38 PM, Junxiao Bi wrote:
>>>>>
>>>>>> Hi Jeff,
>>>>>>
>>>>>> On 07/17/2013 07:13 AM, Jeff Liu wrote:
>>>>>>>>> diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
>>>>>>>>>>> index 3ce6a8b..7158710 100644
>>>>>>>>>>> --- a/fs/ocfs2/file.c
>>>>>>>>>>> +++ b/fs/ocfs2/file.c
>>>>>>>>>>> @@ -2650,7 +2650,7 @@ static loff_t ocfs2_file_llseek(struct file *file, loff_t offset, int whence)
>>>>>>> We have the inode mutex around ocfs2_file_llseek(), and that is too extensive
>>>>>>> to block the concurrent access for particular seek operations.  At least,
>>>>>>> we can get rid of this lock for SEEK_SET/SEEK_CUR. i.e,  In either case,
>>>>>>> we can fall through generic_file_llseek() directly without the mutex lock.
>>>>>> Think about this again, I think we can't remove the mutex, as it is used
>>>>>> to protect other inode member beside i_size, like
>>>>>> inode->i_sb->s_maxbytes which is accessed in all SEEK request and also
>>>>>> more in ocfs2_inode_lock().
>>>>> Thanks for digging into this.  s_maxbytes is a numeric constant which is
>>>>> calculated out at OCFS2 mount with filling up the super blocks, IOWs, it
>>>>> does not need any lock protection IMO.
>>>>>
>>>>> Besides that, could you please pointed me out anything am missed?
>>>> Can inode->i_sb be set to NULL during this?
>>> No, actually when we get into ocfs2_file_llseek(), the corresponding
>>> inode should be in VFS inode cache and it should not be a bad inode
>>> as well, otherwise, it can not go through vfs_llseek(). :)
>> Thank you for explaining this.
>> So for SEEK_SET and SEEK_CUR, we may make some improvement, indeed in
>> gereric_file_llseek(), it also use a spin lock to protect concurrent
>> SEEK_CUR access.
>> is there really a perf issue that deserve us to make a hack to hurt code
>> readability?
> Sure, and also, I don't think this is *hack*.  Instead, it's an old significant
> improvements in VFS generic_file_lseek() from Andi Kleen back to 2011.  Maybe OCFS2
> is the only file system without this turn-up as we lack of upstream activity for a
> long time.  For detail, please refer to:
>
> commit ef3d0fd27e90f67e35da516dafc1482c82939a60
> Author: Andi Kleen <ak at linux.intel.com>
> Date:   Thu Sep 15 16:06:48 2011 -0700
>
>     vfs: do (nearly) lockless generic_file_llseek
>     
>     The i_mutex lock use of generic _file_llseek hurts.  Independent processes
>     accessing the same file synchronize over a single lock, even though
>     they have no need for synchronization at all.
>     
>     Under high utilization this can cause llseek to scale very poorly on larger
>     systems.
>     
>     This patch does some rethinking of the llseek locking model:
Thanks for point this out for me, I will make a patch for this.

Thanks,
Junxiao.
>
>
> Thanks,
> -Jeff




More information about the Ocfs2-devel mailing list