Re: [PATCH v6] fat: additions to support fat_fallocate
From: Namjae Jeon
Date: Thu Sep 26 2013 - 07:28:28 EST
2013/9/24, OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx>:
> Namjae Jeon <linkinjeon@xxxxxxxxx> writes:
>
>>>> We considered after your advice before. we reach for the conclusion
>>>> that use this method.
>>>> because, Cluster is already allocated in fat fallocate and
>>>> when we write with radom offset over i_size on fallocated region, It
>>>> will be hit by fat cache in fat_bmap of get_block, which mean buffer
>>>> is not set to new.
>>>
>>> Hm, how does it hit to fat cache? I think fat_alloc_clusters() and
>>> fat_chain_add() doesn't update fat cache, right? I.e. initial write
>>> after fallocate() should not hit fat cache over i_size?
>>
>> Ah.. Sorry for wrong reply. old memory make me confusing.
>> By allocating cluster in fat fallocate, when write, fat_bmap of
>> get_block return physical sector number.
>> So buffer is not set to new in _fat_get_block.
>>
>> When we fallocate with keep size on -> only clusters are added to the
>> fat chain calling fat_get_cluster(),and add the cluster to cluster
>> chain.
>> This doesnât call fat_get_block() .
>
> Right.
>
>> Now when we try to write in the fallocated region in the
>> fat_write_begin() when it is called first time it checks that the
>> mismatch is present between the mmu_private and mmu_actual (i.e., the
>> file has pre-allocated blocks), and hence zero out the region ;
>> Since buffer_new() is not set for fallocated region by fat_get_block()
>> , we explicitly zero out the lseek'ed region using
>> âfat_zero_falloc_areaâ and normal write occurs beyond that,and i_size
>> is updated accordingly.
>
> Yes. So I'm saying fixing fat_get_block() would not be hard.
>
> For example, add new size the disk_size, totally 3 sizes - 1) i_size 2)
> mmu_private (aka, initialized size) 3) disk_size (aka, uninitialized
> size).
>
> When called fat_get_block(), it checks the region between mmu_private
> and disk_size. If block hits that region, block is uninitialized area,
> so return as buffer_new().
>
> Like this, I think it is not hard. Please consider like above example
> too.
Yes, I checked after change as your suggestion. it work fine.
I will post the updated patch soon.
Thanks. OGAWA.
>
> Thanks.
> --
> OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/