On 06/28, Chao Yu wrote: > Hi Jaegeuk, > > On 2019/6/28 1:05, Jaegeuk Kim wrote: > > This patch allows fallocate to allocate physical blocks for pinned file. > > Quoted from manual of fallocate(2): > " > Any subregion within the range specified by offset and len that did not > contain > data before the call will be initialized to zero. > > If the FALLOC_FL_KEEP_SIZE flag is specified in mode .... Preallocating > zeroed blocks beyond the end of the file in this manner is useful for > optimizing > append workloads. > " > > As quoted description, our change may break the rule of fallocate(, mode = 0), > because with after this change, we can't guarantee that preallocated physical > block contains zeroed data > > Should we introduce an additional ioctl for this case? Or maybe add one more > flag in fallocate() for unzeroed block preallocation, not sure.
I thought like that, but this is a very corner case for the pinned file only in f2fs. And, the pinned file is also indeed used by this purpose. Thanks, > > Thanks, > > > > > Signed-off-by: Jaegeuk Kim <[email protected]> > > --- > > fs/f2fs/file.c | 7 ++++++- > > 1 file changed, 6 insertions(+), 1 deletion(-) > > > > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c > > index e7c368db8185..cdfd4338682d 100644 > > --- a/fs/f2fs/file.c > > +++ b/fs/f2fs/file.c > > @@ -1528,7 +1528,12 @@ static int expand_inode_data(struct inode *inode, > > loff_t offset, > > if (off_end) > > map.m_len++; > > > > - err = f2fs_map_blocks(inode, &map, 1, F2FS_GET_BLOCK_PRE_AIO); > > + if (f2fs_is_pinned_file(inode)) > > + map.m_seg_type = CURSEG_COLD_DATA; > > + > > + err = f2fs_map_blocks(inode, &map, 1, (f2fs_is_pinned_file(inode) ? > > + F2FS_GET_BLOCK_PRE_DIO : > > + F2FS_GET_BLOCK_PRE_AIO)); > > if (err) { > > pgoff_t last_off; > > > > _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
