From ec4e880955244b9a337754245a89b6fa726fc422 Mon Sep 17 00:00:00 2001 From: Yang Guo Date: Fri, 30 Jul 2021 15:44:18 +0800 Subject: [PATCH] fs/buffer.c: add checking buffer head stat before clear mainline inclusion from mainline-v5.11-rc3 commit 4ebd3aec3842662300979dacd6fb38e3e8edf7f4 category: bugfix bugzilla: 175148 CVE: NA Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4ebd3aec3842662300979dacd6fb38e3e8edf7f4 ------------------------------------------------------------------------ clear_buffer_new() is used to clear buffer new stat. When PAGE_SIZE is 64K, most buffer heads in the list are not needed to clear. clear_buffer_new() has an enpensive atomic modification operation, Let's add checking buffer head before clear it as __block_write_begin_int does which is good for performance. Link: https://lkml.kernel.org/r/1612332890-57918-1-git-send-email-zhangshaokun@hisilicon.com Signed-off-by: Yang Guo Signed-off-by: Shaokun Zhang Cc: Alexander Viro Cc: Nick Piggin Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Reviewed-by: Shaokun Zhang Signed-off-by: Zheng Zengkai --- fs/buffer.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/buffer.c b/fs/buffer.c index 23f645657488..20cd9ea64253 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -2083,7 +2083,8 @@ static int __block_commit_write(struct inode *inode, struct page *page, set_buffer_uptodate(bh); mark_buffer_dirty(bh); } - clear_buffer_new(bh); + if (buffer_new(bh)) + clear_buffer_new(bh); block_start = block_end; bh = bh->b_this_page; -- GitLab