Namjae Jeon <linkinj...@gmail.com> 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. Thanks. -- OGAWA Hirofumi <hirof...@mail.parknet.co.jp> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/