WSL2-Linux-Kernel/fs/btrfs
Ira Weiny d048b9c2a7 btrfs: use memzero_page() instead of open coded kmap pattern
There are many places where kmap/memset/kunmap patterns occur.

Use the newly lifted memzero_page() to eliminate direct uses of kmap and
leverage the new core functions use of kmap_local_page().

The development of this patch was aided by the following coccinelle
script:

// <smpl>
// SPDX-License-Identifier: GPL-2.0-only
// Find kmap/memset/kunmap pattern and replace with memset*page calls
//
// NOTE: Offsets and other expressions may be more complex than what the script
// will automatically generate.  Therefore a catchall rule is provided to find
// the pattern which then must be evaluated by hand.
//
// Confidence: Low
// Copyright: (C) 2021 Intel Corporation
// URL: http://coccinelle.lip6.fr/
// Comments:
// Options:

//
// Then the memset pattern
//
@ memset_rule1 @
expression page, V, L, Off;
identifier ptr;
type VP;
@@

(
-VP ptr = kmap(page);
|
-ptr = kmap(page);
|
-VP ptr = kmap_atomic(page);
|
-ptr = kmap_atomic(page);
)
<+...
(
-memset(ptr, 0, L);
+memzero_page(page, 0, L);
|
-memset(ptr + Off, 0, L);
+memzero_page(page, Off, L);
|
-memset(ptr, V, L);
+memset_page(page, V, 0, L);
|
-memset(ptr + Off, V, L);
+memset_page(page, V, Off, L);
)
...+>
(
-kunmap(page);
|
-kunmap_atomic(ptr);
)

// Remove any pointers left unused
@
depends on memset_rule1
@
identifier memset_rule1.ptr;
type VP, VP1;
@@

-VP ptr;
	... when != ptr;
? VP1 ptr;

//
// Catch all
//
@ memset_rule2 @
expression page;
identifier ptr;
expression GenTo, GenSize, GenValue;
type VP;
@@

(
-VP ptr = kmap(page);
|
-ptr = kmap(page);
|
-VP ptr = kmap_atomic(page);
|
-ptr = kmap_atomic(page);
)
<+...
(
//
// Some call sites have complex expressions within the memset/memcpy
// The follow are catch alls which need to be evaluated by hand.
//
-memset(GenTo, 0, GenSize);
+memzero_pageExtra(page, GenTo, GenSize);
|
-memset(GenTo, GenValue, GenSize);
+memset_pageExtra(page, GenValue, GenTo, GenSize);
)
...+>
(
-kunmap(page);
|
-kunmap_atomic(ptr);
)

// Remove any pointers left unused
@
depends on memset_rule2
@
identifier memset_rule2.ptr;
type VP, VP1;
@@

-VP ptr;
	... when != ptr;
? VP1 ptr;

// </smpl>

Link: https://lkml.kernel.org/r/20210309212137.2610186-4-ira.weiny@intel.com
Signed-off-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Cc: Chris Mason <clm@fb.com>
Cc: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2021-05-05 11:27:27 -07:00
..
tests
Kconfig
Makefile btrfs: move the tree mod log code into its own file 2021-04-19 17:25:16 +02:00
acl.c
async-thread.c
async-thread.h
backref.c btrfs: move the tree mod log code into its own file 2021-04-19 17:25:16 +02:00
backref.h
block-group.c btrfs: zoned: automatically reclaim zones 2021-04-20 20:46:31 +02:00
block-group.h btrfs: zoned: automatically reclaim zones 2021-04-20 20:46:31 +02:00
block-rsv.c
block-rsv.h
btrfs_inode.h btrfs: remove stale comment and logic from btrfs_inode_in_log() 2021-04-19 17:25:16 +02:00
check-integrity.c btrfs: integrity-checker: convert block context kmap's to kmap_local_page 2021-04-19 17:25:16 +02:00
check-integrity.h
compression.c btrfs: use memzero_page() instead of open coded kmap pattern 2021-05-05 11:27:27 -07:00
compression.h
ctree.c btrfs: improve btree readahead for full send operations 2021-04-19 17:25:17 +02:00
ctree.h Merge branch 'miklos.fileattr' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2021-04-27 11:18:24 -07:00
delalloc-space.c
delalloc-space.h
delayed-inode.c btrfs: use btrfs_inode_lock/btrfs_inode_unlock inode lock helpers 2021-04-19 17:25:15 +02:00
delayed-inode.h
delayed-ref.c btrfs: update debug message when checking seq number of a delayed ref 2021-04-19 17:25:17 +02:00
delayed-ref.h
dev-replace.c
dev-replace.h
dir-item.c
discard.c
discard.h
disk-io.c btrfs: zoned: automatically reclaim zones 2021-04-20 20:46:31 +02:00
disk-io.h
export.c
export.h
extent-io-tree.h
extent-tree.c btrfs: use the new bit BTRFS_FS_TREE_MOD_LOG_USERS at btrfs_free_tree_block() 2021-04-19 17:25:16 +02:00
extent_io.c btrfs: use memzero_page() instead of open coded kmap pattern 2021-05-05 11:27:27 -07:00
extent_io.h btrfs: move forward declarations to the beginning of extent_io.h 2021-04-19 17:25:19 +02:00
extent_map.c
extent_map.h
file-item.c btrfs: remove duplicated in_range() macro 2021-04-19 17:25:16 +02:00
file.c btrfs: fix a potential hole punching failure 2021-04-19 17:25:17 +02:00
free-space-cache.c btrfs: zoned: automatically reclaim zones 2021-04-20 20:46:31 +02:00
free-space-cache.h
free-space-tree.c
free-space-tree.h
inode-item.c
inode.c btrfs: use memzero_page() instead of open coded kmap pattern 2021-05-05 11:27:27 -07:00
ioctl.c Merge branch 'miklos.fileattr' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2021-04-27 11:18:24 -07:00
locking.c
locking.h
lzo.c btrfs: convert kmap to kmap_local_page, simple cases 2021-04-19 17:25:16 +02:00
misc.h
ordered-data.c btrfs: replace offset_in_entry with in_range 2021-04-19 17:25:14 +02:00
ordered-data.h btrfs: fix comment for btrfs ordered extent flag bits 2021-04-19 17:25:14 +02:00
orphan.c
print-tree.c
print-tree.h
props.c
props.h
qgroup.c btrfs: move the tree mod log code into its own file 2021-04-19 17:25:16 +02:00
qgroup.h
raid56.c CFI on arm64 series for v5.13-rc1 2021-04-27 10:16:46 -07:00
raid56.h
rcu-string.h
reada.c
ref-verify.c
ref-verify.h
reflink.c btrfs: use memzero_page() instead of open coded kmap pattern 2021-05-05 11:27:27 -07:00
reflink.h
relocation.c btrfs: check return value of btrfs_commit_transaction in relocation 2021-04-19 17:25:22 +02:00
root-tree.c
scrub.c btrfs: zoned: fix unpaired block group unfreeze during device replace 2021-04-20 19:32:43 +02:00
send.c btrfs: improve btree readahead for full send operations 2021-04-19 17:25:17 +02:00
send.h
space-info.c btrfs: use percpu_read_positive instead of sum_positive for need_preempt 2021-04-19 17:25:17 +02:00
space-info.h
struct-funcs.c
subpage.c btrfs: subpage: add overview comments 2021-04-19 17:25:18 +02:00
subpage.h btrfs: subpage: introduce helpers for writeback status 2021-04-19 17:25:18 +02:00
super.c btrfs: more graceful errors/warnings on 32bit systems when reaching limits 2021-04-20 19:56:50 +02:00
sysfs.c btrfs: zoned: automatically reclaim zones 2021-04-20 20:46:31 +02:00
sysfs.h
transaction.c btrfs: fix race between transaction aborts and fsyncs leading to use-after-free 2021-04-19 17:25:22 +02:00
transaction.h btrfs: fix exhaustion of the system chunk array due to concurrent allocations 2021-04-19 17:25:17 +02:00
tree-checker.c btrfs: tree-checker: check for BTRFS_BLOCK_FLAG_FULL_BACKREF being set improperly 2021-04-19 17:25:21 +02:00
tree-checker.h
tree-defrag.c
tree-log.c CFI on arm64 series for v5.13-rc1 2021-04-27 10:16:46 -07:00
tree-log.h
tree-mod-log.c btrfs: fix race when picking most recent mod log operation for an old root 2021-04-20 19:27:17 +02:00
tree-mod-log.h btrfs: add and use helper to get lowest sequence number for the tree mod log 2021-04-19 17:25:17 +02:00
ulist.c
ulist.h
uuid-tree.c
volumes.c CFI on arm64 series for v5.13-rc1 2021-04-27 10:16:46 -07:00
volumes.h btrfs: zoned: automatically reclaim zones 2021-04-20 20:46:31 +02:00
xattr.c
xattr.h
zlib.c btrfs: use memzero_page() instead of open coded kmap pattern 2021-05-05 11:27:27 -07:00
zoned.c btrfs: zoned: fail mount if the device does not support zone append 2021-04-19 17:25:23 +02:00
zoned.h btrfs: zoned: automatically reclaim zones 2021-04-20 20:46:31 +02:00
zstd.c btrfs: use memzero_page() instead of open coded kmap pattern 2021-05-05 11:27:27 -07:00