summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/super.c
diff options
context:
space:
mode:
authorDavid Sterba <dsterba@suse.com>2019-05-16 13:39:59 +0200
committerDavid Sterba <dsterba@suse.com>2019-07-01 13:34:53 +0200
commit9b4e675a9978800995f83af0ed90e890ca501f31 (patch)
tree4a24a502eddfcfa47903ec366aa36e89d5722eef /fs/btrfs/super.c
parentbtrfs: extent-tree: Refactor add_pinned_bytes() to add|sub_pinned_bytes() (diff)
downloadlinux-9b4e675a9978800995f83af0ed90e890ca501f31.tar.xz
linux-9b4e675a9978800995f83af0ed90e890ca501f31.zip
btrfs: detect fast implementation of crc32c on all architectures
Currently, there's only check for fast crc32c implementation on X86, based on the CPU flags. This is used to decide if checksumming should be offloaded to worker threads or can be calculated by the caller. As there are more architectures that implement a faster version of crc32c (ARM, SPARC, s390, MIPS, PowerPC), also there are specialized hw cards. The detection is based on driver name, all generic C implementations contain 'generic', while the specialized versions do not. Alternatively the priority could be used, but this is not currently provided by the crypto API. The flag is set per-filesystem at mount time and used for the offloading decisions. Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/super.c')
-rw-r--r--fs/btrfs/super.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index 0645ec428b4f..db410c6b5f5f 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -1553,6 +1553,8 @@ static struct dentry *btrfs_mount_root(struct file_system_type *fs_type,
} else {
snprintf(s->s_id, sizeof(s->s_id), "%pg", bdev);
btrfs_sb(s)->bdev_holder = fs_type;
+ if (!strstr(crc32c_impl(), "generic"))
+ set_bit(BTRFS_FS_CSUM_IMPL_FAST, &fs_info->flags);
error = btrfs_fill_super(s, fs_devices, data);
}
if (!error)