On 2017/11/22 18:23, Sheng Yong wrote: > If there is not enough space left, f2fs_preallocate_blocks may only > preallocte partial blocks. As a result, the write operation fails > but i_blocks is not 0. To avoid this, f2fs should write data in > non-preallocation way and write as many data as the size of i_blocks. > > Signed-off-by: Sheng Yong <shengyo...@huawei.com>
Reviewed-by: Chao Yu <yuch...@huawei.com> Thanks, > --- > fs/f2fs/data.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c > index b0781edc9ada..e593df628158 100644 > --- a/fs/f2fs/data.c > +++ b/fs/f2fs/data.c > @@ -862,8 +862,14 @@ int f2fs_preallocate_blocks(struct kiocb *iocb, struct > iov_iter *from) > if (err) > return err; > } > - if (!f2fs_has_inline_data(inode)) > - return f2fs_map_blocks(inode, &map, 1, F2FS_GET_BLOCK_PRE_AIO); > + if (!f2fs_has_inline_data(inode)) { > + err = f2fs_map_blocks(inode, &map, 1, F2FS_GET_BLOCK_PRE_AIO); > + if (map.m_len > 0 && err == -ENOSPC) { > + set_inode_flag(inode, FI_NO_PREALLOC); > + err = 0; > + } > + return err; > + } > return err; > } > > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel