Re: [PATCH] f2fs: fix fdatasync

From: Chao Yu
Date: Thu Nov 17 2016 - 12:21:38 EST


On 2016/11/17 11:41, Jaegeuk Kim wrote:
> On Thu, Nov 17, 2016 at 11:35:58AM +0800, Chao Yu wrote:
>> On 2016/11/17 10:59, Jaegeuk Kim wrote:
>>> On Thu, Nov 17, 2016 at 10:51:37AM +0800, Chao Yu wrote:
>>>> Hi Jaegeuk,
>>>>
>>>> On 2016/11/17 3:13, Jaegeuk Kim wrote:
>>>>> Hi Chao,
>>>>>
>>>>> On Wed, Nov 16, 2016 at 08:12:11PM +0800, Chao Yu wrote:
>>>>>> For below two cases, we can't guarantee data consistence:
>>>>>>
>>>>>> a)
>>>>>> 1. xfs_io "pwrite 0 4195328" "fsync"
>>>>>> 2. xfs_io "pwrite 4195328 1024" "fdatasync"
>>>>>> 3. godown
>>>>>> 4. umount & mount
>>>>>> --> isize we updated before fdatasync won't be recovered
>>>>>>
>>>>>> b)
>>>>>> 1. xfs_io "pwrite -S 0xcc 0 4202496" "fsync"
>>>>>> 2. xfs_io "fpunch 4194304 4096" "fdatasync"
>>>>>> 3. godown
>>>>>> 4. umount & mount
>>>>>> --> dnode we punched before fdatasync won't be recovered
>>>>>>
>>>>>> The reason is that normally fdatasync won't be aware of modification
>>>>>> of metadata in file, e.g. isize changing, dnode updating, so in ->fsync
>>>>>> we will skip flushing node pages for above cases, result in making
>>>>>> fdatasynced file being lost during recovery.
>>>>>>
>>>>>> Introduce FDATASYNC_INO global ino cache for tracking node changing,
>>>>>> later fdatasync choose to flush nodes depend on ino cache state.
>>>>>
>>>>> We don't need to add this additionally, and would be better to consider other
>>>>> major metadata as well.
>>>>>
>>>>> How about this?
>>>>
>>>> Seems it can't track file after evict?
>>>
>>> Do we need that? That means inode page was already up-to-date?
>>
>> I mean if node/data page of inode were writeback by kworker, after evict, if
>> user open it again and call fdatasync, after sudden power-off, we will not
>> recover it.
>
> That will be handled by need_inode_block_update() below?

Confirmed, let me send v2 and do more tests.

Thanks,

>
> Thanks,
>
> .
>