Messages in this thread | | | Subject | Re: [f2fs-dev] [PATCH] f2fs: cover f2fs_lock_op in expand_inode_data case | From | Chao Yu <> | Date | Fri, 3 Jan 2020 14:49:09 +0800 |
| |
On 2019/12/19 3:53, Jaegeuk Kim wrote: > We were missing to cover f2fs_lock_op in this case.
Jaegeuk,
generic/269 will hang with this patch, and also bugzilla reports android with last code will hang with the same stack.
Could you check this patch?
Thanks,
> > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> > --- > fs/f2fs/file.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c > index 4ea9bf9e8701..0b74f94ac8ee 100644 > --- a/fs/f2fs/file.c > +++ b/fs/f2fs/file.c > @@ -1646,12 +1646,13 @@ static int expand_inode_data(struct inode *inode, loff_t offset, > if (err && err != -ENODATA && err != -EAGAIN) > goto out_err; > } > - > + f2fs_lock_op(sbi); > down_write(&sbi->pin_sem); > map.m_seg_type = CURSEG_COLD_DATA_PINNED; > f2fs_allocate_new_segments(sbi, CURSEG_COLD_DATA); > err = f2fs_map_blocks(inode, &map, 1, F2FS_GET_BLOCK_PRE_DIO); > up_write(&sbi->pin_sem); > + f2fs_unlock_op(sbi); > > done += map.m_len; > len -= map.m_len; > @@ -1661,7 +1662,9 @@ static int expand_inode_data(struct inode *inode, loff_t offset, > > map.m_len = done; > } else { > + f2fs_lock_op(sbi); > err = f2fs_map_blocks(inode, &map, 1, F2FS_GET_BLOCK_PRE_AIO); > + f2fs_unlock_op(sbi); > } > out_err: > if (err) { >
| |