From: Eric Biggers <ebigg...@google.com>

Now that the crc32() library function takes advantage of
architecture-specific optimizations, it is unnecessary to go through the
crypto API.  Just use crc32().  This is much simpler, and it improves
performance due to eliminating the crypto API overhead.

Signed-off-by: Eric Biggers <ebigg...@google.com>
---
 fs/f2fs/Kconfig |  3 +--
 fs/f2fs/f2fs.h  | 19 +------------------
 fs/f2fs/super.c | 15 ---------------
 3 files changed, 2 insertions(+), 35 deletions(-)

diff --git a/fs/f2fs/Kconfig b/fs/f2fs/Kconfig
index 68a1e23e1557c..5916a02fb46dd 100644
--- a/fs/f2fs/Kconfig
+++ b/fs/f2fs/Kconfig
@@ -2,12 +2,11 @@
 config F2FS_FS
        tristate "F2FS filesystem support"
        depends on BLOCK
        select BUFFER_HEAD
        select NLS
-       select CRYPTO
-       select CRYPTO_CRC32
+       select CRC32
        select F2FS_FS_XATTR if FS_ENCRYPTION
        select FS_ENCRYPTION_ALGS if FS_ENCRYPTION
        select FS_IOMAP
        select LZ4_COMPRESS if F2FS_FS_LZ4
        select LZ4_DECOMPRESS if F2FS_FS_LZ4
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 33f5449dc22d5..1fc5c2743c8d4 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -1761,13 +1761,10 @@ struct f2fs_sb_info {
 
        /* For write statistics */
        u64 sectors_written_start;
        u64 kbytes_written;
 
-       /* Reference to checksum algorithm driver via cryptoapi */
-       struct crypto_shash *s_chksum_driver;
-
        /* Precomputed FS UUID checksum for seeding other checksums */
        __u32 s_chksum_seed;
 
        struct workqueue_struct *post_read_wq;  /* post read workqueue */
 
@@ -1941,25 +1938,11 @@ static inline unsigned int f2fs_time_to_wait(struct 
f2fs_sb_info *sbi,
  * Inline functions
  */
 static inline u32 __f2fs_crc32(struct f2fs_sb_info *sbi, u32 crc,
                              const void *address, unsigned int length)
 {
-       struct {
-               struct shash_desc shash;
-               char ctx[4];
-       } desc;
-       int err;
-
-       BUG_ON(crypto_shash_descsize(sbi->s_chksum_driver) != sizeof(desc.ctx));
-
-       desc.shash.tfm = sbi->s_chksum_driver;
-       *(u32 *)desc.ctx = crc;
-
-       err = crypto_shash_update(&desc.shash, address, length);
-       BUG_ON(err);
-
-       return *(u32 *)desc.ctx;
+       return crc32(crc, address, length);
 }
 
 static inline u32 f2fs_crc32(struct f2fs_sb_info *sbi, const void *address,
                           unsigned int length)
 {
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 87ab5696bd482..003d3bcb0caa2 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -1670,12 +1670,10 @@ static void f2fs_put_super(struct super_block *sb)
 
        f2fs_destroy_post_read_wq(sbi);
 
        kvfree(sbi->ckpt);
 
-       if (sbi->s_chksum_driver)
-               crypto_free_shash(sbi->s_chksum_driver);
        kfree(sbi->raw_super);
 
        f2fs_destroy_page_array_cache(sbi);
        f2fs_destroy_xattr_caches(sbi);
 #ifdef CONFIG_QUOTA
@@ -4419,19 +4417,10 @@ static int f2fs_fill_super(struct super_block *sb, void 
*data, int silent)
                INIT_LIST_HEAD(&sbi->inode_list[i]);
                spin_lock_init(&sbi->inode_lock[i]);
        }
        mutex_init(&sbi->flush_lock);
 
-       /* Load the checksum driver */
-       sbi->s_chksum_driver = crypto_alloc_shash("crc32", 0, 0);
-       if (IS_ERR(sbi->s_chksum_driver)) {
-               f2fs_err(sbi, "Cannot load crc32 driver.");
-               err = PTR_ERR(sbi->s_chksum_driver);
-               sbi->s_chksum_driver = NULL;
-               goto free_sbi;
-       }
-
        /* set a block size */
        if (unlikely(!sb_set_blocksize(sb, F2FS_BLKSIZE))) {
                f2fs_err(sbi, "unable to set blocksize");
                goto free_sbi;
        }
@@ -4872,12 +4861,10 @@ static int f2fs_fill_super(struct super_block *sb, void 
*data, int silent)
        fscrypt_free_dummy_policy(&F2FS_OPTION(sbi).dummy_enc_policy);
        kvfree(options);
 free_sb_buf:
        kfree(raw_super);
 free_sbi:
-       if (sbi->s_chksum_driver)
-               crypto_free_shash(sbi->s_chksum_driver);
        kfree(sbi);
        sb->s_fs_info = NULL;
 
        /* give only one another chance */
        if (retry_cnt > 0 && skip_recovery) {
@@ -5080,7 +5067,5 @@ module_init(init_f2fs_fs)
 module_exit(exit_f2fs_fs)
 
 MODULE_AUTHOR("Samsung Electronics's Praesto Team");
 MODULE_DESCRIPTION("Flash Friendly File System");
 MODULE_LICENSE("GPL");
-MODULE_SOFTDEP("pre: crc32");
-
-- 
2.47.0


Reply via email to