* [PATCH] f2fs: avoid cpu lockup @ 2017-07-15 1:22 Jaegeuk Kim 2017-07-16 1:04 ` [PATCH v2] " Jaegeuk Kim 0 siblings, 1 reply; 5+ messages in thread From: Jaegeuk Kim @ 2017-07-15 1:22 UTC (permalink / raw) To: linux-kernel, linux-fsdevel, linux-f2fs-devel; +Cc: Jaegeuk Kim Before retrying to flush data or dentry pages, we need to release cpu in order to prevent watchdog. Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> --- fs/f2fs/checkpoint.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c index 56bbf592e487..c96913c56f6c 100644 --- a/fs/f2fs/checkpoint.c +++ b/fs/f2fs/checkpoint.c @@ -909,8 +909,11 @@ int sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type) * wribacking dentry pages in the freeing inode. */ f2fs_submit_merged_write(sbi, DATA); - cond_resched(); } + /* We need to give a chance to get cpu for user file writers. */ + if (!is_dir) + congestion_wait(BLK_RW_ASYNC, HZ/50); + cond_resched(); goto retry; } -- 2.13.0.rc1.294.g07d810a77f-goog ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2] f2fs: avoid cpu lockup 2017-07-15 1:22 [PATCH] f2fs: avoid cpu lockup Jaegeuk Kim @ 2017-07-16 1:04 ` Jaegeuk Kim 2017-07-17 14:34 ` [f2fs-dev] " Chao Yu 0 siblings, 1 reply; 5+ messages in thread From: Jaegeuk Kim @ 2017-07-16 1:04 UTC (permalink / raw) To: linux-kernel, linux-fsdevel, linux-f2fs-devel Before retrying to flush data or dentry pages, we need to release cpu in order to prevent watchdog. Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> --- Change log from v1: - timeout more specifically fs/f2fs/checkpoint.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c index 56bbf592e487..5b876f6d3f6b 100644 --- a/fs/f2fs/checkpoint.c +++ b/fs/f2fs/checkpoint.c @@ -879,6 +879,7 @@ int sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type) struct inode *inode; struct f2fs_inode_info *fi; bool is_dir = (type == DIR_INODE); + unsigned long ino = 0; trace_f2fs_sync_dirty_inodes_enter(sbi->sb, is_dir, get_pages(sbi, is_dir ? @@ -901,8 +902,17 @@ int sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type) inode = igrab(&fi->vfs_inode); spin_unlock(&sbi->inode_lock[type]); if (inode) { + unsigned long cur_ino = inode->i_ino; + filemap_fdatawrite(inode->i_mapping); iput(inode); + /* We need to give cpu to another writers. */ + if (ino == cur_ino) { + congestion_wait(BLK_RW_ASYNC, HZ/50); + cond_resched(); + } else { + ino = cur_ino; + } } else { /* * We should submit bio, since it exists several -- 2.13.0.rc1.294.g07d810a77f-goog ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [f2fs-dev] [PATCH v2] f2fs: avoid cpu lockup 2017-07-16 1:04 ` [PATCH v2] " Jaegeuk Kim @ 2017-07-17 14:34 ` Chao Yu 2017-07-17 22:38 ` Jaegeuk Kim 0 siblings, 1 reply; 5+ messages in thread From: Chao Yu @ 2017-07-17 14:34 UTC (permalink / raw) To: Jaegeuk Kim, linux-kernel, linux-fsdevel, linux-f2fs-devel On 2017/7/16 9:04, Jaegeuk Kim wrote: > Before retrying to flush data or dentry pages, we need to release cpu in order > to prevent watchdog. > > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> Reviewed-by: Chao Yu <yuchao0@huawei.com> > --- > Change log from v1: > - timeout more specifically > > fs/f2fs/checkpoint.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c > index 56bbf592e487..5b876f6d3f6b 100644 > --- a/fs/f2fs/checkpoint.c > +++ b/fs/f2fs/checkpoint.c > @@ -879,6 +879,7 @@ int sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type) > struct inode *inode; > struct f2fs_inode_info *fi; > bool is_dir = (type == DIR_INODE); > + unsigned long ino = 0; > > trace_f2fs_sync_dirty_inodes_enter(sbi->sb, is_dir, > get_pages(sbi, is_dir ? > @@ -901,8 +902,17 @@ int sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type) > inode = igrab(&fi->vfs_inode); > spin_unlock(&sbi->inode_lock[type]); > if (inode) { > + unsigned long cur_ino = inode->i_ino; > + > filemap_fdatawrite(inode->i_mapping); > iput(inode); > + /* We need to give cpu to another writers. */ > + if (ino == cur_ino) { We failed to flush dirty pages of inode due to encountering -EAGAIN of writepage? Thanks, > + congestion_wait(BLK_RW_ASYNC, HZ/50); > + cond_resched(); > + } else { > + ino = cur_ino; > + } > } else { > /* > * We should submit bio, since it exists several > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [f2fs-dev] [PATCH v2] f2fs: avoid cpu lockup 2017-07-17 14:34 ` [f2fs-dev] " Chao Yu @ 2017-07-17 22:38 ` Jaegeuk Kim 2017-07-18 1:40 ` Chao Yu 0 siblings, 1 reply; 5+ messages in thread From: Jaegeuk Kim @ 2017-07-17 22:38 UTC (permalink / raw) To: Chao Yu; +Cc: linux-kernel, linux-fsdevel, linux-f2fs-devel On 07/17, Chao Yu wrote: > On 2017/7/16 9:04, Jaegeuk Kim wrote: > > Before retrying to flush data or dentry pages, we need to release cpu in order > > to prevent watchdog. > > > > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> > > Reviewed-by: Chao Yu <yuchao0@huawei.com> > > > --- > > Change log from v1: > > - timeout more specifically > > > > fs/f2fs/checkpoint.c | 10 ++++++++++ > > 1 file changed, 10 insertions(+) > > > > diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c > > index 56bbf592e487..5b876f6d3f6b 100644 > > --- a/fs/f2fs/checkpoint.c > > +++ b/fs/f2fs/checkpoint.c > > @@ -879,6 +879,7 @@ int sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type) > > struct inode *inode; > > struct f2fs_inode_info *fi; > > bool is_dir = (type == DIR_INODE); > > + unsigned long ino = 0; > > > > trace_f2fs_sync_dirty_inodes_enter(sbi->sb, is_dir, > > get_pages(sbi, is_dir ? > > @@ -901,8 +902,17 @@ int sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type) > > inode = igrab(&fi->vfs_inode); > > spin_unlock(&sbi->inode_lock[type]); > > if (inode) { > > + unsigned long cur_ino = inode->i_ino; > > + > > filemap_fdatawrite(inode->i_mapping); > > iput(inode); > > + /* We need to give cpu to another writers. */ > > + if (ino == cur_ino) { > > We failed to flush dirty pages of inode due to encountering -EAGAIN of writepage? Actually, I found this from a bug case in experimental patches which just skips it accidently. I think WB_SYNC_ALL doesn't return EAGAIN. Thanks, > > Thanks, > > > + congestion_wait(BLK_RW_ASYNC, HZ/50); > > + cond_resched(); > > + } else { > > + ino = cur_ino; > > + } > > } else { > > /* > > * We should submit bio, since it exists several > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [f2fs-dev] [PATCH v2] f2fs: avoid cpu lockup 2017-07-17 22:38 ` Jaegeuk Kim @ 2017-07-18 1:40 ` Chao Yu 0 siblings, 0 replies; 5+ messages in thread From: Chao Yu @ 2017-07-18 1:40 UTC (permalink / raw) To: Jaegeuk Kim, Chao Yu; +Cc: linux-kernel, linux-fsdevel, linux-f2fs-devel On 2017/7/18 6:38, Jaegeuk Kim wrote: > On 07/17, Chao Yu wrote: >> On 2017/7/16 9:04, Jaegeuk Kim wrote: >>> Before retrying to flush data or dentry pages, we need to release cpu in order >>> to prevent watchdog. >>> >>> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> >> >> Reviewed-by: Chao Yu <yuchao0@huawei.com> >> >>> --- >>> Change log from v1: >>> - timeout more specifically >>> >>> fs/f2fs/checkpoint.c | 10 ++++++++++ >>> 1 file changed, 10 insertions(+) >>> >>> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c >>> index 56bbf592e487..5b876f6d3f6b 100644 >>> --- a/fs/f2fs/checkpoint.c >>> +++ b/fs/f2fs/checkpoint.c >>> @@ -879,6 +879,7 @@ int sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type) >>> struct inode *inode; >>> struct f2fs_inode_info *fi; >>> bool is_dir = (type == DIR_INODE); >>> + unsigned long ino = 0; >>> >>> trace_f2fs_sync_dirty_inodes_enter(sbi->sb, is_dir, >>> get_pages(sbi, is_dir ? >>> @@ -901,8 +902,17 @@ int sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type) >>> inode = igrab(&fi->vfs_inode); >>> spin_unlock(&sbi->inode_lock[type]); >>> if (inode) { >>> + unsigned long cur_ino = inode->i_ino; >>> + >>> filemap_fdatawrite(inode->i_mapping); >>> iput(inode); >>> + /* We need to give cpu to another writers. */ >>> + if (ino == cur_ino) { >> >> We failed to flush dirty pages of inode due to encountering -EAGAIN of writepage? > > Actually, I found this from a bug case in experimental patches which just skips > it accidently. I think WB_SYNC_ALL doesn't return EAGAIN. Alright, thanks for explanation. :) Thanks, > > Thanks, > >> >> Thanks, >> >>> + congestion_wait(BLK_RW_ASYNC, HZ/50); >>> + cond_resched(); >>> + } else { >>> + ino = cur_ino; >>> + } >>> } else { >>> /* >>> * We should submit bio, since it exists several >>> > > . > ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-07-18 1:41 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-07-15 1:22 [PATCH] f2fs: avoid cpu lockup Jaegeuk Kim 2017-07-16 1:04 ` [PATCH v2] " Jaegeuk Kim 2017-07-17 14:34 ` [f2fs-dev] " Chao Yu 2017-07-17 22:38 ` Jaegeuk Kim 2017-07-18 1:40 ` Chao Yu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).